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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1602|回復: 4
打印 上一主題 下一主題
收起左側

求助單片機Proteus仿真LCD1602亮屏不顯示字符

[復制鏈接]
跳轉到指定樓層
樓主
求助,為什么顯示屏上什么都不顯示呀,代碼如下



單片機源程序如下:
  1. #include <REGX52.H>

  2. //引腳配置:
  3. sbit LCD_RS=P2^6;
  4. sbit LCD_RW=P2^5;
  5. sbit LCD_EN=P2^7;
  6. #define LCD_DataPort P0

  7. //函數定義:
  8. /**
  9.   * @brief  LCD1602延時函數,12MHz調用可延時1ms
  10.   * @param  無
  11.   * @retval 無
  12.   */
  13. void LCD_Delay()
  14. {
  15.         unsigned char i, j;

  16.         i = 2;
  17.         j = 239;
  18.         do
  19.         {
  20.                 while (--j);
  21.         } while (--i);
  22. }

  23. /**
  24.   * @brief  LCD1602寫命令
  25.   * @param  Command 要寫入的命令
  26.   * @retval 無
  27.   */
  28. void LCD_WriteCommand(unsigned char Command)
  29. {
  30.         LCD_RS=0;
  31.         LCD_RW=0;
  32.         LCD_DataPort=Command;
  33.         LCD_EN=1;
  34.         LCD_Delay();
  35.         LCD_EN=0;
  36.         LCD_Delay();
  37. }

  38. /**
  39.   * @brief  LCD1602寫數據
  40.   * @param  Data 要寫入的數據
  41.   * @retval 無
  42.   */
  43. void LCD_WriteData(unsigned char Data)
  44. {
  45.         LCD_RS=1;
  46.         LCD_RW=0;
  47.         LCD_DataPort=Data;
  48.         LCD_EN=1;
  49.         LCD_Delay();
  50.         LCD_EN=0;
  51.         LCD_Delay();
  52. }

  53. /**
  54.   * @brief  LCD1602設置光標位置
  55.   * @param  Line 行位置,范圍:1~2
  56.   * @param  Column 列位置,范圍:1~16
  57.   * @retval 無
  58.   */
  59. void LCD_SetCursor(unsigned char Line,unsigned char Column)
  60. {
  61.         if(Line==1)
  62.         {
  63.                 LCD_WriteCommand(0x80|(Column-1));
  64.         }
  65.         else if(Line==2)
  66.         {
  67.                 LCD_WriteCommand(0x80|(Column-1+0x40));
  68.         }
  69. }

  70. /**
  71.   * @brief  LCD1602初始化函數
  72.   * @param  無
  73.   * @retval 無
  74.   */
  75. void LCD_Init()
  76. {
  77.         LCD_WriteCommand(0x38);//八位數據接口,兩行顯示,5*7點陣
  78.         LCD_WriteCommand(0x0c);//顯示開,光標關,閃爍關
  79.         LCD_WriteCommand(0x06);//數據讀寫操作后,光標自動加一,畫面不動
  80.         LCD_WriteCommand(0x01);//光標復位,清屏
  81. }

  82. /**
  83.   * @brief  在LCD1602指定位置上顯示一個字符
  84.   * @param  Line 行位置,范圍:1~2
  85.   * @param  Column 列位置,范圍:1~16
  86.   * @param  Char 要顯示的字符
  87.   * @retval 無
  88.   */
  89. void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
  90. {
  91.         LCD_SetCursor(Line,Column);
  92.         LCD_WriteData(Char);
  93. }

  94. /**
  95.   * @brief  在LCD1602指定位置開始顯示所給字符串
  96.   * @param  Line 起始行位置,范圍:1~2
  97.   * @param  Column 起始列位置,范圍:1~16
  98.   * @param  String 要顯示的字符串
  99.   * @retval 無
  100.   */
  101. void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
  102. {
  103.         unsigned char i;
  104.         LCD_SetCursor(Line,Column);
  105.         for(i=0;String[i]!='\0';i++)
  106.         {
  107.                 LCD_WriteData(String[i]);
  108.         }
  109. }

  110. /**
  111.   * @brief  返回值=X的Y次方
  112.   */
  113. int LCD_Pow(int X,int Y)
  114. {
  115.         unsigned char i;
  116.         int Result=1;
  117.         for(i=0;i<Y;i++)
  118.         {
  119.                 Result*=X;
  120.         }
  121.         return Result;
  122. }

  123. /**
  124.   * @brief  在LCD1602指定位置開始顯示所給數字
  125.   * @param  Line 起始行位置,范圍:1~2
  126.   * @param  Column 起始列位置,范圍:1~16
  127.   * @param  Number 要顯示的數字,范圍:0~65535
  128.   * @param  Length 要顯示數字的長度,范圍:1~5
  129.   * @retval 無
  130.   */
  131. void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  132. {
  133.         unsigned char i;
  134.         LCD_SetCursor(Line,Column);
  135.         for(i=Length;i>0;i--)
  136.         {
  137.                 LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');
  138.         }
  139. }

  140. /**
  141.   * @brief  在LCD1602指定位置開始以有符號十進制顯示所給數字
  142.   * @param  Line 起始行位置,范圍:1~2
  143.   * @param  Column 起始列位置,范圍:1~16
  144.   * @param  Number 要顯示的數字,范圍:-32768~32767
  145.   * @param  Length 要顯示數字的長度,范圍:1~5
  146.   * @retval 無
  147.   */
  148. void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
  149. {
  150.         unsigned char i;
  151.         unsigned int Number1;
  152.         LCD_SetCursor(Line,Column);
  153.         if(Number>=0)
  154.         {
  155.                 LCD_WriteData('+');
  156.                 Number1=Number;
  157.         }
  158.         else
  159.         {
  160.                 LCD_WriteData('-');
  161.                 Number1=-Number;
  162.         }
  163.         for(i=Length;i>0;i--)
  164.         {
  165.                 LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');
  166.         }
  167. }

  168. /**
  169.   * @brief  在LCD1602指定位置開始以十六進制顯示所給數字
  170.   * @param  Line 起始行位置,范圍:1~2
  171.   * @param  Column 起始列位置,范圍:1~16
  172.   * @param  Number 要顯示的數字,范圍:0~0xFFFF
  173.   * @param  Length 要顯示數字的長度,范圍:1~4
  174.   * @retval 無
  175.   */
  176. void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  177. {
  178.         unsigned char i,SingleNumber;
  179.         LCD_SetCursor(Line,Column);
  180.         for(i=Length;i>0;i--)
  181.         {
  182.                 SingleNumber=Number/LCD_Pow(16,i-1)%16;
  183.                 if(SingleNumber<10)
  184.                 {
  185.                         LCD_WriteData(SingleNumber+'0');
  186.                 }
  187.                 else
  188.                 {
  189.                         LCD_WriteData(SingleNumber-10+'A');
  190.                 }
  191.         }
  192. }

  193. /**
  194.   * @brief  在LCD1602指定位置開始以二進制顯示所給數字
  195.   * @param  Line 起始行位置,范圍:1~2
  196.   * @param  Column 起始列位置,范圍:1~16
  197.   * @param  Number 要顯示的數字,范圍:0~1111 1111 1111 1111
  198.   * @param  Length 要顯示數字的長度,范圍:1~16
  199.   * @retval 無
  200.   */
  201. void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  202. {
  203.         unsigned char i;
  204.         LCD_SetCursor(Line,Column);
  205.         for(i=Length;i>0;i--)
  206.         {
  207.                 LCD_WriteData(Number/LCD_Pow(2,i-1)%2+'0');
  208.         }
  209. }

  210. #include <REGX52.H>
  211. #include "LCD1602.H"

  212. void main()
  213. {
  214.         LCD_Init();
  215.         LCD_ShowChar(1,1,'A');
  216.         LCD_ShowString(1,3,"Hello");
  217.         while(1)
  218.         {
  219.                
  220.         }
  221.         
  222. }
