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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:455280 發(fā)表于 2020-12-15 22:15 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我真的是要哭了,為啥這個(gè)會(huì)出現(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[]={                  //獲取的八個(gè)DS18B20內(nèi)部RAM64位序列號(hào)
  17.    1, 0,0,12,  135,  85, 127, 40,
  18.    149, 0,0,12,  134,  218, 150, 40
  19. };
  20. void delay( ms )                                          //用于液晶顯示的延時(shí)函數(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);          // 光標(biāo)移動(dòng)設(shè)置
  68.         delay(1);
  69.         Write_LCD_Zhilin(0x0c);          // 開及光標(biāo)設(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í)函數(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); //精確延時(shí) 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)        //讀取對(duì)應(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);         //讀取存儲(chǔ)器指令
  145.         tp=read();                         //讀取溫度值
  146.         if((tp&0xf800)==0xf800)                //判斷正負(fù)數(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)                                   //判斷是第幾個(gè)的數(shù)據(jù)
  177.                                 {
  178.                                            if(fushu==0)                                           //判斷是否加負(fù)號(hào)
  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ù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av网站在线播放 | 久久综合一区二区三区 | 亚洲国产网址 | 午夜欧美 | 精品久久香蕉国产线看观看亚洲 | 精品国产18久久久久久二百 | 亚洲bt 欧美bt 日本bt | 国产一区2区 | 成人黄色av网站 | 成人免费视频在线观看 | 日韩欧美在线一区 | 日韩在线小视频 | 欧美一区二区小视频 | 日韩看片 | 一区二区高清在线观看 | 亚洲精品毛片av | 欧美电影免费观看高清 | 国产精品一区二区三区在线 | 91在线精品视频 | 一本大道久久a久久精二百 国产成人免费在线 | 日韩一区在线播放 | 亚洲性在线 | av在线免费观看网站 | 亚洲欧美日韩精品久久亚洲区 | 精品久久一 | 久久精品久久综合 | 久久久久久久久久久91 | 国产精品99999 | 国产日韩精品一区二区 | 女同久久 | 免费久久视频 | 免费的色网站 | 亚洲成人观看 | 国产91久久久久久久免费 | 午夜免费网站 | 奇色影视 | 91一区 | av一区二区三区在线观看 | 日本特黄a级高清免费大片 国产精品久久性 | 一区二区三区免费 | 国产精品色婷婷久久58 |