日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机(六).单片机输出电路实践——LCD1602与LCD12864的使用

發(fā)布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机(六).单片机输出电路实践——LCD1602与LCD12864的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、LCD簡介

LCD作為一種常見的外設,是廣泛應用在單片機外圍電路的一種顯示設備。LCD1602和LCD12864是典型的單片機顯示電路中常用的模塊,兩種該模塊都屬于點陣式液晶顯示模塊。

1、LCD1602模塊

1602液晶也叫160字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。1602LCD是指顯示內容為16*2,顯示兩行,每行可以顯示16個字符液晶模塊。液晶1602引腳說明如下表中所示:

編號

符號

引腳說明

編號

符號

引腳說明

1

VSS

電源地

9

D2

數(shù)據口

2

VDD

電源正極

10

D3

數(shù)據口

3

VO

液晶顯示對比度調節(jié)

11

D4

數(shù)據口

4

RS

數(shù)據/命令選擇端

12

D5

數(shù)據口

5

R/W(—)

讀寫選擇端

13

D6

數(shù)據口

6

E

使能信號

14

D7

數(shù)據口

7

D0

數(shù)據口

15

BLA

背光電源正極

8

D1

數(shù)據口

16

BLK

背光電源負極

對LCD1602有兩種操作方式,即“讀”和“寫”?!白x”操作就是讀液晶是否處于“忙”狀態(tài),如果是,就等液晶“空閑”時再往液晶“寫”(寫指令或數(shù)據)。一般情況下對于LCD1602可以不用“讀”操作,用一個短暫延時即可。液晶1602工作之前,要對1602進行一些設置。

  • Function set功能設置
    1602模塊的功能設置指令碼如下表中所示:

    RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    1

    DL

    N

    F

    -

    -

    設置模塊數(shù)據接口的寬度和1602顯示屏的顯示方式,即單片機1602模塊接口數(shù)據總線4位或8位、LCD顯示行數(shù)和顯示字符點陣的規(guī)格。DL:數(shù)據接口寬度標志。DL=1,8位數(shù)據DB7~DB0;DL=0,四位數(shù)據總線DB7~DB4;DB3~DB0不用,使用此方式傳送數(shù)據,需分兩次進行。N:顯示行數(shù)標志。N=1,雙行顯示;N=0,單行顯示方式。F:現(xiàn)實點陣字符字體標志。F=1,5*10點陣+光標顯示;F=0:5*7點陣+光標顯示方式。

  • Display on/off control(顯示開/關控制)
    1602模塊的指令代碼如下表所示:

    RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    1

    D

    C

    B

    D:顯示開/關標志。D=1,開顯示;D=0,關顯示。
    C:光標顯示控制標志。C=1,光標顯示;C=0,光標不顯示。
    B:閃爍控制標志。B=1,光標所指位置上,交替顯示全黑點陣和顯示字符,產生閃爍效果,f=250KHZ時,閃爍頻率為0.4ms左右,通過設置,光標可以與其所指位置的字符一起閃爍。

  • Entry mode set(設置輸入方式)
  • RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    0

    1

    N

    S

    N=1,當讀和寫一個字符后地址指針加1,且光標加1;N=0,當讀和寫一個字符后地址指針減1,且光標減1.

    S=1,當寫一個字符時,整屏顯示左移(N=1)或右移(N=0)。S=0,當寫一個字符時,整屏顯示不移動。

  • Clear display(清屏)

    RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    所謂清屏就是把數(shù)據指針清零和所有顯示清零

  • 2、12864模塊

    12864是128*64點陣液晶模塊的點陣數(shù)簡稱,其引腳說明如下表中所示:

    編號

    符號

    引腳說明

    編號

    符號

    引腳說明

    1

    VSS

    電源地

    11

    D4

    數(shù)據口

    2

    VDD

    電源正極

    12

    D5

    數(shù)據口

    3

    VO

    液晶顯示對比度

    調節(jié)

    13

    D6

    數(shù)據口

    4

    RS

    數(shù)據/命令選擇端(H/L)(串口片選)

    14

    D7

    數(shù)據口

    5

    R/W

    讀寫選擇端(H/L)(串口數(shù)據)

    15

    PSB

    并串選擇,H并行,L串行

    6

    E

    使能信號

    16

    NC

    懸空

    7

    D0

    數(shù)據口

    17

    RST

    復位,低電平有效

    8

    D1

    數(shù)據口

    18

    NC

    懸空

    9

    D2

    數(shù)據口

    19

    BLA

    背光電源正極

    10

    D3

    數(shù)據口

    20

    BLK

    背光電源負極

    對于液晶12864同1602也有兩種工作方式,“讀”和“寫”?!白x”操作即判斷液晶是否處于“忙”狀態(tài),一般對12864用一個短延時即可。

  • Function set 功能設置
    ?
    RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    1

    DL

    X

    0 RE

    X

    X

    DL:數(shù)據接口寬度標志。DL=1(必須是1),8位數(shù)據DB7~DB0。
    RE=1,擴充指令集動作;RE=0,基本指令集動作。
    RS和R/W均為低電平的情況下,是“寫指令”。

  • Display on/off control(顯示開/關控制)

    RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    1

    D

    C

    B

    D:顯示開/關標志。D=1,開顯示;D=0,關顯示。
    C:光標顯示控制標志。C=1,光標顯示;C=0,光標不顯示。
    B:光標位置反白開關控制位。B=1,光標位置反白ON(將光標所在處的資料反白顯示);B=0,光標位置反白OFF。

  • Clear display(清屏)

    RSR/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    同1602,清屏就是把數(shù)據指針清零和所有顯示清零。

  • 12864串行顯示
    串行工作模式下:
    CS(RS):片選信號線,進行數(shù)據操作時必須將CS端拉高。
    SCLK(R/W):串行同步時鐘,每操作一位數(shù)據都要有一個SCLK跳變沿,上升沿有效,當SCLK由低電平變?yōu)楦唠娖降乃查g,液晶將SID上的數(shù)據讀入或輸出。
    SID(EN):串行數(shù)據,每一次操作都由三個字符組成,第一個字節(jié)向控制器發(fā)送命令控制字,若為寫指令則發(fā)送1111 1000,若為寫數(shù)據則發(fā)送1111 1010。第二個字節(jié)高四位發(fā)送指令或數(shù)據的高四位,第二個字節(jié)低四位補0。第三個字節(jié)低四位發(fā)送指令或數(shù)據的低四位,第三個字節(jié)的低四位補0。

  • 漢字顯示LCD12864顯示漢字,只能顯示4行,每行顯示8個漢字或16個字符。漢字的地址分布如下: LCD12864顯示漢字,只能顯示4行,每行顯示8個漢字或16個字符。漢字的地址分布如下:

  • 第一行漢字

    0x80

    0x81

    0x82

    0x83

    0x84

    0x85

    0x86

    0x87

    第二行漢字

    0x90

    0x91

    0x92

    0x93

    0x94

    0x95

    0x96

    0x97

    第三行漢字

    0x88

    0x89

    0x8a

    0x8b

    0x8c

    0x8d

    0x8e

    0x8f

    第四行漢字

    0x98

    0x99

    0x9a

    0x9b

    0x9c

    0x9d

    0x9e

    0x9f

    二、電路設計

    以12864顯示模塊的電路為例。

    1、并行顯示電路

    2、串行顯示電路


    三、程序設計

    1、1602顯示單個數(shù)字

    #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit Lcd1602_EN=P2^5; //使能端 sbit Lcd1602_RS=P1^0; //數(shù)據命令選擇端 sbit Lcd1602_RW=P1^1; //讀寫選擇端,可以直接電路置地,只使用寫功能 void delay(uint i) {uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--); }void write_com(uchar com) { Lcd1602_RS=0;//命令Lcd1602_RW=0;//寫Lcd1602_EN=0;P0=com; delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0; } void write_data(uchar dat) {Lcd1602_RS=1;Lcd1602_RW=0;Lcd1602_EN=0;P0=dat;delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0; } void Lcd_Init() { write_com(0x38);//16*2顯示,8位數(shù)據接口write_com(0x0c);//顯示器開,光標開,光標閃爍write_com(0x06);//顯示字符不動,光標右移write_com(0x01);//清屏 } void display(uchar c,int v)//顯示一個三位的數(shù)字 {uint shu;write_com(c);write_com(0x80);//設置第一行第一列寫shu=v/100;write_data(shu+'0');shu=v%100/10;write_data(shu+'0');shu=v%10;write_data(shu+'0');} void main() {int v;v=789;Lcd_Init();while(1){display(0x80,v);} }

    2、1602顯示單個字符

    #include <reg52.h> #include "LCD1602.h" uchar table[]={"www.baidu.com"}; uchar num; void display(int v) {int shu;write_com(0x80);for(num=0;num<13;num++){write_data(table[num]);delay(5);}write_com(0x80+40);shu=v/100;write_data(shu+'0');shu=v%100/10;write_data(shu+'0');shu=v%10;write_data(shu+'0');write_data(0xdf);write_data('C');delay(5); } void main() {uint v;Lcd_Init();while(1){v=100;display(v);} }//lcd1602.h文件 #ifndef _LCD1602_ #define _LCD1602_ #define uchar unsigned char #define uint unsigned int sbit Lcd1602_EN=P2^5; //ê1?ü?? sbit Lcd1602_RS=P1^0; //êy?Y?üá??????? sbit Lcd1602_RW=P1^1; //?áD′??????,?éò??±?óμ??·??μ?£???ê1ó?D′1|?üvoid delay(uint i){uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){ Lcd1602_RS=0;//?üá?Lcd1602_RW=0;//D′Lcd1602_EN=0;P0=com; delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0;}void write_data(uchar dat){Lcd1602_RS=1;Lcd1602_RW=0;Lcd1602_EN=0;P0=dat;delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0;}void Lcd_Init(){ write_com(0x38);//16*2??ê?£?8??êy?Y?ó?úwrite_com(0x0c);//??ê??÷?a£?1a±ê?a£?1a±êéá??write_com(0x06);//??ê?×?·?2??ˉ£?1a±êóòò?write_com(0x01);//???á}#endif

    3、12864顯示漢字

    #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit RS=P1^0; sbit RW=P1^1; sbit EN=P2^5; sbit PSB=P1^2; uchar code table1[]={"人生若只如初見,"}; uchar code table2[]={"何事秋風悲畫扇。"}; uchar code table3[]={"等閑變卻故人心,"}; uchar code table4[]={"卻道故人心易變。"}; void delay(uint i) {uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--); } void write12864_cmd(uchar cmd) {RS=0;RW=0;EN=0;P0=cmd;delay(5);EN=1;delay(5);EN=0; } void write12864_data(uchar dat) {RS=1;RW=0;EN=0;P0=dat;delay(1);EN=1;delay(1);EN=0; } void lcd12864_init() {PSB=1;write12864_cmd(0x30);//設置數(shù)據寬度為8位delay(5);write12864_cmd(0x0c);//開顯示delay(5);write12864_cmd(0x01);//清屏delay(5); } void lcd_pos(uchar x,uchar y)//顯示位置坐標 {uchar pos;if(x==0){x=0x80;}else if(x==1){x=0x90;}else if(x==2){x=0x88;}else if(x==3){x=0x98;}pos=x+y;write12864_cmd(pos); } void main() {lcd12864_init();while(1){uchar i;lcd_pos(0,0);for(i=0;i<16;i++){write12864_data(table1[i]);}lcd_pos(1,0);for(i=0;i<16;i++){write12864_data(table2[i]);}lcd_pos(2,0);for(i=0;i<16;i++){write12864_data(table3[i]);}lcd_pos(3,0);for(i=0;i<16;i++){write12864_data(table4[i]);}} }

    4、12864串行顯示程序

    #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit CS=P1^0; sbit SCLK=P1^1; sbit SID=P2^5; sbit PSB=P1^2; uchar code table1[]={"人生若只如初見,"}; uchar code table2[]={"何事秋風悲畫扇。"}; uchar code table3[]={"等閑變卻故人心,"}; uchar code table4[]={"卻道故人心易變。"}; void delay(uint i) {uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--); } void sendbyte(uchar zdata)//根據液晶串口通信協(xié)議,發(fā)送數(shù)據 {uint i;for(i=0;i<8;i++){if((zdata<<i)&0x80){SID=1;}else{SID=0;}SCLK=0;SCLK=1;} } void write12864_com(uchar cmdcode) {CS=1;sendbyte(0xf8);//寫指令sendbyte(cmdcode&0xf0);//指令高四位sendbyte((cmdcode<<4)&0xf0);//低四位delay(1); } void write12864_data(uchar dispdata) {CS=1;sendbyte(0xfa);//寫數(shù)據sendbyte(dispdata&0xf0);//數(shù)據高四位sendbyte((dispdata<<4)&0xf0);//低四位delay(1); } void lcd12864_init() {PSB=0;write12864_com(0x30);delay(5);write12864_com(0x0c);delay(5);write12864_com(0x01);delay(5); } void lcd_pos(uchar x,uchar y)//顯示位置坐標 {uchar pos;if(x==0){x=0x80;}else if(x==1){x=0x90;}else if(x==2){x=0x88;}else if(x==3){x=0x98;}pos=x+y;write12864_com(pos); } void display(uchar *s) {while(*s>0){write12864_data(*s);s++;delay(1);} } void main() {lcd12864_init();while(1){ lcd_pos(0,0);display(table1);lcd_pos(1,0);display(table2);lcd_pos(2,0);display(table3);lcd_pos(3,0);display(table4);} }






    ?

    總結

    以上是生活随笔為你收集整理的51单片机(六).单片机输出电路实践——LCD1602与LCD12864的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。