LCD1602液晶顯示完全資料
下面給出一段字符串移動(dòng)顯示的例子:
void display_lcd_byte(uchar y,uchar x,uchar z)
{
if(y)
{
x+=0x40;
}
x+=0x80;
write(x,0);
write(z,1);
}
void display_lcd_text(uchar y,uchar x,uchar table[])
{
uchar z=0;
uchar t;
t=strlen(table)+x;
while(xt)
{
display_lcd_byte(y,x,table[z]);
x++;
z++;
}
display_lcd_byte(y,x,' ');
}
//前兩個(gè)子程序是顯示子程序
void main()
{
uchar i;
LCD1602();
init();
for(i=16;i>=0;i--) //這里的循環(huán)就是為了字符串從后往前顯示
{
display_lcd_text(0,i,table0); //i減一次,首個(gè)字符就往前去一位
delay(200);
}
while(1);
}
二、顯示自定義字符:
要想顯示自定義字符,首先就得取得想要的圖形或者字符的字模數(shù)組,可以通過(guò)手動(dòng)提取的方法,取得相應(yīng)的字模。
如下圖所示,對(duì)應(yīng)一個(gè)字符顯示區(qū)域。每8個(gè)字節(jié),組成一個(gè)點(diǎn)陣數(shù)組。
要想讓某一格子顯示就讓那一位為1,每行自定義5位,全白為0x00;全黑為0x1f。一共8行,每行一位數(shù)據(jù)。
將生成的點(diǎn)陣數(shù)組保存到CGRAM存儲(chǔ)器中,生成自定義字符。1602內(nèi)部CGRAM用于自定義的字符點(diǎn)陣的存儲(chǔ),總共64字節(jié)。由上一步點(diǎn)陣提取可知,每一個(gè)字符由8個(gè)字節(jié)數(shù)據(jù)組成。所以64字節(jié)CGRAM存儲(chǔ)器,能夠存儲(chǔ)8組自定義字符的點(diǎn)陣數(shù)組。按照CGRAM地址劃分為 0~7為第一組,8~15為第二組,依次類推56~63為第8組數(shù)據(jù)。
CHARACTER CODE是數(shù)據(jù)的顯示地址,0-7的范圍,能存儲(chǔ)8位自定義的字符。(能存八個(gè)自定義,每個(gè)字符存放的)
CGRAM ADDRESS是存儲(chǔ)數(shù)據(jù)的地址,從0-63共64個(gè)字節(jié).存儲(chǔ)64個(gè)數(shù)據(jù)。我們寫入的數(shù)據(jù)是0x40~0x7F,共128位。(把字符數(shù)組內(nèi)的8個(gè)數(shù)送進(jìn)這8個(gè)地址,每存完一個(gè)字符的8位,下次地址直接轉(zhuǎn)到0x48)
CGRAM DATA 字模每一行5位數(shù)據(jù)存
內(nèi)部常用字符顯示時(shí),顯示編碼是從0x20開始的。0x00~0x0F是專門留給自定義字符顯示的。0x00~0x07和0x08~0x0F內(nèi)容是一樣的。例如:調(diào)用0x01 位置和0x09位置,顯示的內(nèi)容是一樣的。
LCD1602自定義顯示字符的方式共四步,如下面所示:
1.設(shè)置向CGRAM中存入這個(gè)數(shù)據(jù).初始地址是0x40。然后存一位向后加8,
總共能存8位自定義的字符。
2.然后可以把自定義的數(shù)據(jù)送入到LCD的CGRAM中。
3.向LCD寫指令,送入需要顯示數(shù)據(jù)的地址。
4.向LCD寫指令,把顯示的數(shù)據(jù)指向LCD的CGRAM存儲(chǔ)的位置,顯示出自定義字符。
舉例如下:
1.建立一個(gè)字符數(shù)組;
uchar LCD_Data1[]={0x01,0x03,0x1D,0x11,0x1D,0x03,0x01,0x00};
2.設(shè)置CGRAM地址,寫指令;
Write_LCD(0x40,0);
3.把數(shù)據(jù)送入CGRAM地址內(nèi);
for(i = 0; i 8 ; i ++ )
{
Write_LCD(LCD_Data1[i],1);
}
4.寫需要顯示的位置指令;
Write_LCD(0x80,0);
5.把CGRAM的0位的數(shù)據(jù)送向LCD1602,顯示數(shù)據(jù)存儲(chǔ)的數(shù)據(jù);
Write_LCD(0x00,1);
評(píng)論