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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機+LCD1602怎么顯示不了?

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. //定義控制引腳
  4. sbit RS=P2^0;
  5. sbit RW=P2^1;
  6. sbit E=P2^2;

  7. extern void lcd_W_cmd(unsigned char com);                 //LCD寫命令函數
  8. extern void lcd_W_dat(unsigned char dat);                    //LCD寫數據函數
  9. extern void lcd_init();                                                  //LCD初始化函數
  10. extern        void show_sting(unsigned char ch[]);             //顯示字符串
  11. extern void show_data(unsigned int dbyte)reentrant;       //顯示數據


  12. //實現軟件延時,延時時間為i*1ms
  13. void delay(unsigned int i)
  14. {
  15.         unsigned char k;
  16.         while(i--);        
  17.         for(k=0;k<120;k++);                   //120次空操作
  18. }

  19. //采用軟件延時,5個機器周期
  20. void delay1()
  21. {
  22.         _nop_();
  23.         _nop_();
  24.         _nop_();
  25. }

  26. //讀狀態字
  27. unsigned char lcd_r_start()
  28. {
  29.         unsigned char s;
  30.         RW=1;                  //RW=1,RS=0,讀LCd狀態
  31.         delay1();
  32.         RS=0;
  33.         delay1();
  34.         E=1;                                                                        //E端時序
  35.         delay1();
  36.         s=P0;                 //從LCD的數據口讀狀態
  37.         delay1();
  38.         E=0;               
  39.         delay1();
  40.         RW=0;
  41.         delay1();
  42.         return(s);           //返回讀取的LCD狀態字
  43. }

  44. //寫命令
  45. void lcd_w_cmd(unsigned char com)
  46. {
  47.         unsigned char i;
  48.         do{                               //查LCD忙操作
  49.                 i=lcd_r_start();      //調用讀狀態字函數,讀取LCD狀態字
  50.                 i=i&0x80;             //與操作屏蔽掉低7位
  51.                 delay(1);             //延時1ms
  52.         }while(i!=0);               //LCD忙,繼續查詢,否則退出循環
  53.         RW=0;                  
  54.         delay1();
  55.         RS=0;                  //RW=0,RS=0,寫LCD命令操作
  56.         delay1();
  57.         E=1;                                                                                //E端時序
  58.         delay1();
  59.         P0=com;               //將com中的命令寫入LCD數據口
  60.         delay1();
  61.         E=0;
  62.         delay1();
  63.         RW=1;
  64.         delay(1);
  65. }

  66. //寫數據
  67. void lcd_W_dat(unsigned char dat)
  68. {
  69.         unsigned char i;
  70.         do{                               //查LCD忙操作
  71.                 i=lcd_r_start();      //調用讀狀態字函數,讀取LCD狀態字
  72.                 i=i&0x80;             //與操作屏蔽掉低7位
  73.                 delay(1);             //延時1ms
  74.         }while(i!=0);              //LCD忙,繼續查詢,否則退出循環
  75.         RW=0;
  76.         delay1();
  77.         RS=1;                                                                                //RW=0,RS=0,寫LCD數據
  78.         delay1();
  79.         E=1;                                                                                //E端時序
  80.         delay1();
  81.         P0=dat;                 //將dat中的命令寫入LCD數據口   
  82.         delay1();
  83.         E=0;
  84.         delay1();
  85.         RW=1;
  86.         delay(255);
  87. }

  88. //lcd初始化
  89. void lcd_init()
  90. {
  91.         lcd_w_cmd(0x38);     //設置工作方式
  92.         lcd_w_cmd(0x0c);     //設置顯示狀態
  93.         lcd_w_cmd(0x01);            //清屏
  94.         lcd_w_cmd(0x06);     //設置輸入方式
  95.         lcd_w_cmd(0x80);     //設置初始顯示位置
  96. }

  97. //在LCD上顯示字符串函數
  98. void show_sting(unsigned char ch[])
  99. {
  100.         unsigned char i;
  101.         i=0;
  102.         while(ch[i]!='\0')                   //字符串結束符
  103.         {
  104.                 lcd_w_cmd(0x83+i);      //字符串顯示位置
  105.                 lcd_W_dat(ch[i]);
  106.                 i++;
  107.         }
  108. }

  109. void main()
  110. {
  111.         lcd_init();           //LCD初始化   
  112.         while(1)
  113.         {
  114.                 show_sting("HELLO");
  115.         }
  116. }
復制代碼

LCDtest.zip

40.22 KB, 下載次數: 6

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

使用道具 舉報

沙發
ID:907204 發表于 2022-3-26 18:06 | 只看該作者
求有空的大佬幫忙看看哪里出問題了!謝謝
回復

使用道具 舉報

板凳
ID:975909 發表于 2022-3-26 18:59 | 只看該作者
如果lcd1602顯示達不到預期效果,肯定程序有點錯誤
回復

使用道具 舉報

地板
ID:149451 發表于 2022-3-26 19:12 | 只看該作者
有顯示啊,沒問題的

回復

使用道具 舉報

5#
ID:161164 發表于 2022-3-26 19:21 | 只看該作者
部份版本的Protues LCD1602仿真不支援查忙
于是你的程序在While(i!=0)中死循環了
回復

使用道具 舉報

6#
ID:907204 發表于 2022-3-26 19:36 | 只看該作者
w1179benp 發表于 2022-3-26 19:12
有顯示啊,沒問題的

謝大佬幫忙查看,看了二樓知道問題出在哪里了!前幾天protues8.6升8.9了,應該是這個原因。
回復

使用道具 舉報

7#
ID:907204 發表于 2022-3-26 19:38 | 只看該作者
lkc8210 發表于 2022-3-26 19:21
部份版本的Protues LCD1602仿真不支援查忙
于是你的程序在While(i!=0)中死循環了

謝謝大佬!應該是版本問題,我前幾天protues8.6換8.9了。感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩高清在线观看 | 色婷婷狠狠 | 欧美日韩在线免费观看 | 伊人狠狠干| 欧美精品一区二区三区在线播放 | 国产精品一区二区在线播放 | 性一交一乱一透一a级 | 午夜精品视频 | 欧美日韩在线免费 | 久久久久久国产精品免费免费狐狸 | 青青操91 | 日本一区二区三区在线观看 | 久久69精品久久久久久久电影好 | 99久久国产免费 | 精品视频一区二区 | 久久蜜桃av一区二区天堂 | 久久成人免费 | 男女免费观看在线爽爽爽视频 | 亚洲精品一区二区三区四区高清 | 在线日韩av电影 | 成人精品一区 | 秋霞电影院午夜伦 | 成人精品国产一区二区4080 | 国内自拍第一页 | 天堂精品视频 | 国产精品视频一区二区三区不卡 | 国产精品黄色 | 日韩欧美视频在线 | 成人一区二区三区在线观看 | 天天射中文 | 日韩欧美手机在线 | 夜夜骑首页 | 成人在线国产 | 亚洲精品白浆高清久久久久久 | 欧美中文一区 | 超碰av在线| 成年无码av片在线 | 久久国产成人 | 中文字幕在线看 | 精品一二三 | 国产亚洲www |