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