单片机课程设计,数字温度计。
可调电阻器用于调节作为模拟温度输入的电压值。当温度低于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;
}
}