找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么1602显示不了温度 求帮助

[复制链接]
跳转到指定楼层
楼主

  1. #include <reg52.H>
  2. #include <intrins.H>
  3. #include <math.H>

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar table[] = "temp:";
  7. sbit dula = P2^6;
  8. sbit wela = P2^7;
  9. sbit rw = P3^6;
  10. sbit RS = P3^5;  

  11. sbit LCDEN = P3^4;
  12. void comint()
  13. {
  14.         EA=1;
  15.         ES=1;
  16.         TMOD=0X20;
  17.         SCON=0X50;
  18.         TH1=256-(11059200/12/32)/9600;
  19.         TL1=256-(11059200/12/32)/9600;
  20.         TR1=1;
  21. }

  22. void delayUs()
  23. {
  24.     _nop_();
  25. }

  26. void delayMs(uint a)
  27. {
  28.     uint i, j;
  29.     for(i = a; i > 0; i--)
  30.         for(j = 100; j > 0; j--);
  31. }


  32. void writeComm(uchar comm)
  33. {
  34.      RS = 0;   
  35.     P0 = comm;
  36.     LCDEN = 1;
  37.      delayUs();
  38.     LCDEN = 0;
  39.     delayMs(1);
  40. }

  41. //???:RS=1, RW=0;
  42. void writeData(uchar dat)
  43. {
  44.      RS = 1;
  45.      P0 = dat;
  46.      LCDEN = 1;
  47.     delayUs();
  48.     LCDEN = 0;
  49.     delayMs(1);
  50. }


  51. void init()
  52. {
  53.    rw = 0;
  54.    dula = wela = 0;
  55.    writeComm(0x38);
  56.    writeComm(0x0c);
  57.    writeComm(0x06);
  58.    writeComm(0x01);
  59. }

  60. void writeString(uchar * str, uchar length)
  61. {
  62.      uchar i;
  63.     for(i = 0; i < length; i++)
  64.     {
  65.          writeData(str[i]);
  66.      }
  67. }
  68. /**//*****************************ultrasound*******************************/


  69. /**//*****************************DS18B20*******************************/
  70. sbit ds = P3^7;
  71. void dsInit()
  72. {

  73.     unsigned int i;  
  74.     ds = 0;
  75.     i = 100;  
  76.      while(i>0) i--;
  77.     ds = 1;   
  78.     i = 4;
  79.      while(i>0) i--;
  80. }

  81. void dsWait()
  82. {
  83.       unsigned int i;
  84.       while(ds);  
  85.       while(~ds);
  86.       i = 4;
  87.       while(i > 0) i--;
  88. }


  89. bit readBit()
  90. {
  91.     unsigned int i;
  92.     bit b;
  93.     ds = 0;
  94.     i++;   
  95.     ds = 1;
  96.    i++; i++;  
  97.     b = ds;
  98.     i = 8;
  99.     while(i>0) i--;
  100.     return b;
  101. }

  102. unsigned char readByte()
  103. {
  104.     unsigned int i;
  105.     unsigned char j, dat;
  106.    dat = 0;
  107.     for(i=0; i<8; i++)
  108.     {
  109.         j = readBit();

  110.         dat = (j << 7) | (dat >> 1);
  111.     }
  112.     return dat;
  113. }


  114. void writeByte(unsigned char dat)
  115. {
  116.     unsigned int i;
  117.     unsigned char j;
  118.     bit b;
  119.     for(j = 0; j < 8; j++)
  120.     {
  121.         b = dat & 0x01;
  122.         dat >>= 1;

  123.         if(b)   
  124.         {
  125.            ds = 0;          i++; i++;  
  126.             ds = 1;   
  127.             i = 8; while(i>0) i--;  
  128.         }
  129.         else  
  130.         {
  131.             ds = 0;
  132.           i = 8; while(i>0) i--;  
  133.             ds = 1;
  134.            i++; i++;
  135.         }
  136.    }
  137. }


  138. void sendChangeCmd()
  139. {
  140.     dsInit();   
  141.     dsWait();   
  142.     delayMs(2);   
  143.     writeByte(0xcc);
  144.     writeByte(0x44);
  145. }

  146. void sendReadCmd()
  147. {
  148.     dsInit();
  149.     dsWait();
  150.     delayMs(1);
  151.     writeByte(0xcc);
  152.     writeByte(0xbe);
  153. }


  154. int getTmpValue()
  155. {
  156.     unsigned int tmpvalue;
  157.     int value;
  158.     float t;
  159.     unsigned char low, high;
  160.     sendReadCmd();

  161.     low = readByte();
  162.     high = readByte();

  163.     tmpvalue = high;
  164.     tmpvalue <<= 8;
  165.     tmpvalue |= low;
  166.     value = tmpvalue;

  167.   \
  168.     t = value * 0.0625;
  169.     \
  170.     value = t * 100 + (value > 0 ? 0.5 : -0.5); //??0?0.5, ??0?0.5
  171.     return value;
  172. }

  173. void display(int v)
  174. {
  175.     unsigned char count;
  176.     unsigned char datas[] = {0, 0, 0, 0, 0};
  177.     unsigned int tmp = abs(v);
  178.     datas[0] = tmp / 10000;
  179.     datas[1] = tmp % 10000 / 1000;
  180.     datas[2] = tmp % 1000 / 100;
  181.     datas[3] = tmp % 100 / 10;
  182.     datas[4] = tmp % 10;


  183.     for(count = 1; count != 5; count++)
  184.     {
  185.         writeData('0'+datas[count]);
  186.         if(count == 2)
  187.         {
  188.             writeData('.');
  189.         }
  190.     }
  191.         writeData(0xdf);
  192.         writeData(0x43);
  193. }
  194. /**//*****************************DS18B20*******************************/

  195. void main()
  196. {

  197.                 comint();
  198.     sendChangeCmd();
  199.     init();
  200.     writeComm(0xc0);
  201.     writeString(table, 7);
  202.     while(1)
  203.     {
  204.         delayMs(1000); //????????750ms??
  205.         writeComm(0xc0);
  206.                                 delayMs(1000);
  207.         display(getTmpValue());
  208.                         
  209.         sendChangeCmd();
  210.                                 P1=0XFE;
  211.     }
  212. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:543220 发表于 2019-5-21 17:32 | 只看该作者
求大神帮忙下啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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