欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: proteus仿真LCD1602只亮不顯示 附單片機(jī)程序 麻煩各位看看是什么問(wèn)題? [打印本頁(yè)]

作者: sicto123    時(shí)間: 2018-10-25 22:35
標(biāo)題: proteus仿真LCD1602只亮不顯示 附單片機(jī)程序 麻煩各位看看是什么問(wèn)題?
仿真過(guò)后,出現(xiàn)這樣的情況,是不是判忙函數(shù)出了問(wèn)題,導(dǎo)致一直處于在忙狀態(tài)。
附件為 仿真電路圖



下載:
已改好的仿真圖10.25-22.27.rar (21.31 KB, 下載次數(shù): 271)

單片機(jī)源程序:
  1. #include "1602.h"
  2. #include "delay.h"

  3. xdata LCD_Type     LCD;   //LCD設(shè)備

  4. static void LCD_CheckBusy(void)   //檢測(cè)LCD狀態(tài),看它是不是還在忙呢
  5. {
  6. do
  7.   {
  8.     LCD_EN=0;
  9.     LCD_RS=0;
  10.     LCD_RW=1;
  11.     LCDIO=0xff;
  12.     LCD_EN=1;
  13.   }
  14.   while(LCD_BUSY==1);
  15.   LCD_EN=LOW;
  16. }

  17. static void LCD_SendCommand(unsigned char command)
  18. {
  19.   LCD_CheckBusy();
  20.   LCD_RS=LOW;
  21.   LCD_RW=LOW;
  22.   LCD_EN=HIGH;
  23.   LCDIO=command;
  24.   LCD_EN=LOW;
  25. }

  26. static void LCD_SendData(unsigned char dat)
  27. {
  28. LCD_CheckBusy();
  29. LCD_RS=HIGH;
  30. LCD_RW=LOW;
  31. LCD_EN=HIGH;
  32. LCDIO=dat;
  33. LCD_EN=LOW;
  34. }


  35. /*---------------------光標(biāo)設(shè)置函數(shù)-------------------------*/
  36. static void LCD_Pos(unsigned char pos)        //寫(xiě)入的是實(shí)際的地址
  37. {
  38.   if(pos>31)  //光標(biāo)地址0-31 共32個(gè)
  39.     return;

  40. /*----------------------------------------------------------*/  
  41.   if(pos<16)                                         //第一行
  42.   {  
  43.      LCD_SendCommand(0x80+pos);  
  44.   }
  45.   else                                                         //第二行
  46.   {
  47.      LCD_SendCommand(0xC0+pos-16);
  48.   }            
  49. }

  50. //add 0-31對(duì)應(yīng)兩行
  51. //void LCD_DisPlayChar(unsigned char add,unsigned char ch)
  52. //{
  53. //LCD.RefFlag = 0;
  54. //LCD.Buf[add]=ch;
  55. //LCD.RefFlag = 1;
  56. //}

  57. void LCD_DisplayString(unsigned char add,unsigned char *str)
  58. {
  59.   unsigned char i;
  60.   LCD.RefFlag = 0;
  61.   i = 0;
  62.   while(*str)
  63.   {
  64.     LCD.Buf[add+i]=*str;
  65.         str++;
  66.         i++;
  67.   }
  68.   LCD.RefFlag = 1;
  69. }

  70. void LCD_ScreenClear(void)
  71. {
  72.   unsigned char i = 0;
  73.   LCD.RefFlag = 0;
  74.   for(i=0;i<32;i++)
  75.   {
  76.     LCD.Buf[i]=' ';   
  77.   }
  78.   LCD.RefFlag = 1;
  79. }

  80. void LCD_Init(void)
  81. {
  82.   LCD_SendCommand(0x38);
  83.   LCD_SendCommand(0x38);
  84.   LCD_SendCommand(0x38);
  85.   LCD_SendCommand(0x06);
  86.   LCD_SendCommand(0x0c);
  87.   LCD_SendCommand(0x01);
  88.   LCD.BlinkEN = 0;
  89.   LCD.BlinkAdd = 0;
  90.   LCD.BlinkLen = 1;
  91.   LCD.BlinkCon = 0;
  92.   LCD_ScreenClear();
  93. }



  94. void LCD_Refresh(void)
  95. {
  96.   unsigned char i=0;
  97. /*------------------閃爍設(shè)置---------------------------*/
  98.   if(LCD.BlinkEN)          //如果閃爍開(kāi)關(guān)打開(kāi)
  99.   {
  100.     LCD.BlinkCon++;
  101.         if(LCD.BlinkCon==1)         
  102.         {
  103.           LCD_Pos(LCD.BlinkAdd);       //設(shè)置地址
  104.           for(i=0;i<LCD.BlinkLen;i++)  
  105.           {
  106.             if(LCD.BlinkAdd+i==16)
  107.                   LCD_Pos(16);
  108.                 LCD_SendData(0x20);       //隱藏顯示
  109.           }  
  110.         }
  111.         else if(LCD.BlinkCon==10)        //開(kāi)啟顯示
  112.         {
  113.           LCD_Pos(LCD.BlinkAdd);
  114.           for(i=0;i<LCD.BlinkLen;i++)  
  115.           {
  116.             if(LCD.BlinkAdd+i==16)
  117.                   LCD_Pos(16);
  118.                 LCD_SendData(LCD.Buf[LCD.BlinkAdd+i]);  //顯示緩存直接寫(xiě)入
  119.           }   
  120.         }
  121.         else if(LCD.BlinkCon>=20)
  122.         {
  123.           LCD.BlinkCon = 0;
  124.           LCD.RefFlag = 1;
  125.         }
  126.   }
  127. /*-----------------LCD刷新顯示----------------------------*/
  128.   if(LCD.RefFlag ==1)  //有待刷新
  129.   {
  130.     LCD_Pos(0);
  131.         for(i=0;i<32;i++)          //從閃爍開(kāi)始的地址就不要寫(xiě)數(shù)據(jù)了
  132.          {                                          
  133. /*-------------------換行------------------------------*/         
  134.           if(i==16)
  135.             LCD_Pos(16);
  136. /*-------------------閃爍功能打開(kāi)并且到了開(kāi)始閃爍的地址----------------------------------*/
  137.           if((LCD.BlinkEN)&&(i==LCD.BlinkAdd))         //跳過(guò)LCD.BlinkLen個(gè)顯示地址
  138.           {
  139.             do
  140.                 {
  141.                   i++;
  142.                 }
  143.                 while(i<(LCD.BlinkAdd+LCD.BlinkLen));             // 0  1
  144.             LCD_Pos(LCD.BlinkAdd+LCD.BlinkLen+1);
  145.           }
  146.           else                 //正常模式寫(xiě)入
  147.           {
  148.             LCD_SendData(LCD.Buf[i]);
  149.           }
  150.         }
  151.         LCD.RefFlag =0;  
  152.   }
  153. }


  154. //顯示地址Add:0-31   *time //時(shí)分秒
  155. void LCD_DisplayTime(unsigned char add,unsigned char *time)
  156. {
  157.   LCD.RefFlag =0;
  158. /*-------------小時(shí)----------------------*/
  159.   LCD.Buf[add+0] = time[0]/10+'0';
  160.   LCD.Buf[add+1] = time[0]%10+'0';
  161.   LCD.Buf[add+2] = ':';
  162.   LCD.Buf[add+3] = time[1]/10+'0';
  163.   LCD.Buf[add+4] = time[1]%10+'0';
  164.   LCD.Buf[add+5] = ':';
  165.   LCD.Buf[add+6] = time[2]/10+'0';
  166.   LCD.Buf[add+7] = time[2]%10+'0';
  167.   LCD.RefFlag = 1;
  168. }

  169. /*----------------------------年月日顯示顯示函數(shù)-------------------------------------*/

  170. void LCD_DisplayDate(unsigned char add,unsigned char *date)        
  171. {
  172.   LCD.RefFlag =0;
  173. /*-------------小時(shí)----------------------*/
  174.   LCD.Buf[add+0] = '2';
  175.   LCD.Buf[add+1] = '0';
  176.   LCD.Buf[add+2] = date[0]/10+'0';        //年
  177.   LCD.Buf[add+3] = date[0]%10+'0';
  178.   LCD.Buf[add+4] = '-';
  179.   LCD.Buf[add+5] = date[1]/10+'0';  //月
  180.   LCD.Buf[add+6] = date[1]%10+'0';
  181.   LCD.Buf[add+7] = '-';            
  182.   LCD.Buf[add+8] = date[2]/10+'0';  //日期
  183.   LCD.Buf[add+9] = date[2]%10+'0';
  184.   LCD.Buf[add+10]= 0x20;
  185.   switch(date[3])
  186.   {
  187.                 case 1:{LCD_DisplayString(add+11,"Mon");}break;
  188.                 case 2:{LCD_DisplayString(add+11,"Tue");}break;
  189.                 case 3:{LCD_DisplayString(add+11,"Wed");}break;
  190.                 case 4:{LCD_DisplayString(add+11,"Thu");}break;
  191.                 case 5:{LCD_DisplayString(add+11,"Fri");}break;
  192.                 case 6:{LCD_DisplayString(add+11,"Sat");}break;
  193.                 case 7:{LCD_DisplayString(add+11,"Sun");}break;
  194.                 default:break;
  195.   }
  196.   LCD.RefFlag = 1;
  197. }



  198. void DisplayU16(unsigned char add,unsigned int num,unsigned char hide)  //hide =1 隱藏0  =0的時(shí)候不隱藏0
  199. {
  200.   xdata unsigned char temp[6]={0};
  201.   unsigned char i = 0;
  202.   for(i=0;i<5;i++)
  203.   {
  204.     temp[4-i]= num % 10 +'0';   
  205.           num = num / 10;
  206.   }
  207.   temp[5]='\0';
  208.   if(hide)
  209.   {
  210.     for(i=0;i<4;i++)
  211.         {
  212.           if(temp[i]=='0')
  213.             temp[i]=0x20;
  214.           else
  215.             break;
  216.         }
  217.   }
  218.   LCD_DisplayString(add,temp);
  219. }





  220. //溫度顯示函數(shù)
  221. void TempDisplay(unsigned char add,float Temp)
  222. {
  223.   unsigned char DisBuff[8]={0,0,0,0,0};
  224.   unsigned int Change = 0;
  225.   Change = 10*Temp;  //溫度數(shù)據(jù)放大10倍 102.8   1028
  226.   DisBuff[0] = Change / 1000+'0';        //百位
  227.   DisBuff[1] = Change % 1000 / 100+'0';  //十位
  228.   DisBuff[2] = Change % 100 / 10+'0';    //個(gè)位
  229.   DisBuff[3] = '.';   
  230.   DisBuff[4] = Change % 10+'0';   
  231.   if(DisBuff[0]=='0')       //百位消0
  232.   {
  233.       DisBuff[0] = 0x20;
  234.       if(DisBuff[1]=='0')
  235.       { DisBuff[1]= 0x20; }
  236.   }
  237.   DisBuff[5]=0xdf,
  238.   DisBuff[6]=0x43;
  239.   DisBuff[7]='\0';
  240.   LCD_DisplayString(add,DisBuff);
  241. }
