原创 单片机两点间温度控制

2009-3-25 22:49 1107 3 4 分类: MCU/ 嵌入式

29            两点间温度控制<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


1 实验任务


用可调电阻调节电压值作为模拟温度的输入量,当温度低于<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />30时,发出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。测量的温度范围在099℃。


2 电路原理图


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


4.29.1


3 系统板上硬件连线


a)         把“单片机系统”区域中的P1.0P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。


b)        把“单片机系统”区域中的P2.0P2.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.0P0.78芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。


j)          把“单片机系统”区域中的P3.6P3.7用导线分别连接到“八路发光二极管指示模块”区域中的L1L2上。


k)        把“单片机系统”区域中的P3.5用导线连接到“音频放大模块”区域中的SPK IN端口上。


l)          把“音频放大模块“区域中的SPK OUT插入音频喇叭。


4  汇编源程序


(略)


5C语言源程序


#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 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;


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=temp%10;


              temp=temp/10;


              i++;


            }


          dispbuf=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;


        }


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-3-26 18:45

相关推荐阅读
用户1501082 2009-04-20 15:16
LED点阵是怎么制作的?
引言 单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为...
用户1501082 2009-04-20 15:14
窜口驱动74LS165
串口驱动74LS165 //-------------------------------------库函数声明,管脚定义---------------------------------------...
用户1501082 2009-04-08 13:18
ds18b20
却衅鱀S18B20资料(转载)2009-03-12 18:41美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0...
用户1501082 2009-04-08 13:18
ds18b20
度传感器DS18B20资料(转载)2009-03-12 18:41美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B...
用户1501082 2009-03-28 20:50
请高手帮帮忙哈
我这个程序应该没什么问题吧,为什么在仿真软件PROTUS上LCD1602显视不出来,但是有明显的数据输入信号,管脚上显示#include<reg52.h>#define uchar uns...
用户1501082 2009-03-26 19:56
数字时钟
1. 实验任务 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />(1.       ...
EE直播间
更多
我要评论
1
3
关闭 站长推荐上一条 /3 下一条