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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 26839|回復: 8
打印 上一主題 下一主題
收起左側(cè)

完全解讀lcd1602基礎接口及C51實現(xiàn)滾動顯示

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:108628 發(fā)表于 2016-3-13 13:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
第一次寫教程哈,多多包涵/羞射

先介紹下lcd1602芯片,LCD1602 分為帶背光和不帶背光兩種,基控制器大部分為 HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別.

字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。lcd1602即為1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖所示。

正面


背面


LCD1602主要技術參數(shù):

顯示容量:16×2個字符

芯片工作電壓:4.5—5.5V

工作電流:2.0mA(5.0V)

模塊最佳工作電壓:5.0V

字符尺寸:2.95×4.35(W×H)mm

引腳功能說明

LCD1602采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表所示:

各引腳接口


第1腳:VSS為地電源。

第2腳:VDD接5V正電源。

第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。

第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。

第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。

第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。

第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。

第15腳:背光源正極。

第16腳:背光源負極。


LCD地址映射圖


注釋:1602為2行16列,屏幕所能顯示的地址為00H~0FH(第一行),40H~4FH(第二行),其他地址可以存儲待顯示的數(shù)據(jù)。這就給我們的花樣顯示提供了條件哈:-D



運行時序圖:



注釋:這里的讀操作指的是C51讀1602的總線數(shù)據(jù),RS=0,RW=1的時候,E給高電平則可以讀到顯示屏的狀態(tài),這個功能一般用于讀忙,除了初始化之外,每次對1602進行讀寫操作都要讀忙檢測,當總線最高為STAD7=1則為繁忙,禁止讀寫操作。



注釋:這里指的是C51往1602寫數(shù)據(jù)/命令,通過使能E的高脈沖寫入,在E的下降沿就執(zhí)行寫入的命令或者顯示寫入的數(shù)據(jù)。


接下來簡要介紹下1602的相關指令

指令表(詳細命令請查閱相關手冊)


常用命令   :0x80+0xdd:dd為地址,這條命令用于設置顯示起點坐標

                   0x0c            :開顯示,無光標,光標不閃爍 。一般做帶鍵盤輸入的才加入光標,如計算器。常用的計量顯示不顯示光標。

                    0x06           :寫一個數(shù)據(jù),地址指針加1,由1602地址表可以看出,實際上就是設置成從左往右寫數(shù)據(jù)而已。

                    0x38           : 設置顯示模式,16x2顯示 5x7點陣,8位數(shù)據(jù)接口。端口不夠用時,這個命令也可以換用4位數(shù)據(jù)接口的。

                    0x01           :清屏。


電路連接圖

這里用的帶背光的1602


接下來寫相關子程序:

//寫入命令子函數(shù)

void LcdWriteCom(unsigned char com)

{

  LCD_RS=0;

  LCD_RW=0;

  LCD_GPIO=com;

  delay1ms(1);

  LCD_E=1;

  delay1ms(1);

  LCD_E=0;

}

//寫入數(shù)據(jù)子函數(shù)

void LcdWriteData(unsigned char dat)

{

  LCD_RS=1;

  LCD_RW=0;

  LCD_GPIO=dat;

  delay1ms(1);

  LCD_E=1;

  delay1ms(1);

  LCD_E=0;

}

//讀忙子函數(shù)

bit LCD_bz(void)

{

  bit bz;

  LCD_RS=0;

  LCD_RW=1;

  LCD_E=1;

  delay1ms(10);

  P0=0xff;           //C51單片機讀引腳要先置高電平,原因不贅述,很多資料沒有這一步驟,大家格外注意下

  bz=(bit)(LCD_GPIO&0x80);

  LCD_E=0;

  return bz;

}


//延時子程序

void delay1ms(unsigned int t)

