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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12762|回復: 10
收起左側

STC89C52RC單片機驅動LCD1602的學習過程

  [復制鏈接]
ID:302494 發表于 2018-8-7 16:47 | 顯示全部樓層 |閱讀模式
本人學習單片機有段時間了,前段時間在網上淘了一個最小系統板,和LCD1602A液晶顯示屏。折騰了半天不知道什么原因始終無顯示,檢查連接線沒問題, 最小系統板也沒問題。后來我分析可能是液晶顯示屏是壞的,于是又在網上淘了兩片,6元錢一片。回來一測試依舊沒有顯示。問題在哪呢?把代碼發給朋友看,朋友檢查了也沒有問題,始終就是第一排黑色方塊。今天閑來沒事又拿出來擺弄,結果打開電源居然有顯示了,但是關閉電源后再開又沒有了,我就反復開關電源了一百多次依舊沒有反應,后來我想既然有一次有顯示代碼就應該沒有問題。那就是硬件了。于是花了兩個小時自己焊接了一個最小系統板,一次成功。由于沒有畫圖直接焊接的,現在把代買與大家分享。大蝦請繞行。

制作出來實物圖如下:

再發一張

再發一張

有顯示了

有顯示了

焊接技術就這樣,勿噴

焊接技術就這樣,勿噴

代碼一個文件

代碼一個文件


單片機源程序如下:
  1. #include <STC89C5xRC.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define LCD1602_DB P0
  5. sbit LCD1602_RS = P2^0;                                        //數據/命令選擇端
  6. sbit LCD1602_RW = P2^1;                                        //讀寫選擇端
  7. sbit LCD1602_EN = P2^2;                                        //使能信號

  8. void InitLcd1602();                                                //初始化液晶函數
  9. void Lcd1602Show(uchar x,uchar y,uchar *str);                                                //顯示數據函數
  10. /************************************這是主函數******************************************/
  11. void main()
  12. {
  13.         uchar str[] = "This is demo!";
  14.         InitLcd1602();                                        //初始化液晶
  15.         Lcd1602Show(2,0,str);                                //指定坐標顯示字符串
  16.         Lcd1602Show(0,1,"WeChat:6731663");        //指定坐標顯示字符串
  17.         while(1);
  18. }
  19. /***********************************LCD遇忙等待函數****************************************/
  20. void LcdWaitReady()
  21. {
  22.         uchar sta;
  23.         LCD1602_DB = 0xFF;
  24.         LCD1602_RS = 0;
  25.         LCD1602_RW = 1;
  26.         do{
  27.                 LCD1602_EN = 1;
  28.                 sta = LCD1602_DB;
  29.                 LCD1602_EN = 0;
  30.         }while(sta & 0x80);                                        //數據端口最高位一直為高電平時它會一直等待。
  31. }

  32. /***********************************液晶寫指令函數*****************************************/
  33. void LCD1602WriteCMD(uchar cmd)
  34. {
  35.         LcdWaitReady();                                                //LCD遇忙等待
  36.         LCD1602_RS = 0;
  37.         LCD1602_RW = 0;
  38.         LCD1602_DB = cmd;
  39.         LCD1602_EN = 1;                                                //使能引腳高脈沖
  40.         LCD1602_EN = 0;
  41. }
  42. /***********************************初始化液晶函數*****************************************/
  43. void InitLcd1602()
  44. {
  45.         LCD1602WriteCMD(0x38);                                //顯示模式設置:16*2顯示,5*7點陣,8位數據接口
  46.         LCD1602WriteCMD(0x0C);                                //顯示開關及光標設置:顯示開,光標關。
  47.         LCD1602WriteCMD(0x06);                                //光標+1,并且整屏不動
  48.         LCD1602WriteCMD(0x01);                                //顯示清零,所有數據清零。
  49. }
  50. /**********************************液晶當前坐標函數****************************************/
  51. void LcdSetCursor(uchar x,uchar y)
  52. {
  53.         uchar addr;
  54.         if(y==0)
  55.         {
  56.                 addr = 0x00 + x;
  57.         }
  58.         else
  59.         {
  60.                 addr = 0x40 + x;
  61.         }
  62.         LCD1602WriteCMD(addr | 0x80);                //LCD數據指針必須是0x80開頭
  63. }
  64. /***********************************液晶寫數據函數*****************************************/
  65. void LcdWriteDate(uchar dat)
  66. {
  67.         LcdWaitReady();                                        //遇忙等待
  68.         LCD1602_RS = 1;
  69.         LCD1602_RW = 0;
  70.         LCD1602_DB = dat;
  71.         LCD1602_EN = 1;                                                //使能引腳高脈沖
  72.         LCD1602_EN = 0;
  73. }
  74. /***********************************液晶顯示函數*******************************************/
  75. void Lcd1602Show(uchar x,uchar y,uchar *str)
  76. {
  77.         LcdSetCursor(x,y);                                        //LCD當前坐標函數
  78.         while(*str != '\0')                                        //字符串沒有結束時執行
  79.         {
  80.                 LcdWriteDate(*str++);                        //傳遞完STR數據在對地址加加
  81.                
  82.         }
  83. }
復制代碼

所有資料51hei提供下載:
LCD1602-1.rar (25.52 KB, 下載次數: 151)

評分

參與人數 2黑幣 +51 收起 理由
紫色月夜 + 1 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:302494 發表于 2018-8-7 16:47 | 顯示全部樓層
自己搶個沙發。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 夜夜操av | 一级黄色毛片 | 国产美女在线观看 | 超碰97av | 久久99精品久久久久久噜噜 | 国产在线视频网 | 黄网站涩免费蜜桃网站 | 日本三级电影在线看 | 免费观看国产视频在线 | 日韩久久久久久 | 精品国产乱码久久久久久丨区2区 | www久久99| 成人深夜小视频 | 国产婷婷在线视频 | 91色网站 | 欧美舔穴| 秋霞a级毛片在线看 | 国产美女福利在线观看 | 久久精品中文 | 欧美最猛性xxxxx亚洲精品 | 亚洲一区视频在线 | 日韩电影在线 | 亚洲区一区二 | 视频一区二区在线观看 | 欧美性jizz18性欧美 | 成人特级毛片 | 亚洲精品一区二区三区四区高清 | 国产精品免费av | 久久狠狠 | 国产日韩视频 | 精品国产第一区二区三区 | 天天干国产 | 久久高清 | 欧美xxxⅹ性欧美大片 | 久久久国产精品 | av影片在线| 一二三四在线视频观看社区 | 自拍偷拍一区二区三区 | 黄在线免费观看 | 国产在线视频在线观看 | 在线观看视频一区 |