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

QQ登錄

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

搜索
查看: 20340|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)LCD顯示的理解,真正去學(xué)會(huì)運(yùn)用LCD1602

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:425175 發(fā)表于 2019-1-30 15:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這幾天學(xué)了LCD1602模塊及其顯示原理,下面是我對(duì)LCD1602顯示的理解。
1.1 LCD1602模塊
1602字符型液晶,常用16*2的點(diǎn)陣顯示(主要是5*7點(diǎn)陣/每字符),初始化好后,寫(xiě)命令設(shè)置顯示坐標(biāo),寫(xiě)數(shù)據(jù)到8位數(shù)據(jù)總線上并顯示LCD上。
1.1.1 LCD1602模塊引腳圖
如下圖,為L(zhǎng)CD1602模塊的引腳圖(51單片機(jī)開(kāi)發(fā)板),通過(guò)旋鈕電位器(順時(shí)針可以加亮,反之亦然)。
圖1.1.1 LCD1602引腳圖
       GND、VCC分別是電源地、電源正極。
       VO:對(duì)比度調(diào)整端,若僅僅接地,對(duì)比度會(huì)很高,常常接上一個(gè)幾K的電位器或可變電阻來(lái)調(diào)節(jié)對(duì)比度以實(shí)現(xiàn)理想的顯示效果。
       RS:寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
       RW:讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。(一般對(duì)于單純的LCD顯示只用到寫(xiě)操作)。
       E :使能信號(hào)。
       DB0-DB7:8個(gè)數(shù)據(jù)I/O口。
       BG_VCC、BG_GND分別是背光電源正極、負(fù)極。

1.1.2 LCD1602.h
     下面是LCD1602工作時(shí)序,如圖


圖1.1.2 LCD1602工作時(shí)序圖

1.初始化之前需要編寫(xiě)‘寫(xiě)命令操作’。
對(duì)于WriteCom(),由前面知道,寫(xiě)操作需要RW為低電平即‘0’,并且通過(guò)使RS為低電平即‘0’來(lái)選擇命令寄存器,才能寫(xiě)入命令到DATAPINS。另外,每次命令輸入DATAPINS就位后,令使能信號(hào)產(chǎn)生一個(gè)下降沿,將DATAPINS的命令寫(xiě)進(jìn)LCD1602

  1. void LcdWriteCom(uchar com)      //寫(xiě)入命令
  2. {
  3.       LCD1602_E = 0;         //使能清零

  4.       LCD1602_RS = 0;        //選擇發(fā)送命令
  5.       LCD1602_RW = 0;      //選擇寫(xiě)入

  6.       LCD1602_DATAPINS = com;    //放入命令
  7.       Lcd1602_Delayms(1);                   //等待數(shù)據(jù)穩(wěn)定


  8.       LCD1602_E = 1;           //寫(xiě)入時(shí)序,一個(gè)下降沿,將命令傳達(dá)到LCD
  9.       Lcd1602_Delayms(5);        //保持時(shí)間
  10.       LCD1602_E = 0;
  11. }
復(fù)制代碼


2.‘寫(xiě)數(shù)據(jù)操作’也類似,不同之處是RS為高電平即‘1’選擇數(shù)據(jù)寄存器,將數(shù)據(jù)寫(xiě)入DATAPINS,其他都一樣。
  1. void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù)

  2. {

  3. LCD1602_E = 0; //使能清零
  4. LCD1602_RS = 1; //選擇輸入數(shù)據(jù)
  5. LCD1602_RW = 0; //選擇寫(xiě)入
  6. LCD1602_DATAPINS = dat; //寫(xiě)入數(shù)據(jù)
  7. Lcd1602_Delayms(1);
  8. LCD1602_E = 1; //寫(xiě)入時(shí)序,一個(gè)下降沿
  9. Lcd1602_Delayms(5); //保持時(shí)間
  10. LCD1602_E = 0;

  11. }
復(fù)制代碼

3.寫(xiě)命令操作編完后就可以進(jìn)行LCD1602的初始化了。

  1. void LcdInit()                                         //LCD初始化子程序

  2. {
  3.      LcdWriteCom(0x38);  //功能設(shè)定 0011 1000 (8位數(shù)據(jù)線、顯示2行、每個(gè)字符為5*7點(diǎn)陣)

  4.       //
  5.       LcdWriteCom(0x0c);  //顯示開(kāi)關(guān)控制 0000 1100(或+光標(biāo)不閃爍0x0d:0000 1101)(開(kāi)顯示、不開(kāi)光標(biāo)、光標(biāo)閃爍或不閃爍)
  6.       LcdWriteCom(0x06);  //進(jìn)入模式設(shè)置 0000 0110(寫(xiě)入數(shù)據(jù)后光標(biāo)右移一位及顯示屏不動(dòng))
  7.       LcdWriteCom(0x01);  //清屏
  8.       LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn) //DB7為高電平

  9. }
復(fù)制代碼

4.調(diào)用LCD1602顯示
  1. void  LCD1602_display()

  2. {

  3.       unsigned int i,j;
  4.       unsigned char  Compu[9]="computer";
  5.       unsigned char  Dog[5]="dog";
  6.       LcdInit();
  7.       LcdWriteCom(0x80+15);//第一行顯示C
  8. LcdWriteData(‘C’);
  9. LcdWriteCom(0x80);
  10.    /*其他方式顯示:for循環(huán)語(yǔ)句顯示字符串*/
  11.       for(i=0;i<8;i++) //第一行顯示‘computer’

  12.      {
  13.                 LcdWriteData(Compu[i]);
  14.       }

  15.       LcdWriteCom(0x80+0x40);
  16.       for(j=0;j<3;j++)// //第二行顯示‘dog’
  17.      {

  18.                 LcdWriteData(Dog[j]);
  19.       }
  20. }
復(fù)制代碼

     好了,今天的分享就先到這,雖然只是小case,但是做個(gè)總結(jié)還是蠻有意義的!


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:478928 發(fā)表于 2019-2-21 18:26 | 只看該作者
nice看了你的總結(jié)明白了很多東西
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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