復(fù)制代碼


作者: 子非魚(yú)-    時(shí)間: 2018-10-26 00:36
會(huì)不會(huì)是調(diào)節(jié)屏幕的電阻阻值設(shè)置不對(duì)
作者: sicto123    時(shí)間: 2018-10-26 09:21
子非魚(yú)- 發(fā)表于 2018-10-26 00:36
會(huì)不會(huì)是調(diào)節(jié)屏幕的電阻阻值設(shè)置不對(duì)

不會(huì)啊,調(diào)過(guò)了,也還是這樣
作者: TJW。    時(shí)間: 2018-10-26 10:27
顯示地址程序與問(wèn)題
作者: 臺(tái)風(fēng)天然粉    時(shí)間: 2018-10-28 16:38
判別嗎函數(shù)寫(xiě)錯(cuò)了
作者: zl2168    時(shí)間: 2018-10-28 20:25
本帖最后由 zl2168 于 2018-10-28 21:19 編輯

實(shí)例67  LCD1602顯示屏顯示
⒈ LCD1602顯示屏簡(jiǎn)介
⑴ 引腳功能    …
⑵ 內(nèi)部寄存器    …
⑶ 控制指令    …
⑷ 操作時(shí)序    …
⒉ 電路設(shè)計(jì)    …
⒊ 程序設(shè)計(jì)    …
⒋ Keil調(diào)試    …
⒌ Proteus仿真    …

Proteus仿真一下,確認(rèn)有效。 實(shí)例61 LCD1602顯示屏顯示.rar (49.26 KB, 下載次數(shù): 673)
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1。書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。

作者: 656768194    時(shí)間: 2020-3-7 20:25
我也出現(xiàn)過(guò)這個(gè)情況,在別處看到有人講P0口要加上拉電阻,然后問(wèn)題就解決了
作者: nidiedie    時(shí)間: 2021-5-10 19:09
lcd是這樣子的,protues仿真需要加上拉,但是實(shí)際電路不需要




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1