新闻  |   论坛  |   博客  |   在线研讨会
两点间温度控制
tvb2058 | 2007-09-12 11:17:09    阅读:1583   发布文章

1.实验任务
  用可调电阻调节电压值作为模拟温度的输入量,当温度低于30℃时,发出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。测量的温度范围在099℃

2
.电路原理图

 
                图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
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)%6;
  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)%6;
       if(EOC==1)
         {
           OE=1;
           getdata=P0;
           OE=0;
           temp=getdata*25;
           temp=temp/64;
           i=6;
           dispbuf[0]=10;
           dispbuf=10;
           dispbuf=10;
           dispbuf=10;
           dispbuf[4]=10;
           dispbuf[5]=10;
           dispbuf[6]=0;
           dispbuf[7]=0;
          while(temp/10)
           {
              dispbuf[i]=temp;
              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;
        }
}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客