1、29 两点间温度控制 1 实验任务 用可调电阻调节电压值作为模拟温度的输入量,当温度低于 30 时,发出长嘀报警声和光报警,当温度高于 60 时,发出短嘀报警声和光报警。测量的温度范围在 0 99 。 2 电路原理图 图 4.29.1 3 系统板上硬件连线 a) 把 “ 单片机系统 ” 区域中的 P1.0 P1.7 与 “ 动态数码显示 ” 区域中的ABCDEFGH 端口用 8 芯排线连接。 b) 把 “ 单片机系统 ” 区域中的 P2.0 P2.7 与 “ 动态数码显示 ” 区域中的S1S2S3S4S5S6S7S8 端口用 8芯排线连接。 c) 把 “ 单片机系统 ” 区域中的 P3.0 与
2、 “ 模数转换模块 ” 区域中的 ST端子用导线相连接。 d) 把 “ 单片机系统 ” 区域中的 P3.1 与 “ 模数转换模块 ” 区域中的 OE端子用导线相连接。 e) 把 “ 单片机系统 ” 区域中的 P3.2与 “ 模数转换模块 ” 区域中的 EOC端子用导线相连接。 f) 把 “ 单片机系统 ” 区域中的 P3.3与 “ 模数转换模块 ” 区域中的 CLK端子用 导线相连接。 g) 把 “ 模数转换模块 ” 区域中的 A2A1A0端子用导线连接到 “ 电源模块 ” 区域中的 GND 端子上。 h) 把 “ 模数转换模块 ” 区域中的 IN0 端子用导线连接到 “ 三路可调电压模块 ”
3、 区域中的 VR1 端子上。 i) 把 “ 单片机系统 ” 区域中的 P0.0 P0.7用 8芯排线连接到 “ 模数转换模块 ” 区域中的 D0D1D2D3D4D5D6D7 端子上。 j) 把 “ 单片机系统 ” 区域中的 P3.6、 P3.7 用导线分别连接到 “ 八路发光二极管指示模块 ” 区域中的 L1、 L2 上。 k) 把 “ 单片机系统 ” 区域中的 P3.5用导线连接到 “ 音频放大模块 ” 区域中的 SPK IN 端口上。 l) 把 “ 音频放大模块 “ 区域中的 SPK OUT 插入音频喇叭。 4 汇编源程序 (略) 5 C语言源程序 #include unsigned ch
4、ar 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 dispbuf8=10,10,10,10,10,10,0,0; unsigned char dispcount; unsigned char getdata; unsigned int temp; unsigned char i; sbit ST=P30; sbit OE=P3
5、1; sbit EOC=P32; sbit CLK=P33; sbit LED1=P36; sbit LED2=P37; sbit SPK=P35; 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
6、=0; while(1) if(lowflag=1) LED2=1; else if(highflag=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; dispbuf0=10; dispbuf1=10; d
7、ispbuf2=10; dispbuf3=10; dispbuf4=10; dispbuf5=10; dispbuf6=0; dispbuf7=0; while(temp/10) dispbufi=temp%10; temp=temp/10; i+; dispbufi=temp; if(getdata153) lowflag=0; highflag=1; else lowflag=0; highflag=0; ST=1; ST=0; P1=dispcodedispbufdispcount; P2=dispbitcodedispcount; dispcount+; if(dispcount=8) dispcount=0; if(lowflag=1) if(cnta=800) cnta=0; alarmflag=alarmflag; if(alarmflag=1) SPK=SPK; else if(lowflag=0) if(cntb=400) cntb=0; alarmflag=alarmflag; if(alarmflag=1) SPK=SPK; else alarmflag=0; cnta=0; cntb=0;