找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1350|回复: 1
打印 上一主题 下一主题
收起左侧

单片机电子体温计不正常工作,大家看一看哪里错了

[复制链接]
跳转到指定楼层
楼主
我准备设计的是:温度通过LED显示器将测量结果显示出来,温度高于38摄氏度系统就会自动报警。
下边是代码,求大家看看是哪里出了问题

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<math.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit seg1=P0^0;
  7. sbit seg2=P0^1;
  8. sbit seg3=P0^2;
  9. sbit DQ=P3^6;
  10. sbit beep=P2^0;
  11. sfr dataled=0x90;
  12. uint temp;
  13. uchar flag_get,count,num,minute,second;
  14. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                           
  15. uchar str[6];
  16. void delay1(uchar MS);
  17. unsigned int ReadTemperature(void);
  18. void Init_DS18B20(void);
  19. unsigned char ReadOneChar(void);
  20. void WriteOneChar(unsigned char dat);
  21. void delay(unsigned int i);
  22. void main()
  23. {
  24.   unsigned char TempH,TempL;
  25.   TMOD|=0x01;
  26.   TH0=0xef;
  27.   TL0=0xf0;
  28.   IE=0x82;
  29.   TR0=1;
  30.   P0=0x00;
  31.   count=0;
  32.   while(1)
  33.     {
  34.      str[5]=0x39;
  35.      str[1]=tab[TempH/100];
  36.      str[2]=tab[(TempH%100)/10];
  37.      str[3]=tab[(TempH%100)%10]|0x80;
  38.      str[4]=tab[TempL];
  39.       if((TempH%100)/10==3&&(TempH%100)%10>=5&&TempL>0||(TempH%100)/10==3&&(TempH%100)%10<8)
  40.       {beep=1;}
  41.       else beep=0;
  42.       if(flag_get==1)
  43.         {
  44.          temp=ReadTemperature();
  45.           if(temp&0x8000)
  46.             {
  47.              str[0]=0x40;
  48.              temp=~temp;
  49.              temp+=1;
  50.             }
  51.           else
  52.              str[0]=0;
  53.              TempH=temp>>4;
  54.              TempL=temp&0x0f;
  55.              TempL=TempL*6/10;
  56.              flag_get=0;
  57.         }
  58.    }
  59. }
  60. void tim(void) interrupt 1 using 1
  61. {
  62.   TH0=0xef;
  63.   TL0=0xf0;
  64.   num++;
  65.   if(num==50)
  66.     {num=0;
  67.      flag_get=1;
  68.      second++;
  69.    if(second>=60)
  70.      {second=0;
  71.       minute++;
  72.      }
  73.     }
  74.   count++;
  75.   if(count==1)
  76.     {P0=0;
  77.      dataled=str[0];}
  78.   if(count==2)
  79.     {P0=1;
  80.      dataled=str[1];}
  81.   if(count==3)
  82.     {P0=2;
  83.      dataled=str[2];}
  84.   if(count==4)
  85.     {P0=3;
  86.      dataled=str[3];}
  87.   if(count==5)
  88.     {P0=4;
  89.      dataled=str[4];}
  90.   if(count==6)
  91.     {P0=5;
  92.      dataled=str[5];
  93.      count=0;}
  94. }
  95. void delay(unsigned int i)//????
  96. {
  97.   while(i--);
  98. }
  99. void Init_DS18B20(void)
  100. {
  101.   unsigned char x=0;
  102.   DQ=1;
  103.   delay(8);
  104.   DQ=0;
  105.   delay(80);
  106.   DQ=1;
  107.   delay(10);
  108.   x=DQ;
  109.   delay(5);
  110. }
  111. unsigned char ReadOneChar(void)
  112. {
  113.   unsigned char i=0;
  114.   unsigned char dat=0;
  115.   for(i=8;i>0;i--)
  116.      {
  117.       DQ=0;
  118.       dat>>=1;
  119.       DQ=1;
  120.        if(DQ)
  121.         dat|=0x80;
  122.       delay(5);
  123.      }
  124.   return(dat);
  125. }
  126. void WriteOneChar(unsigned char dat)
  127. {
  128.   unsigned char i=0;
  129.   for(i=8;i>0;i--)
  130.      {
  131.       DQ=0;
  132.       DQ=dat&0x01;
  133.       delay(5);
  134.       DQ=1;
  135.       dat>>=1;
  136.      }
  137.       delay(5);
  138. }
  139. unsigned int ReadTemperature(void)
  140. {
  141.   unsigned char a=0;
  142.   unsigned int b=0;
  143.   unsigned int t=0;
  144.   Init_DS18B20();
  145.   WriteOneChar(0xcc);
  146.   WriteOneChar(0x44);
  147.   delay(200);
  148.   Init_DS18B20();
  149.   WriteOneChar(0xcc);
  150.   WriteOneChar(0xbe);
  151.   a=ReadOneChar();
  152.   b=ReadOneChar();
  153.   b<<=8;
  154.   t=a+b;
  155.   return(t);
  156. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:507020 发表于 2019-4-29 16:42 | 只看该作者
用的是Proteus 8和keil5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表