久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2827|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

LCD1602顯示問題 求指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:455280 發(fā)表于 2020-12-15 22:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我真的是要哭了,為啥這個會出現(xiàn)這種情況呢,代碼如下

  1. #include "stc12c5a60s2.h"
  2. #include <intrins.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int

  7. sbit RS=  P2^7  ;                                                        //液晶顯示引腳定義
  8. sbit RW=  P2^6  ;
  9. sbit EN=  P2^5  ;

  10. uint  t=0,dian=0;
  11. uchar LCD_LINE_ONE[16]={"TP1:    "};                //定義顯示屏幕
  12. uchar LCD_LINE_TWO[16]={"TP2:    "};

  13. int Tm;
  14. int  fushu=0 ;
  15. sbit DQ= P1^4;                                                                                   
  16. static unsigned char get_serial[]={                  //獲取的八個DS18B20內(nèi)部RAM64位序列號
  17.    1, 0,0,12,  135,  85, 127, 40,
  18.    149, 0,0,12,  134,  218, 150, 40
  19. };
  20. void delay( ms )                                          //用于液晶顯示的延時函數(shù)
  21. {
  22.           int i ;
  23.           while(ms--)
  24.           {
  25.                for(i=0 ;i<5 ;i++ )  ;

  26.           }
  27. }

  28. uchar Read_LCD_State()                                  //讀取液晶顯示的狀態(tài)
  29. {
  30.          uchar state;
  31.         RS=0;RW=1;EN=1;delay(1);
  32.         state=P0;
  33.         EN = 0;delay(1);
  34.         return state;
  35. }
  36. void LCD_Busy_Wait()                                 //如果忙則等待函數(shù)
  37. {
  38.          while((Read_LCD_State()&0x80)==0x80);
  39.         delay(5);
  40. }

  41. void Write_LCD_Zhilin(uchar zl)                          //液晶顯示寫指令函數(shù)
  42. {
  43.         LCD_Busy_Wait();
  44.         RS=0;RW=0;
  45.         EN=0;
  46.         P0=zl;
  47.         EN=1;
  48.         delay(1);
  49.         EN=0;        
  50. }
  51. void Write_LCD_shuju(uchar date)             //液晶顯示寫數(shù)據(jù)函數(shù)
  52. {
  53.          LCD_Busy_Wait();
  54.         RS=1;RW=0;
  55.         EN=0;
  56.         P0=date;
  57.         EN=1;
  58.         delay(1);
  59.         EN=0;        
  60. }
  61. void LCD_INIT()                                //液晶顯示初始化
  62. {
  63.     Write_LCD_Zhilin(0x38);          // 顯示模式設(shè)置
  64.         delay(1);                                 
  65.         Write_LCD_Zhilin(0x01);          // 顯示清屏
  66.         delay(1);                                 
  67.         Write_LCD_Zhilin(0x06);          // 光標移動設(shè)置
  68.         delay(1);
  69.         Write_LCD_Zhilin(0x0c);          // 開及光標設(shè)置
  70.         delay(1);
  71. }
  72. void Display_LCD_String(uchar p,uchar *s)                  //液晶顯示寫入函數(shù)
  73. {
  74.          uchar i;
  75.         Write_LCD_Zhilin(p|0x80)        ;    //寫地址高位為一
  76.         //Write_LCD_Zhilin(0x40|0x80)        ;
  77.         for(i=0;i<16;i++)
  78.         {
  79.                 Write_LCD_shuju(s[i]);
  80.                 delay(1);         
  81.         }
  82. }
  83. /***************************************************************************************/
  84. void delays(int us)                                           //用于DS18B20的延時函數(shù)
  85. { int s;
  86. for ( s=0; s<us; s++);
  87. }
  88. void rst(void)                                                //DS18B20初始化
  89. {
  90. DQ = 1;
  91. delays(20);
  92. DQ = 0;
  93. delays(300); //精確延時 480~960us
  94. DQ = 1;
  95. delays(80);
  96. }
  97. void write(unsigned char ku)                //DS18B20寫函數(shù)
  98. {
  99. int i=0;
  100.      for (i=0;i<8;i++)
  101.     {
  102.                 DQ=0;
  103.                 DQ =ku&0x01;
  104.                 delays(30);
  105.                 DQ=1;
  106.                 ku>>=1;
  107.     }
  108. }
  109. void match_rom(unsigned char *rom)          //DS18B20匹配ROM函數(shù)
  110. {
  111. unsigned char i;
  112. rst();                                                          //初始化
  113. write(0x55);                                          //匹配ROM
  114. for(i=8;i>0;i--)
  115. {
  116.           write(*(rom+i-1));
  117. }

  118. }
  119. unsigned int read(void)                          //DS18B20讀函數(shù),每次讀16位
  120. {
  121.         int i=0;
  122.         unsigned int u=0;
  123.     for (i=0;i<16;i++)
  124.     {
  125.                 DQ=0;
  126.                 u>>=1;
  127.                 DQ=1;
  128.                 if(DQ) u|=0x8000;
  129.                 delays(40);
  130.      }
  131.     return (u);
  132. }
  133. int  read0(unsigned char *seria)        //讀取對應(yīng)溫度值并轉(zhuǎn)換函數(shù)
  134. {
  135.      int temperature ;
  136.     unsigned int tp;
  137.     unsigned int lsb;
  138.     rst();                                  //初始化
  139.     write(0xCC);                  //跳過RAM
  140.         write(0x44);                  //溫度轉(zhuǎn)換
  141.         rst();                                  //再次初始化
  142.         write(0xCC);
  143.         match_rom(seria);    //匹配ROM函數(shù)調(diào)用
  144.                  write(0xBE);         //讀取存儲器指令
  145.         tp=read();                         //讀取溫度值
  146.         if((tp&0xf800)==0xf800)                //判斷正負數(shù)
  147.             {
  148.                      fushu=1 ;
  149.                       tp=~tp+1 ;
  150.                     lsb=(unsigned int)(tp*6.25);
  151.                         dian=lsb%100;                  //取小數(shù)部分
  152.                
  153.                      temperature=lsb/100;

  154.                 }
  155.      else
  156.             {
  157.                     fushu=0;
  158.                     lsb=(unsigned int)(tp*6.25);
  159.                         dian=lsb%100;  
  160.                
  161.                      temperature=lsb/100;

  162.              }
  163.      return(temperature);
  164. }
  165. /*****************************************************************************************/
  166. void main()
  167. {
  168.       uint i ;
  169.           LCD_INIT();
  170.           EA=0 ;                 //使用DS18B20禁止任何中斷
  171.           while(1)
  172.          {         
  173.               for(i=0;i<2;i++)
  174.                   {        
  175.                       Tm=read0(get_serial+i*8);
  176.                                 if(i==0)                                   //判斷是第幾個的數(shù)據(jù)
  177.                                 {
  178.                                            if(fushu==0)                                           //判斷是否加負號
  179.                                                 sprintf(LCD_LINE_ONE+5," %d", Tm);
  180.                                            if(fushu==1)
  181.                                                     sprintf(LCD_LINE_ONE+5,"-%d", Tm);
  182.                                        sprintf(LCD_LINE_ONE+10,".%d",dian);                //加入小數(shù)部分
  183.                                            Display_LCD_String(0x00,LCD_LINE_ONE);
  184.                                  }
  185.                                 if(i==1)
  186.                                 {  
  187.                                        if(fushu==0)        
  188.                                                  sprintf(LCD_LINE_TWO+5," %d", Tm);
  189.                                            if(fushu==1)
  190.                                                      sprintf(LCD_LINE_TWO+5,"-%d", Tm);
  191.                                        sprintf(LCD_LINE_TWO+10,".%d",dian);
  192.                                            Display_LCD_String(0x40,LCD_LINE_TWO);
  193.                                 }

  194.                   }

  195.                
  196.          }
  197. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:748788 發(fā)表于 2020-12-16 10:58 | 只看該作者
能顯示說明lcd部分沒有大問題。顯示不全應(yīng)該是讀取溫度數(shù)據(jù)有問題。
回復(fù)

使用道具 舉報

板凳
ID:861234 發(fā)表于 2020-12-16 13:41 | 只看該作者
這程序根本就沒有將溫度值送去顯示,當然就不斷顯示那固定的內(nèi)容
回復(fù)

使用道具 舉報

地板
ID:861308 發(fā)表于 2020-12-16 13:54 | 只看該作者
要讀取的溫度值沒送到1602里
回復(fù)

使用道具 舉報

5#
ID:455280 發(fā)表于 2020-12-16 21:21 | 只看該作者
已經(jīng)解決了,是時序和延時的問題
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩激情 | 日本一二三区高清 | 天天看逼| caoporn国产精品免费公开 | 在线免费观看黄视频 | 伊人精品久久久久77777 | 亚洲天天干 | 九色porny自拍视频 | 国产九九九九 | 国产成人99久久亚洲综合精品 | 久久9精品| 天天干视频网 | 日韩在线三级 | 成人在线中文字幕 | 亚洲欧美bt | 久久久激情视频 | 中文在线a在线 | 久久久久久精 | 国产免费一区二区 | 亚洲精品乱码久久久久久按摩 | 日韩三级 | 成人午夜免费福利视频 | 91精品一区二区三区久久久久 | 久久美女视频 | 97精品超碰一区二区三区 | 天天射色综合 | 久久久久久久久久久久一区二区 | 成人免费观看视频 | 男人的天堂中文字幕 | 国产九九九九 | 91久久久久久久久 | 欧美日韩在线免费观看 | 精品久久久久一区 | 久久精品男人的天堂 | 欧美一级久久 | 成人午夜免费福利视频 | 久久久久国 | 亚洲成人av | 九九精品在线 | 99热热热| 青青草中文字幕 |