您当前的位置:五五电子网电子知识单片机-工控设备51单片机51单片机快热式热水器程序 正文
51单片机快热式热水器程序

51单片机快热式热水器程序

点击数:7894 次   录入时间:03-04 11:56:25   整理:http://www.55dianzi.com   51单片机
  {
  relay=1;                       //断开继电器
  EX1=0; ET1=0; triac=1;         //关闭可控硅
  buzz=0;                        //蜂鸣报警
  }
}

/*--------------------------------------
  测温函数 void temptest(void)
  无参数,无返回值,
  影响全局变量:ctemp,tempov
  测量并查表计算温度,判断是否超温
--------------------------------------*/
void temptest(void)
{
signed char temp,tempmin,tempmax;
unsigned int t0rig;
unsigned int code temptab[]={0x6262,0x61eb,0x6171,0x60f7,0x6047,0x5ff7,0x5f6e,0x5eef,0x5e53,0x5dbe,0x5d4b,0x5ca5,0x5c17,\
                             0x5b6b,0x5ada,0x5a5c,0x599b,0x58ff,0x5869,0x57b0,0x570d,0x5663,0x55c6,0x550e,0x5444,0x5396,\
                             0x52dd,0x5240,0x5189,0x50b0,0x5005,0x4f20,0x4e69,0x4db1,0x4cef,0x4c42,0x4b64,0x4aaa,0x49e1,\
                             0x48fc,0x4847,0x476c,0x46b1,0x4604,0x4503,0x4449,0x4356,0x4299,0x41c0,0x40ce,0x3ff0,0x3f2b,\
                             0x3e33,0x3d86,0x3ca6,0x3bd2,0x3b26,0x3a39,0x3973,0x38a6,0x37ef,0x373f,0x3687,0x35c3,0x3507,\
                             0x3487,0x33bc,0x32ed,0x324f,0x319e,0x3106,0x3053,0x2fa6,0x2f2a,0x2e88,0x2e00,0x2d63,0x2cd6,\
                             0x2c65,0x2bae,0x2b28,0x2a97,0x2a07,0x298e,0x2914,0x287a,0x280d,0x278a,0x2703,0x2687,0x2626,\
                             0x25e5,0x256d,0x24ee,0x2489,0x2414,0x23bc,0x2356,0x22d9,0x2278,0x2203}; //温度频率表
px0count=2;                      //测频中断函数参数
t0tst=1;                         //置测频程序开始标志
EX0=1;                           //打开测频外中断
testok=0;                        //清除测频程序完成标志
while (!testok) display();       //等待测试完成
t0rig=(unsigned int)TH0<<8|TL0;  //字节合成字
tempmin=0;                       //以下是二分查表法计算温度值
tempmax=100;                     //tempmin和tempmax为温度表的范围
while (1)
  {
  temp=(tempmax+tempmin)/2;        //假定当前温度为最大值与最小值之中点值
  if (t0rig==temptab[temp]) break; //若实际值等于假定值结束查找
    else if (t0rig>temptab[temp]) tempmax=temp;//若实际值大于假定值,减小查找范围的最大值
    else tempmin=temp;             //若实际值小于假定值,增大查找范围的最小值
  if (tempmax-tempmin<=1)          //若查找范围已缩小到1度之间,
    {                              //判断实际值更接近哪个端点
    if (temptab[tempmax]+temptab[tempmin]>2*t0rig) temp=tempmax;//接近最大值取最大值
      else temp=tempmin;           //接近最小值取最小值
    break;                         //结束查找
    }
  }
ctemp=temp;                        //刷新当前温度寄存器
if (temp>65) tempov=1;             //如果温度超过65度置位超温标志
  else if (temp<45) tempov=0;      //当温度回落到45度以下时清除超温标志
}

/*------------------------------------------
  测温频率测试函数 void tempFrequency(void)
  使用外部X0中断,寄存器组1
  测出温度——频率转换电路的频率
------------------------------------------*/
void tempfrequency(void) interrupt 0 using 1
{
if (--px0count) return;         //找齐起点或计数
if (t0tst)                      //如果是起点
  {
  t0tst=0;                      //清除测频开始标志
  px0count=100;                 //取100个方波为一次测频
  TH0=0;
  TL0=0;                        //清除计时器T0
  TR0=1;                        //开始计时
  }
  else                          //如果是终点
  {
  TR0=0;                        //停止计时

上一页  [1] [2] [3] [4]  下一页


本文关键字:单片机  程序  热水器  51单片机单片机-工控设备 - 51单片机