{

  unsigned int i,j;              //節(jié)約內(nèi)存起見,建議用uchar,由于后面要做動態(tài)顯示,為了滿足顯示效果,這里用了uint

  for(i=0;i

  {

    for(j=0;j<300;j++);

  }

}

//初始化顯示屏程序

void LcdInit()

{

  LcdWriteCom(0x38);//顯示模式2行16列

  LcdWriteCom(0x0c);//開顯示 無光標 不閃爍

  LcdWriteCom(0x06);//寫一個指針加1

  LcdWriteCom(0x01);//清屏

  LcdWriteCom(0x80);//設置(0,0)為起點

}


主程序:

//我們要把第一行做成一個16字符固定顯示,第二行做成滾動顯示25字符

//這里采用的是1602指針右移的基礎命令而不是整屏右移命令

#include

#define LCD_GPIO  P0

void LcdWriteCom(unsigned char); //寫入命令子函數(shù)聲明

void LcdWriteData(unsigned char);//寫入數(shù)據(jù)子函數(shù)聲明

void LcdInit();//顯示屏初始化子函數(shù)聲明

void delay1ms(unsigned int);//延時函數(shù)聲明

bit LCD_bz(void);//讀忙函數(shù)聲明

sbit LCD_RW=P2^5;

sbit LCD_RS=P2^6;

sbit LCD_E=P2^7;

unsigned char displayDate1[]="    I'm Cesar   ";//一共16個字符(包括空格在內(nèi))

unsigned char displayDate2[]=" Please add QQ775222573  ";//一共25個字符

void main(void)

{

  unsigned char i=0,j=0,n=0;

  LcdInit();

LcdWriteCom(0x80);//設置坐標為第一行第一個字符

for(i=;i<16;i++)

{

   LcdWriteData(displayDate1[ i]);

}

while(1)

  {

if(LCD_bz())

      continue;//讀忙,結(jié)束本次循環(huán)


LcdWriteCom(0x80+0x40);//設置第二行第一個字符起點

for(j=n;j<25+n;j++)//我們沒有進行整屏右移,但是我們進行了數(shù)組右移O(∩_∩)O~

{

   LcdWriteData(displayDate2[j]);

}

      n++;//數(shù)組的顯示起點右移,這樣實現(xiàn)了滾動

if(n>=(25-15))//當顯示移到最右邊時,停頓片刻,返回起點再次循環(huán)

   {

         n=0;

         delay1ms(2000);

        }

      delay1ms(600);

  }

}

下載到C51調(diào)試結(jié)果:





好了,本次教程結(jié)束,寫了一個上午,吃飯去了/(ㄒoㄒ)/~~。

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:104361 發(fā)表于 2016-8-29 14:37 | 只看該作者
看著很不錯,拿來研究下
回復

使用道具 舉報

板凳
ID:161933 發(fā)表于 2017-2-18 14:56 | 只看該作者
//讀忙子函數(shù)
bit LCD_bz(void)
{
  bit bz;
  LCD_RS=0;
  LCD_RW=1;
  LCD_E=1;
  delay1ms(10);
  P0=0xff;           //C51單片機讀引腳要先置高電平,原因不贅述,很多資料沒有這一步驟,大家格外注意下
  bz=(bit)(LCD_GPIO&0x80);
  LCD_E=0;
  return bz;
}

這個讀忙子函數(shù)的作用就是bz=(bit)(LCD_GPIO&0x80),取LCD_GPIO 的最高位,返回給bz?為什么LCD_GPIO的最高位就能反映LCD的忙閑狀態(tài)呢?


回復

使用道具 舉報

地板
ID:161933 發(fā)表于 2017-2-18 14:59 | 只看該作者
while(1)
  {
if(LCD_bz())
      continue;//讀忙,結(jié)束本次循環(huán)

主程序中,加入這個if(LCD_bz())函數(shù)的作用是什么,不加會怎樣呢?
continue;跳轉(zhuǎn)到哪里去了?
回復

使用道具 舉報

5#
ID:227453 發(fā)表于 2017-8-27 10:19 | 只看該作者
if(n>=(25-15))//當顯示移到最右邊時,停頓片刻,返回起點再次循環(huán)
請問這句里面的25-15是怎么來的,怎么理解
回復

使用道具 舉報

6#
ID:560111 發(fā)表于 2019-6-17 21:53 | 只看該作者
我想問一下那個定義cmd和data時的gpio是什么啊
回復

使用道具 舉報

7#
ID:440312 發(fā)表于 2019-6-21 09:41 | 只看該作者
有完整仿真電路嗎
回復

使用道具 舉報

8#
ID:440312 發(fā)表于 2019-6-25 09:13 | 只看該作者
liquidlin 發(fā)表于 2019-6-17 21:53
我想問一下那個定義cmd和data時的gpio是什么啊

cmd是指令,data是數(shù)據(jù),gpio在哪沒找到,還有,我猜你在做x,左右上下滾動顯示,找到能分享一下嘛
回復

使用道具 舉報

9#
ID:440312 發(fā)表于 2019-9-30 08:14 來自手機 | 只看該作者
DAFAWW 發(fā)表于 2019-6-25 09:13
cmd是指令,data是數(shù)據(jù),gpio在哪沒找到,還有,我猜你在做x,左右上下滾動顯示,找到能分享一下嘛

剛剛看到,找到了,我發(fā)了帖子,你可以去看看
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 狠狠操狠狠操 | 欧美一卡二卡在线观看 | 免费黄色的网站 | 91精品国产综合久久香蕉麻豆 | 精品国产乱码久久久久久图片 | 亚洲免费一区二区 | 古装人性做爰av网站 | 国产大毛片 | 欧美视频免费在线观看 | 国产精品五区 | 亚洲人成免费 | 免费在线观看毛片 | av官网在线 | 国产精品影视在线观看 | 免费黄色a级毛片 | 天天射影院 | 日本欧美国产在线观看 | 国产999精品久久久久久绿帽 | 盗摄精品av一区二区三区 | 久久久久www| 天天干天天干 | 中文字幕第一页在线 | 天堂一区二区三区四区 | 国产在线视频一区二区董小宛性色 | 精品国产亚洲一区二区三区大结局 | 日日爱视频 | 中文字幕在线观看一区二区 | 亚洲一区久久 | 国产在线观看一区二区三区 | 国产999精品久久久影片官网 | 国产精品久久久久久久久久久免费看 | 欧美日韩在线免费观看 | 亚洲成av人片在线观看无码 | 天天爽网站 | 久久久爽爽爽美女图片 | 亚洲高清免费 | 欧美国产91| 成人激情视频免费观看 | av网站免费 | 中文字幕高清一区 | 99看片网|