找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13023|回復(fù): 10
收起左側(cè)

STC89C52RC單片機(jī)驅(qū)動(dòng)LCD1602的學(xué)習(xí)過(guò)程

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

制作出來(lái)實(shí)物圖如下:

再發(fā)一張

再發(fā)一張

有顯示了

有顯示了

焊接技術(shù)就這樣,勿噴

焊接技術(shù)就這樣,勿噴

代碼一個(gè)文件

代碼一個(gè)文件


單片機(jī)源程序如下:
  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;                                        //數(shù)據(jù)/命令選擇端
  6. sbit LCD1602_RW = P2^1;                                        //讀寫(xiě)選擇端
  7. sbit LCD1602_EN = P2^2;                                        //使能信號(hào)

  8. void InitLcd1602();                                                //初始化液晶函數(shù)
  9. void Lcd1602Show(uchar x,uchar y,uchar *str);                                                //顯示數(shù)據(jù)函數(shù)
  10. /************************************這是主函數(shù)******************************************/
  11. void main()
  12. {
  13.         uchar str[] = "This is demo!";
  14.         InitLcd1602();                                        //初始化液晶
  15.         Lcd1602Show(2,0,str);                                //指定坐標(biāo)顯示字符串
  16.         Lcd1602Show(0,1,"WeChat:6731663");        //指定坐標(biāo)顯示字符串
  17.         while(1);
  18. }
  19. /***********************************LCD遇忙等待函數(shù)****************************************/
  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);                                        //數(shù)據(jù)端口最高位一直為高電平時(shí)它會(huì)一直等待。
  31. }

  32. /***********************************液晶寫(xiě)指令函數(shù)*****************************************/
  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. /***********************************初始化液晶函數(shù)*****************************************/
  43. void InitLcd1602()
  44. {
  45.         LCD1602WriteCMD(0x38);                                //顯示模式設(shè)置:16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  46.         LCD1602WriteCMD(0x0C);                                //顯示開(kāi)關(guān)及光標(biāo)設(shè)置:顯示開(kāi),光標(biāo)關(guān)。
  47.         LCD1602WriteCMD(0x06);                                //光標(biāo)+1,并且整屏不動(dòng)
  48.         LCD1602WriteCMD(0x01);                                //顯示清零,所有數(shù)據(jù)清零。
  49. }
  50. /**********************************液晶當(dāng)前坐標(biāo)函數(shù)****************************************/
  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數(shù)據(jù)指針必須是0x80開(kāi)頭
  63. }
  64. /***********************************液晶寫(xiě)數(shù)據(jù)函數(shù)*****************************************/
  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. /***********************************液晶顯示函數(shù)*******************************************/
  75. void Lcd1602Show(uchar x,uchar y,uchar *str)
  76. {
  77.         LcdSetCursor(x,y);                                        //LCD當(dāng)前坐標(biāo)函數(shù)
  78.         while(*str != '\0')                                        //字符串沒(méi)有結(jié)束時(shí)執(zhí)行
  79.         {
  80.                 LcdWriteDate(*str++);                        //傳遞完STR數(shù)據(jù)在對(duì)地址加加
  81.                
  82.         }
  83. }
復(fù)制代碼

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


評(píng)分

參與人數(shù) 2黑幣 +51 收起 理由
紫色月夜 + 1 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:302494 發(fā)表于 2018-8-7 16:47 | 顯示全部樓層
自己搶個(gè)沙發(fā)。
回復(fù)

使用道具 舉報(bào)

ID:97554 發(fā)表于 2018-8-7 18:08 | 顯示全部樓層
焊的不錯(cuò),整整齊齊啊
回復(fù)

使用道具 舉報(bào)

ID:378745 發(fā)表于 2018-8-7 22:11 | 顯示全部樓層
焊接整齊,贊。
回復(fù)

使用道具 舉報(bào)

ID:384398 發(fā)表于 2018-8-8 23:08 | 顯示全部樓層
感謝分享。!
回復(fù)

使用道具 舉報(bào)

ID:390236 發(fā)表于 2018-8-31 11:07 | 顯示全部樓層
焊接整齊
回復(fù)

使用道具 舉報(bào)

ID:386381 發(fā)表于 2018-8-31 12:31 來(lái)自觸屏版 | 顯示全部樓層
這焊工簡(jiǎn)直是藝術(shù)品呀
回復(fù)

使用道具 舉報(bào)

ID:414818 發(fā)表于 2019-1-12 21:53 | 顯示全部樓層
焊的挺漂亮的。
回復(fù)

使用道具 舉報(bào)

ID:535558 發(fā)表于 2020-10-21 13:29 來(lái)自觸屏版 | 顯示全部樓層
牛啊,這焊接可以的。
回復(fù)

使用道具 舉報(bào)

ID:390236 發(fā)表于 2021-6-10 08:45 | 顯示全部樓層
這焊接可以的 就是用焊錫多了一點(diǎn)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表