微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 温度传感器报警控制失效

温度传感器报警控制失效

时间:10-02 整理:3721RD 点击:
麻烦大家看下下面的程序哪里出错了,我的目标是当实际温度低于30度时,流水灯会每隔一秒亮一次,但是当实际温度高于30度时,它竟然还在亮不知道为什么,麻烦大家看一一下,谢谢了;
程序翻译的时候没有错误。
下面是我写的程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;            
uint temp,t;              
uchar  mm;            
sbit dula=P2^6;
sbit wela=P2^7;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={ 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef};
void delay(uint count)      
{
  uint i;
  while(count)
  {
    i=200;
    while(i>0)
    i--;
    count--;
  }
}
void dsreset(void)        
{
  uint i;
  DS=0;
  i=103;
  while(i>0)i--;
  DS=1;
  i=4;
  while(i>0)i--;
}
bit tmpreadbit(void)      
{
   uint i;
   bit dat;
   DS=0;i++;           
   DS=1;i++;i++;
   dat=DS;
   i=8;while(i>0)i--;
   return (dat);
}
uchar tmpread(void)   
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tmpreadbit();
    dat=(j<<7)|(dat>>1);   
  }
  return(dat);
}
void tmpwritebyte(uchar dat)   
{
  uint i;
  uchar j;
  bit testb;
  for(j=1;j<=8;j++)
  {
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)      
    {
      DS=0;
      i++;i++;
      DS=1;
      i=8;while(i>0)i--;
    }
    else
    {
      DS=0;        
      i=8;while(i>0)i--;
      DS=1;
      i++;i++;
    }
  }
}
void tmpchange(void)   
{
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);   
  tmpwritebyte(0x44);   
}
uint tmp()               
{
  float temp;
  uchar  a,b;
   

  dsreset();
  delay(1);
  tmpwritebyte(0xcc);
  tmpwritebyte(0xbe);
   
  
  a=tmpread();
  b=tmpread();
//  temp=b;
//  temp<<=8;              
//  temp=temp|a;
//  tt=temp*0.0625;
//   temp=tt*10+0.5;

   
    temp=((b<<8)|a)*(0.0625*10);
     return temp;
}
void readrom()           
{
  uchar sn1,sn2;
  dsreset();
  delay(1);
  tmpwritebyte(0x33);
  sn1=tmpread();
  sn2=tmpread();
}

void delay10ms(uint z)            
  {
    uchar a,b;
    for(a=10;a>0;a--)
      for(b=60;b>0;b--);
   }
void display(uint temp)            
{
   uchar A1,A2,A2t,A3;
   A1=temp/100;
   A2t=temp%100;
   A2=A2t/10;
   A3=A2t%10;
   dula=0;
   P0=table[A1];         
   dula=1;
   dula=0;
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(1);
   dula=0;
   P0=table1[A2];         
   dula=1;
   dula=0;
   wela=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(1);
   P0=table[A3];         
   dula=1;
   dula=0;
   P0=0xfb;
   wela=1;
   wela=0;
   delay(1);
}
void xianshi( )
{
        dula=1;
     P0=table[3];
     dula=0;
     P0=0xff;
     wela=1;
     P0=0xf7;
     wela=0;
     delay10ms(1);
     dula=1;
     P0=table1[0];
     dula=0;
     P0=0xff;
     wela=1;
     P0=0xef;
     wela=0;
     delay10ms(1);
     dula=1;
     P0=table[0];
     dula=0;
     P0=0xff;
     wela=1;
     P0=0xdf;
     wela=0;
     delay10ms(1);   
}
void deal()
{
  if(temp<300)
  {
   
    if(mm==20)
     {
       mm=0;
       P1=~P1;
       }
     
    }
}
void main()
{  uchar a;
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   TR0=1;
   EA=1;
   ET0=1;
   do
  {
    tmpchange();
    for(a=10;a>0;a--)
      {   deal();
          display(tmp());
        xianshi( );
         
      }
                     
  }    while(1);
  }
   
void time0() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   mm++;
//   if(temp<300)
//  {
//   
//    if(mm==20)
//     {
//       mm=0;
//       P1=~P1}
////          }  
   
   
  }  
下面是原理图


呵呵,你一条注释都没有,谁有那么多闲暇逐条分析?大家都是义务帮忙的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top