找回密码
 立即注册

QQ登录

只需一步,快速开始

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

Proteus仿真测量温度l时lcd1602只亮不显示温度

[复制链接]
跳转到指定楼层
楼主
  1. #include"reg51.h"
  2. sbit RS=P3^0;
  3. sbit RW=P3^1;
  4. sbit E=P3^2;
  5. sbit DQ=P3^3;
  6. unsigned int readtemp=0;
  7. unsigned char str[]={"0123456789"};
  8. unsigned char s[]={"Temperature:"};

  9. void delay_18B20(unsigned int i)
  10. {
  11.         for(;i>0;i--);
  12. }

  13. void Init_DS18B20(void)         
  14. {
  15.   unsigned char x=0;
  16.   DQ = 1;          //DQ??
  17.   delay_18B20(8);  //????
  18.   DQ = 0;          //DQ??
  19.   delay_18B20(80); //????480us
  20.   DQ = 1;          //????
  21.   delay_18B20(14);
  22.   x=DQ;            //?x=0?????,?x=1?????
  23.   delay_18B20(20);
  24. }

  25. void WriteOneChar(unsigned char dat)
  26. {
  27.   unsigned char i=0;
  28.   for (i=8; i>0; i--)
  29.   {
  30.    DQ = 0;
  31.    DQ = dat&0x01;
  32.    if(DQ){delay_18B20(1);DQ=1;}
  33.          else{delay_18B20(5);DQ = 1;}
  34.    dat>>=1;
  35.    }
  36. }

  37. unsigned char ReadTemperature(void)
  38. {                                                         
  39. unsigned char a=0,b=0;
  40.         unsigned int temp=0;
  41. Init_DS18B20();
  42. WriteOneChar(0xCC);  // ????????
  43. WriteOneChar(0x44);  // ??????
  44. delay_18B20(100);    //
  45. Init_DS18B20();
  46. WriteOneChar(0xCC);  //????????
  47. WriteOneChar(0xBE);  //???????
  48. delay_18B20(100);
  49. a=ReadOneChar();     //?????
  50. b=ReadOneChar();     //?????
  51. temp=((b*256+a)>>4); //???????16??????
  52. return(temp);
  53. }

  54. void delay(unsigned int t)
  55. {
  56.         unsigned int i=0,j=0;
  57.         for(i=0;i<t;i++)
  58.         {
  59.                 for(j=0;j<120;j++);
  60.         }
  61. }

  62. void writedat(unsigned char dat)
  63. {
  64.         RS=1;
  65.         RW=0;
  66.         E=0;
  67.         P2=dat;
  68.         delay(5);
  69.         E=1;
  70.         E=0;
  71. }

  72. void writecom(unsigned char com)
  73. {
  74.         RS=0;
  75.         RW=0;
  76.         E=0;
  77.         P2=com;
  78.         delay(5);
  79.         E=1;
  80.         E=0;
  81. }

  82. void inttlcd()
  83. {
  84.         writecom(0x38);
  85.         writecom(0x0c);
  86.         writecom(0x06);
  87.         writecom(0x01);
  88. }

  89. void display()
  90. {
  91.         unsigned char temp0=0,temp1=0,temp2=0,i=0;
  92.         temp0=readtemp/100;
  93.         temp0=(readtemp%100)/10;
  94.         temp0=readtemp%10;
  95.         
  96.         writecom(0x80);
  97.         delay(5);
  98.         while(s[i]!='\0')
  99.         {
  100.                 writedat(s[i]);
  101.                 delay(5);
  102.                 i++;
  103.         }
  104.         writecom(0x80+0x40+5);
  105.         writedat(str[temp0]);
  106.         delay(5);
  107.         writedat(str[temp1]);
  108.         delay(5);
  109.         writedat(str[temp2]);
  110.         delay(5);
  111.         writedat(0xdf);
  112.         delay(5);
  113.         writedat('C');
  114.         delay(5);
  115. }

  116. void main()
  117. {
  118.         initlcd();
  119.         while(1)
  120.         {
  121.                 readtemp=ReadTemperature();
  122.                 display();
  123.         }
  124. }
复制代码


屏幕截图_20230528_005304.png (55.2 KB, 下载次数: 16)

屏幕截图_20230528_005304.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2023-5-28 06:22 | 只看该作者
1.缺少函数ReadOneChar()2.LCD初始化函数名不符

3.显示函数中 temp1、temp2没有赋值
4.显示固定字符代码的位置不当

