29.两点间温度控制1.实验任务用可调电阻调节电压值作为模拟温度的输入量,当温度低于30℃时,发出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。测量的温度范围在0-99℃。2.电路原理图图4.29.13.系统板上硬件连线
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用导线连接到“音频放大模块”区域中的SPKIN端口上。l)把“音频放大模块“区域中的SPKOUT插入音频喇叭。4.汇编源程序(略)5.C语言源程序#includeunsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};unsignedchardispbuf[8]={10,10,10,10,10,10,0,0};
unsignedchardispcount;unsignedchargetdata;unsignedinttemp;unsignedchari;sbitST=P3^0;sbitOE=P3^1;sbitEOC=P3^2;sbitCLK=P3^3;sbitLED1=P3^6;sbitLED2=P3^7;sbitSPK=P3^5;bitlowflag;bithighflag;unsignedintcnta;unsignedintcntb;bitalarmflag;voidmain(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;}elseif((highflag==1)&&(lowflag==0)){
LED1=1;LED2=0;}else{LED1=1;LED2=1;}}}voidt0(void)interrupt1using0{CLK=~CLK;}voidt1(void)interrupt3using0{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(getdata153){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;}}elseif((lowflag==0)&&(highflag==1)){cntb++;
if(cntb==400){cntb=0;alarmflag=~alarmflag;}if(alarmflag==1){SPK=~SPK;}}else{alarmflag=0;cnta=0;cntb=0;}}30.四位数数字温度计1.温度传感器AD590基本知识AD590产生的电流与绝对温度成正比,它可接收的工作电压为4V-30V,检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流增加1uA。AD590温度与电流的关系如下表所示摄氏温度AD590电流经10KΩ电压0℃273.2uA2.732V10℃283.2uA2.832V20℃293.2uA2.932V30℃303.2uA3.032V40℃313.2uA3.132V50℃323.2uA3.232V60℃333.2uA3.332V100℃373.2uA3.732VAD590引脚图2.实验任务利用AD590温度传感器完成温度的测量,把转换的温度值的模拟量送入ADC0809的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后送入数码管显示。
3.电路原理图图4.30.14.系统板上硬件连线(1).把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。(2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。(3).把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。(4).把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
(5).把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。(6).把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。(7).把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。(8).把“模数转换模块”区域中的IN0端子用导线连接到自制的AD590电路上。(9).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。5.程序设计内容(1).ADC0809的CLK信号由单片机的P3.3管脚提供(2).由于AD590的温度变化范围在-55℃-+150℃之间,经过10KΩ之后采样到的电压变化在2.182V-4.232V之间,不超过5V电压所表示的范围,因此参考电压取电源电压VCC,(实测VCC=4.70V)。由此可计算出经过A/D转换之后的摄氏温度显示的数据为:如果(D*2350/128)<2732,则显示的温度值为-(2732-(D*2350/128))如果(D*2350/128)≥2732,则显示的温度值为+((D*2350/128)-2732)6.汇编源程序(略)7.C语言源程序#include#includeunsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};unsignedchardispbuf[8]={10,10,10,10,10,10,0,0};unsignedchardispcount;unsignedchargetdata;unsignedlongtemp;unsignedchari;
bitsflag;sbitST=P3^0;sbitOE=P3^1;sbitEOC=P3^2;sbitCLK=P3^3;sbitLED1=P3^6;sbitLED2=P3^7;sbitSPK=P3^5;voidmain(void){ST=0;OE=0;TMOD=0x12;TH0=0x216;TL0=0x216;TH1=(65536-4000)/256;TL1=(65536-4000)%256;TR1=1;TR0=1;ET0=1;ET1=1;EA=1;ST=1;ST=0;getdata=148;while(1){;}}voidt0(void)interrupt1using0{CLK=~CLK;}voidt1(void)interrupt3using0{TH1=(65536-4000)/256;TL1=(65536-4000)%256;
if(EOC==1){OE=1;getdata=P0;OE=0;temp=(getdata*2350);temp=temp/128;if(temp0;i--)for(j=248;j>0;j--);if(P3_7==0){if(hibitflag==0){digitcount++;if(digitcount==10){digitcount=0;
}P2=dispcode[digitcount];if(funcount==1){pslen=digitcount;templen=pslen;}elseif(funcount>1){psbuf[funcount-2]=digitcount;}}else{second3=0;}while(P3_7==0);}}}else{cmpflag=0;for(i=0;i0;j--);
temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=7;break;case0x0d:key=8;break;case0x0b:key=9;break;case0x07:key=10;break;}temp=P3;P1_1=~P1_1;if((key>=0)&&(key0)
{keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}elseif(key==15)//enterkey{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i0;i--)for(j=248;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=4;break;case0x0d:key=5;break;case0x0b:key=6;break;case0x07:key=11;break;}temp=P3;P1_1=~P1_1;if((key>=0)&&(key0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}elseif(key==15)//enterkey{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i0;i--)for(j=248;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=1;break;case0x0d:key=2;break;case0x0b:key=3;break;case0x07:key=12;break;}temp=P3;P1_1=~P1_1;if((key>=0)&&(key0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}elseif(key==15)//enterkey{if(keycount!=pslen){errorflag=1;rightflag=0;second3=0;}else{for(i=0;i0;i--)for(j=248;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=0;break;case0x0d:key=13;break;case0x0b:
key=14;break;case0x07:key=15;break;}temp=P3;P1_1=~P1_1;if((key>=0)&&(key0){keycount--;getps[keycount]=0;dispbuf[keycount+2]=16;}else{keyoverflag=1;}}elseif(key==15)//enterkey{if(keycount!=pslen){errorflag=1;
rightflag=0;second3=0;}else{for(i=0;i0;j--);}return(temp);}voidmain(void){TMOD=0x01;
TH0=(65536-4000)/256;TL0=(65536-4000)%256;ET0=1;EA=1;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0x44);TR0=1;while(1){;}}voidt0(void)interrupt1using0{unsignedcharx;unsignedintresult;TH0=(65536-4000)/256;TL0=(65536-4000)%256;if(displaycount==2){P0=displaycode[displaybuf[displaycount]]|0x80;}else{P0=displaycode[displaybuf[displaycount]];}P2=displaybit[displaycount];displaycount++;if(displaycount==8){displaycount=0;}timecount++;if(timecount==150){timecount=0;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0xbe);
readdata[0]=readdatafromds18b20();readdata[1]=readdatafromds18b20();for(x=0;x255){readdata[1]++;}}readdata[1]=readdata[1]4;x=x&0x0f;readdata[1]=readdata[1]|x;x=2;result=readdata[1];while(result/10){displaybuf[x]=result%10;result=result/10;x++;}displaybuf[x]=result;if(sflag==1){displaybuf[x+1]=17;}x=readdata[0]&0x0f;x=x