以下是液晶屏的工作原理及其編程
下面是一個(gè)簡單的字符顯示程序
//改程序?qū)?shí)現(xiàn)簡單的靜態(tài)數(shù)據(jù)
![]() //每次進(jìn)行讀寫操作之前,必須進(jìn)行讀寫檢測 #include <reg52.h>
#include <intrins.h> //包含了空操作_nop_ #define uchar unsigned char #define Data P0 //管腳的聲明
sbit RS = P2^1; sbit RW = P1^5; sbit E = P1^6; //用到的函數(shù)聲明
void Delay(uchar); //延時(shí)函數(shù) void Init(); //初始化函數(shù) void Busy(); //忙時(shí)檢測 void WriteCommand(uchar); //寫指令 void WriteData(uchar); //寫數(shù)據(jù) void Display(uchar); //顯示信息 void main() { Init(); Display(0x04); //將顯示地址指定為第一行第五列 //顯示Apple WriteData('A'); WriteData('p'); WriteData('p'); WriteData('l'); WriteData('e'); while(1); } void Delay(uchar i)
{ uchar j; for(; i > 0; i --) for(j = 155; j > 0; j --); //最少延時(shí)1ms } void Busy() { Data = 0xff; RS = 0; //根據(jù)規(guī)定:RS = 0, RW = 1可讀取狀態(tài) RW = 1; E = 1; //允許讀寫 _nop_(); _nop_(); _nop_(); //空操作三個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 //進(jìn)行忙時(shí)檢測 while(Data & 0x80); //檢測到忙時(shí),繼續(xù)檢測【Data&0x80 = 1表示忙】 E = 0; } //寫命令函數(shù)
void WriteCommand(uchar i) { Delay(5); //操作前進(jìn)行短暫的延時(shí) Busy(); //在閑時(shí)才能寫指令 RS = 0; //根據(jù)規(guī)定,RS = 0; RW = 0;才能寫入指令 RW = 0; E = 0; //寫指令時(shí),E應(yīng)為高脈沖,就是讓E從0到1發(fā)生整跳變,所以在這給E制0 _nop_(); _nop_(); //兩個(gè)空操作給硬件一定的反映時(shí)間 Data = i; //寫指令 _nop_(); _nop_(); _nop_(); E = 1; //E制高電平 _nop_(); _nop_(); _nop_(); E = 0; //當(dāng)E從高電平變?yōu)榈碗娖綍r(shí),液晶模塊開始執(zhí)行指令 } //寫數(shù)據(jù)函數(shù)
void WriteData(uchar j) { Delay(5); //操作前進(jìn)行短暫的延時(shí) Busy(); //閑時(shí)檢測 RS = 1; //根據(jù)規(guī)定:RS = 1;RW = 0才能寫入數(shù)據(jù) RW = 0; E = 0; //在寫指令/數(shù)據(jù)時(shí),E應(yīng)為高脈沖,也就是要讓E從0到1發(fā)生跳變,所以在這里給E賦0 _nop_(); _nop_(); //兩個(gè)空操作給硬件一定的反映時(shí)間 Data = j; //寫指令 _nop_(); _nop_(); _nop_(); E = 1; //E制高電平 _nop_(); _nop_(); _nop_(); E = 0; //當(dāng)E從高電平變?yōu)榈碗娖綍r(shí),液晶模塊開始執(zhí)行指令 } void Init() { Delay(15); //延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長的反應(yīng)時(shí)間 WriteCommand(0x01); //【清屏設(shè)置】 Delay(5); //延時(shí)5ms WriteCommand(0x06); //【輸入方式設(shè)置】光標(biāo)從左向右移動(dòng),內(nèi)容不移動(dòng) Delay(5); //延時(shí)5ms WriteCommand(0x0f); //【顯示開關(guān)設(shè)置】顯示開,有光標(biāo),字符閃爍 Delay(5); //延時(shí)5ms WriteCommand(0x38); //【功能設(shè)置命令】8位數(shù)據(jù),雙行顯示,選擇5*7點(diǎn)陣 Delay(5); //延時(shí)5ms } void Display(uchar addr)
{ addr += 0x80; //第一行顯示地址的確定方法 WriteCommand(addr); } |
|