5.仿真中1602数据接口连接与程序不符



  1. #include"reg51.h"
  2. sbit RS=P3^0;
  3. sbit RW=P3^1;
  4. sbit E=P3^2;
  5. sbit DQ=P3^3;
  6. unsigned int readtemp=0;
  7. unsigned char str[]={"0123456789"};
  8. unsigned char s[]={"Temperature:"};

  9. void delay_18B20(unsigned int i)
  10. {
  11.         for(;i>0;i--);
  12. }

  13. void Init_DS18B20(void)         
  14. {
  15.   unsigned char x=0;
  16.   DQ = 1;          //DQ??
  17.   delay_18B20(8);  //????
  18.   DQ = 0;          //DQ??
  19.   delay_18B20(80); //????480us
  20.   DQ = 1;          //????
  21.   delay_18B20(14);
  22.   x=DQ;            //?x=0?????,?x=1?????
  23.   delay_18B20(20);
  24. }
  25. void WriteOneChar(unsigned char dat)
  26. {
  27.         unsigned char i=0;
  28.         for (i=8; i>0; i--)
  29.         {
  30.                 DQ = 0;
  31.                 DQ = dat&0x01;
  32.                 if(DQ){delay_18B20(1);DQ=1;}
  33.                 else{delay_18B20(5);DQ = 1;}
  34.                 dat>>=1;
  35.         }
  36. }

  37. unsigned char ReadOneChar()
  38. {
  39.         unsigned char i=0;
  40.         unsigned char dat=0;
  41.         for(i=8;i>0;i--)
  42.         {
  43.                 DQ=0;
  44.                 dat>>=1;
  45.                 DQ=1;
  46.                 if(DQ)
  47.                         dat|=0x80;
  48.                 delay_18B20(4);
  49.         }
  50.         return (dat);
  51. }

  52. unsigned char ReadTemperature(void)
  53. {                                                         
  54.         unsigned char a=0,b=0;
  55.         unsigned int temp=0;
  56.         Init_DS18B20();
  57.         WriteOneChar(0xCC);  // ????????
  58.         WriteOneChar(0x44);  // ??????
  59.         delay_18B20(100);    //
  60.         Init_DS18B20();
  61.         WriteOneChar(0xCC);  //????????
  62.         WriteOneChar(0xBE);  //???????
  63.         delay_18B20(100);
  64.         a=ReadOneChar();     //?????
  65.         b=ReadOneChar();     //?????
  66.         temp=((b*256+a)>>4); //???????16??????
  67.         return(temp);
  68. }

  69. void delay(unsigned int t)
  70. {
  71.         unsigned int i=0,j=0;
  72.         for(i=0;i<t;i++)
  73.         {
  74.                 for(j=0;j<120;j++);
  75.         }
  76. }

  77. void writedat(unsigned char dat)
  78. {
  79.         RS=1;
  80.         RW=0;
  81.         E=0;
  82.         P2=dat;
  83.         delay(1);
  84.         E=1;
  85.         E=0;
  86. }

  87. void writecom(unsigned char com)
  88. {
  89.         RS=0;
  90.         RW=0;
  91.         E=0;
  92.         P2=com;
  93.         delay(1);
  94.         E=1;
  95.         E=0;
  96. }

  97. void initlcd()
  98. {
  99.         writecom(0x38);
  100.         writecom(0x0c);
  101.         writecom(0x06);
  102.         writecom(0x01);
  103. }

  104. void display()
  105. {
  106.         unsigned char temp0=0,temp1=0,temp2=0;
  107.         temp0=readtemp/100;
  108.         temp1=(readtemp%100)/10;
  109.         temp2=readtemp%10;
  110.         writecom(0x80+0x40+5);
  111.         writedat(str[temp0]);
  112.         delay(5);
  113.         writedat(str[temp1]);
  114.         delay(5);
  115.         writedat(str[temp2]);
  116.         delay(5);
  117.         writedat(0xdf);
  118.         delay(5);
  119.         writedat('C');
  120.         delay(5);
  121. }

  122. void main()
  123. {
  124.         unsigned char i;
  125.         initlcd();
  126.         writecom(0x80);
  127.         while(s[i]!='\0')
  128.         {
  129.                 writedat(s[i]);
  130.                 delay(5);
  131.                 i++;
  132.         }
  133.         while(1)
  134.         {
  135.                 readtemp=ReadTemperature();
  136.                 display();
  137.         }
  138. }
复制代码



回复

使用道具 举报

板凳
ID:68189 发表于 2023-5-28 08:11 | 只看该作者
  1. void writedat(unsigned char dat)
  2. {
  3.         RS=1;
  4.         RW=0;
  5.         E=0;
  6.         P2=dat;
  7.         delay(5);
  8.         E=1;
  9.         E=0;
  10. }

  11. void writecom(unsigned char com)
  12. {
  13.         RS=0;
  14.         RW=0;
  15.         E=0;
  16.         P2=com;
  17.         delay(5);
  18.         E=1;
  19.         E=0;
  20. }
复制代码

LCD1602的数据端口 与  单片机的驱动端口  连接错误。
代码中,显示驱动端口是P2   实际仿真图中却没有与P2连接。
P2.0 ---D0   P2.1-----D1   .......P2.7 ------ D7
回复

使用道具 举报

地板
ID:1080359 发表于 2023-5-28 14:33 | 只看该作者
wulin 发表于 2023-5-28 06:22
1.缺少函数ReadOneChar()2.LCD初始化函数名不符

3.显示函数中 temp1、temp2没有赋值

感谢大佬解答,但是我将您的代码复制后的结果却是90°C,请问这是怎么回事呢?

屏幕截图_20230528_142623.png (51.43 KB, 下载次数: 12)

屏幕截图_20230528_142623.png
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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