復制代碼

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

使用道具 舉報

沙發
ID:94031 發表于 2023-3-3 15:17 | 只看該作者
軟件設置與硬件連接不一致.
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
回復

使用道具 舉報

板凳
ID:1064047 發表于 2023-3-3 15:18 | 只看該作者
最后while(1)里面沒有東西,程序在這個循環里沒出來
回復

使用道具 舉報

地板
ID:863590 發表于 2023-3-3 17:14 | 只看該作者
xuyaqi 發表于 2023-3-3 15:17
軟件設置與硬件連接不一致.
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;

哦哦哦我給看成25 26  27了,感謝
回復

使用道具 舉報

5#
ID:863590 發表于 2023-3-3 17:15 | 只看該作者
lixiongkuku 發表于 2023-3-3 15:18
最后while(1)里面沒有東西,程序在這個循環里沒出來

好嘞,已經修改可以正常顯示了,感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re热精品视频国产免费 | 一级黄色夫妻生活 | 亚洲精品一区在线 | 亚洲精品片 | 久久精品国产a三级三级三级 | 成人久久久 | 欧美视频在线播放 | 六月色婷 | 玖玖综合网 | 国产小视频在线 | 高清亚洲 | 成人av免费在线观看 | 久久久精品影院 | 中文字幕一区在线 | 色婷婷一区二区三区四区 | 伊人二区| 日韩在线不卡 | 欧美色综合一区二区三区 | 亚洲永久字幕 | av大片在线 | www久久 | 亚洲精品久久久久久一区二区 | 黄片毛片免费观看 | av毛片 | 国产在线对白 | 成人网在线观看 | 在线精品亚洲欧美日韩国产 | 人人做人人澡人人爽欧美 | 四虎影 | 免费在线观看成人 | 欧美成人aaa级毛片在线视频 | 久久综合一区 | 一区二区三区在线看 | 日韩亚洲一区二区 | 午夜免费成人 | 蜜桃视频在线观看www社区 | 日本精品一区二区三区视频 | 欧美一区二区三区四区视频 | 四虎影视在线 | 韩日在线视频 | 成人精品啪啪欧美成 |