今天边学习边抄,自己修改了一个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
- }
- }
复制代码
|