【学习笔记】单片机的40个经典实验之26:两点间温度控制
一、实验任务
用可调电阻调节电压值作为模拟温度的输入量,当温度低于 30℃时,发出长嘀报警声和光报警,当温度高于 60℃时,发出短嘀报警声和光报警。测量的温度范围在 0-99℃。
二、电路原理图
图 4.29.1
三、系统板上硬件连线
a) 把“单片机系统”区域中的 P1.0-P1.7 与“动态数码显示”区域中的ABCDEFGH 端口用 8 芯排线连接。
b) 把“单片机系统”区域中的 P2.0-P2.7 与“动态数码显示”区域中的S1S2S3S4S5S6S7S8 端口用 8 芯排线连接。
c) 把“单片机系统”区域中的 P3.0 与“模数转换模块”区域中的 ST 端子用导线相连接。
d) 把“单片机系统”区域中的 P3.1 与“模数转换模块”区域中的 OE 端子用导线相连接。
e) 把“单片机系统”区域中的 P3.2 与“模数转换模块”区域中的 EOC 端子用导线相连接。
f) 把“单片机系统”区域中的 P3.3 与“模数转换模块”区域中的 CLK 端子用导线相连接。
g) 把“模数转换模块”区域中的 A2A1A0 端子用导线连接到“电源模块”区域中的 GND 端子上。
h) 把“模数转换模块”区域中的 IN0 端子用导线连接到“三路可调电压模块”区域中的 VR1 端子上。
i) 把“单片机系统”区域中的 P0.0-P0.7 用 8 芯排线连接到“模数转换模块”区域中的 D0D1D2D3D4D5D6D7 端子上。
j) 把“单片机系统”区域中的 P3.6、P3.7 用导线分别连接到“八路发光二极管指示模块”区域中的 L1、L2 上。
k) 把“单片机系统”区域中的 P3.5 用导线连接到“音频放大模块”区域中的 SPK IN 端口上。
l) 把“音频放大模块“区域中的 SPK OUT 插入音频喇叭。
四、C 语言源程序
#include <AT89X52.H>
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,10,10,0,0};
unsigned char dispcount;
unsigned char getdata;
unsigned int temp;
unsigned char i;
sbit
sbit
sbit
sbit
ST=P3^0;
OE=P3^1;
EOC=P3^2;
CLK=P3^3;
sbit LED1=P3^6;
sbit LED2=P3^7;
sbit SPK=P3^5;
bit lowflag;
bit highflag;
unsigned int cnta;
unsigned int cntb;
bit alarmflag;
void main(void)
{
ST=0;
OE=0;
TMOD=0x12;
TH0=0x216;
TL0=0x216;
TH1=(65536-500)/256;
TL1=(65536-500)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
ST=1;
ST=0;
while(1)
{
if((lowflag==1) &&(highflag==0))
{
LED1=0;
LED2=1;
}
else if((highflag==1) && (lowflag==0))
{
LED1=1;
LED2=0;
}
else
{
LED1=1;
LED2=1;
}
}
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-500)/256;
TL1=(65536-500)%256;
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*25;
temp=temp/64;
i=6;
dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;
dispbuf[5]=10;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf[i]=temp%10;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
if(getdata<77)
{
lowflag=1;
highflag=0;
}
else if(getdata>153)
{
lowflag=0;
highflag=1;
}
else
{
lowflag=0;
highflag=0;
}
ST=1;
ST=0;
}
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
if((lowflag==1) && (highflag==0))
{
cnta++;
if(cnta==800)
{
cnta=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
SPK=~SPK;
}
}
else if((lowflag==0) && (highflag==1))
{
cntb++;
if(cntb==400)
{
cntb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
SPK=~SPK;
}
}
else
{
alarmflag=0;
cnta=0;
cntb=0;
}
}
阅读本文用了:
分
秒,转发只需1秒
❀转载是一种智慧❀分享是一种美德❀