1、時序圖 2、代碼 3、自定義字符 時序圖


代碼:
#include <reg51.h> #include<intrins.h> sbit RS = P2^4; //定義端口 sbit RW = P2^5; sbit EN = P2^6; void Delayus(unsigned char t) // us級別延時 { while(--t); } void Delayms(unsigned char t)// ms級別延時 { while(t--) { //大致延時1mS Delayus(245); Delayus(245); } } bit m_1602() //判斷1602是否忙 { P0 = 0xFF; //準(zhǔn)備讀取 RS = 0; RW = 1; EN = 0; _nop_(); EN = 1; //產(chǎn)生高電平 return (bit)(P0 & 0x80); } void x_1602(bit i,unsigned char j) //參數(shù)一是寫(0、寫指令 1、寫數(shù)據(jù)),參數(shù)二是寫入的8位數(shù)據(jù) { while(m_1602()) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } RS = i; RW = 0; EN = 1; P0 = j; _nop_(); EN = 0; //產(chǎn)生下降沿 } void qp_1602() //清屏函數(shù) { x_1602(0,0x01); //第一個參數(shù)是:寫入的類型(0、寫指令 1、寫數(shù)據(jù)),第一個參數(shù)是:寫入的數(shù)據(jù) Delayms(5); } //顯示字符 void zf_1602(unsigned char x,unsigned char y,unsigned dat) //參數(shù)一是顯示的列,參數(shù)二是顯示的行,參數(shù)三是顯示的數(shù)據(jù) { if(y==0) { x_1602(0,(0x80+x)); //第一行 } else { x_1602(0,(0xc0+x)); //第二行 } x_1602(1,dat); //寫入數(shù)據(jù) } void zfc_1602(unsigned char x,unsigned char y,unsigned char *dat) { if(y==0) { x_1602(0,(0x80+x)); //第一行 } else { x_1602(0,(0xc0+x)); //第二行 } while(*dat) //&:取地址 *:取值 { x_1602(1,*dat); dat ++; } } void csh_1602() //初始化1602 { x_1602(0,0x38); //顯示模式設(shè)置 Delayms(5); x_1602(0,0x38); Delayms(5); x_1602(0,0x38); Delayms(5); x_1602(0,0x38); x_1602(0,0x08); //顯示關(guān)閉. x_1602(0,0x01); //顯示清屏 x_1602(0,0x06); //顯示光標(biāo)移動設(shè)置 Delayms(5); x_1602(0,0x0c); //顯示開及光標(biāo)設(shè)置 } void main() { csh_1602(); qp_1602(); while(1) { zf_1602(0,0,'Q'); //寫入字符 zf_1602(1,0,'Q'); //寫入字符 zf_1602(2,0,' '); //寫入字符 zfc_1602(3,0,"www.baidu.con"); //寫入字符串 zfc_1602(1,1,"1990.02.08"); //寫入字符串 while(1); } }
自定義字符 (轉(zhuǎn))
圖示:
 用戶自定義字符的應(yīng)用: 我們從CGROM表上可以看到,在表的最左邊是一列可以允許用戶自定義的CGRAM,從上往下看著是16個,實際只有8個字節(jié)可用。它的字符碼是 00000000-00000111這8個地址,表的下面還有8個字節(jié),但因為這個CGRAM的字符碼規(guī)定0-2位為地址,3位無效,4-7全為零。因此 CGRAM的字符碼只有最后三位能用也就是8個字節(jié)了。等效為0000X111,X為無效位,最后三位為000-111共8個。 如果我們要想顯示這8個用戶自定義的字符,操作方法和顯示CGROM的一樣,先設(shè)置DDRAM位置,再向DDRAM寫入字符碼,例如“A”就是41H。現(xiàn)在我們要顯示 CGRAM的第一個自定義字符,就向DDRAM寫入00000000B(00H),如果要顯示第8個就寫入00000111(08H),簡單吧! 好!現(xiàn)在我們來看怎么向這八個自定義字符寫入字模。有個設(shè)置CGRAM地址的指令如下圖:  從這個指令可以看出指令數(shù)據(jù)的高2位已固定是01,只有后面的6位是地址數(shù)據(jù),而這6位中的高3位就表示這八個自定義字符,最后的3位就是字模數(shù)據(jù)的八個地址了。例如第一個自定義字符的字模地址為01000000-01000111八個地址。我們向這8個字節(jié)寫入字模數(shù)據(jù),讓它能顯示出“℃” 地址:01000000 數(shù)據(jù):00010000 圖示: ○○○■○○○○ 01000001 00000110 ○○○○○■■○ 01000010 00001001 ○○○○■○○■ 01000011 00001000 ○○○○■○○○ 01000100 00001000 ○○○○■○○○ 01000101 00001001 ○○○○■○○■ 01000110 00000110 ○○○○○■■○ 01000111 00000000 ○○○○○○○○
|