51微控制器液晶顯示計時器

2021-06-08 19:59:33 字數 2849 閱讀 2073

要想實現人機互動,顯示裝置是不可缺少的。前面講到了如何利用微控制器控制數碼管的顯示,這篇文章主要關於如何控制液晶顯示,並在此基礎上加上定時器的功能,把原來已用數碼管顯示的定時器搬到液晶屏上來。

這裡用到的液晶為lcd1602,能夠同時顯示16x02即32個字元(16列2行)。1602液晶模組內部的字元發生儲存器(cgrom)已經儲存了160個不同的點陣字元圖形,這些字元有:阿拉伯數字、英文本母的大小寫、常用的符號等,直接向其寫入ascii碼即可顯示相應字元。1602共16個 管腳,管腳功能如下:

實際應用時,所用液晶模組與微控制器的連線圖如下:

其中7~14管腳為io,與微控制器的p0口相接,微控制器可通過向p0口傳送資料被液晶模組並行接收。

4管腳為資料命令選擇端,與微控制器p3^5口相連。故可通過控制p3^5口的電平高低,向液晶模組寫入命令或資料。由資料手冊得知,

寫指令時,rs=l,rw=l,d0~d7為指令碼,e管腳為一高電平脈衝;

寫資料時,rs=h,rw=l,d0~d7為資料,e管腳也為一高電平脈衝。

p3^4與液晶模組6管腳相連,控制液晶模組使能。

首先介紹液晶模組的指令。

初始化指令0x38:設定液晶為16x2顯示。

顯示開關及游標設定:

00001dcb     d=1,開顯示;

c=1。顯示游標;

b=1,游標閃爍。

000001ns      n=1,讀寫乙個字元後位址指標加1,游標加1;

n=0,讀寫乙個字元後位址指標減1,游標減1

s=1,寫乙個字元時,整屏顯示向左移動(n=1)或右移(n=0)

s=0,不移動

資料寫入控制指令:

lcd模組中的ram位址對映如下

要想把資料寫入x位址,則先要輸入指令0x80+x;

例如想讓字元顯示在第二行的第乙個,則在將字元傳入前,要寫入指令write_command(0x80+0x40)

此外,0x01h表示顯示清屏,資料指標清零,所有顯示清零;

0x02h表示顯示回車,資料指標清零。

了解了這些之後,可以知道如果我們想要控制液晶的顯示,就要先學會怎樣向液晶寫指令和寫資料。

寫指令函式

//向lcd1602寫指令

void write_com(uchar com)

寫資料的方法與此類似,照葫蘆畫瓢即可:

//向lcd1602寫資料

/*只需要將rs置高即可,

其他語句與寫指令函式相同

*/void write_date(uchar date)

有了這兩個函式,我們就可以向液晶模組裡面寫入指令和資料,從而實現對其的控制了。

為了實現乙個完整的對lcd1602功能的封裝體現,我們還要再寫乙個初始化的函式,用於對ls1602的初始化工作

void inital()

至此,就完成了對lcd1602的功能封裝,在其他的程式中,就可以使用這些函式用於液晶顯示,例如下面實現的用1602顯示計時器。

計時器量程為1小時,顯示格式為xx:xx(前面為分,後面為秒)

用到了微控制器中的計時器0,工作方式1,。50ms發生一次中斷,使乙個用於計數的number自增一次。number初值設為1,故number自增至20時,說明計時1s已到,可以do something,也就是把處理函式加進來了。

c檔案如下:

#include #define uchar   unsigned char

#define uint unsigned int

sbit lcden=p3^4;

sbit lcdrs=p3^5;

uchar num=1;

uchar miao=0;

uchar fen=0;

void inital();

void inital_time();

void write_com(uchar com);

void write_date(uchar date);

void delay(uchar time);

void clock();

void display(uchar x,uchar y);

void main()

}}//在lcd上顯示分,秒

void display(uchar x,uchar y)

//1s到時對計時器(也就是fen,miao變數)的處理函式

void clock()

//1h,重新開始

if(fen>=60) }

//中斷服務函式,num自增,重新裝載初值

void ser_timer0() interrupt 1

//lcd1602初始化

void inital()

//定時器初始化

void inital_time()

//向lcd1602寫指令

void write_com(uchar com)

//向lcd1602寫資料

/*只需要將rs置高即可,

其他語句與寫指令函式相同

*/void write_date(uchar date)

void delay(uchar time)

}

51微控制器 1602液晶顯示

1602的第1個管腳為vss,vss s series 表示公共連線的意思,通常指電路公共接地端電壓。15管腳為背光電源正極,為防止加5v電壓燒壞背光燈,通常串接1個10 電阻限流。1602靜態顯示 基本程式 include define lcd1602 datapins p0 define uch...

51微控制器 1602液晶顯示

1602的第1個管腳為vss,vss s series 表示公共連線的意思,通常指電路公共接地端電壓。15管腳為背光電源正極,為防止加5v電壓燒壞背光燈,通常串接1個10 電阻限流。1602靜態顯示 基本程式 include define lcd1602 datapins p0 define uch...

微控制器的1602液晶顯示

以上是我認為控制1602液晶比較重要的,必須要我們懂的 下面是我寫得到乙個程式 include define uchar unsigned char define uint unsigned int uchar code table1 uchar code table2 sbit lcdrs p2 ...