单片机课程设计,数字温度计。

1.?实验任务?

可调电阻器用于调节作为模拟温度输入的电压值。当温度低于30℃时,发出长蜂鸣声报警和光报警,当温度高于60℃时,发出短蜂鸣声报警和光报警。测量温度范围为0-99℃。

2.?示意电路图

(图)参见图示。

3.?系统板上的硬件布线?

a)?用8芯扁平电缆将“单片机系统”区域的P1.0-P1.7与“动态数字显示”区域的ABCDEFGH端口连接。?

b)?用一根8芯电缆连接“单片机系统”区域的P2.0-P2.7和“动态数字显示”区域的s 1s 2s 3s 5s 6s 7s 8。?

c)?用导线将“单片机系统”区域的P3.0与“模数转换模块”区域的ST端子连接起来。?

d)?用导线将“单片机系统”区的P3.1与“模数转换模块”区的OE端子连接。?

e)?用导线将“单片机系统”区域的P3.2与“模数转换模块”区域的EOC端子连接起来。?

f)?用导线将“单片机系统”区域的P3.3与“模数转换模块”区域的CLK端子连接起来。?

g)?用导线将“A/D转换模块”区域的端子A2A1A0连接到“电源模块”区域的端子GND。?

h)?用导线将“A/D转换模块”区域的IN0端子连接到“三向可调电压模块”区域的VR1端子。?

我)?用一根8芯电缆将“单片机系统”区域的P0.0-P0.7连接到“模数转换模块”区域的端子d0d 1 2d 3d 4d 6d 7。?

j)?将“单片机系统”区域的P3.6和P3.7分别用导线连接到“八路LED指示灯模块”区域的L1和L2。?

k)?用导线将“单片机系统”区域的P3.5连接到“音频放大模块”区域的SPK。在港口。?

l)?把SPK放在“音频放大模块”区?向外插入音频扬声器。?

4.c语言源程序

#包含?& ltAT89X52。H & gt

未签名?夏尔?代码?dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f };

未签名?夏尔?代码?dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d、0x7d、0x07、0x7f、0x6f、0x 00 };

未签名?夏尔?dispbuf[8]={10,10,10,10,10,10,0,0 };

未签名?夏尔?dispcount

未签名?夏尔?getdata

未签名?int?温度;

未签名?夏尔?我;

sbit?st=p3^0;

sbit?oe=p3^1;

sbit?eoc=p3^2;

sbit?clk=p3^3;

sbit?led1=p3^6;

sbit?led2=p3^7;

sbit?spk=p3^5;

比特?lowflag

比特?highflag

未签名?int?cnta

未签名?int?cntb

比特?alarmflag

作废?主要(无效)

{

ST = 0;

OE = 0;

TMOD = 0x 12;

TH0 = 0x 216;

TL0 = 0x 216;

th 1 =(65536-500)/256;

TL 1 =(65536-500)% 256;

tr 1 = 1;

TR0 = 1;

ET0 = 1;

et 1 = 1;

EA = 1;

ST = 1;

ST = 0;

while(1)

{

if((lowflag==1)?& amp& amp(highflag==0))

{

led 1 = 0;

led 2 = 1;

}

不然呢?if((highflag==1)?& amp& amp?(lowflag==0))

{

led 1 = 1;

led 2 = 0;

}

其他

{

led 1 = 1;

led 2 = 1;

}

}

}

作废?t0(void)?打断?1?使用?0

{

CLK = ~ CLK;

}

作废?t1(void)?打断?3?使用?0

{

th 1 =(65536-500)/256;

TL 1 =(65536-500)% 256;

if(EOC==1)

{

OE = 1;

getdata = P0

OE = 0;

temp = getdata * 25

temp = temp/64;

I = 6;

disp buf[0]= 10;

disp buf[1]= 10;

disp buf[2]= 10;

disp buf[3]= 10;

disp buf[4]= 10;

disp buf[5]= 10;

disp buf[6]= 0;

disp buf[7]= 0;

while(temp/10)

{

disp buf[I]= temp % 10;

temp = temp/10;

i++;

}

disp buf[I]= temp;

if(get data & lt;77)

{

low flag = 1;

high flag = 0;

}

不然呢?if(get data & gt;153)

{

low flag = 0;

high flag = 1;

}

其他

{

low flag = 0;

high flag = 0;

}

ST = 1;

ST = 0;

}

p 1 = disp code[disp buf[disp count]];

P2 = dispbitcode[disp count];

disp count++;

if(dispcount==8)

{

dispcount = 0;

}

if((lowflag==1)?& amp& amp?(highflag==0))

{

cnta++;

如果(cnta==800)

{

cnta = 0;

alarmflag = ~ alarmflag

}

if(alarmflag==1)

{

SPK = ~ SPK;

}

}

不然呢?if((lowflag==0)?& amp& amp?(highflag==1))

{

CNT b++;

如果(cntb==400)

{

cntb = 0;

alarmflag = ~ alarmflag

}

if(alarmflag==1)

{

SPK = ~ SPK;

}

}

其他

{

alarm flag = 0;

cnta = 0;

cntb = 0;

}

}