lcd1602 屏驅(qū)動(自定義字符)
//顯示字符
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);
}
}本文引用地址:http://m.butianyuan.cn/article/201612/324241.htm
自定義字符 (轉(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?,F(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 ○○○○○○○○
評論