|
今天邊學(xué)習(xí)邊抄,自己修改了一個(gè)C語(yǔ)言函數(shù),有個(gè)疑問(wèn),這個(gè)效果是在lcd指定的行,列顯示字符,
比如void display_charE8x16(0,0,“abc”) 就會(huì)在lcd 0行,0列顯示個(gè)abc;
有個(gè)問(wèn)題想不明白,為啥必須加上while(*dp)循環(huán),而且下面dp都++了,為啥循環(huán)了abc三次后就退出循環(huán)了?這個(gè)時(shí)候*dp等于0了?
不加while循環(huán),只能顯示a,也就是字符串第一個(gè)。
- void display_charE8x16(unsigned char y,unsigned char x,unsigned char *dp)
- {
- unsigned char i,j,z,mono_data;
- while(*dp) //
- {
- j = *dp - 0x20;//獲取當(dāng)前ascii字符減32后的值
- for(i=0;i<16;i++)
- {
- set_lcd_address(y+i,x); //定位起始字符在屏幕的位置。
- mono_data=ASCII16[j*16+i]; //j*16是定位ascii字符在A(yíng)SCII16[]數(shù)組中的起始位置。
- for(z=3;z>0;z--)
- {
- data16bit(mono_data>>(z*3-3)); //整體分別移位6 3 0 共移動(dòng)3次 取移動(dòng)后最后三位 3bit
- }
- }
- dp++;
- x+=3; //每次列加3
- }
- }
復(fù)制代碼
|
|