[已解决]P196:关于LCD一段程序 难以明白
void define_char(byte flash *pc,byte char_code){
byte i,a;
a=(char_code<<3)|0x40;
for(i=0;i<8;i++)lcd_write_byte(a++,*pc++)
}
/*********这段程序我想了很久也想不明白,马潮老师能否详细解释一下啊*****************/【THANK YOU】 void define_char(byte flash *pc,byte char_code)/*pc是指向flash空间的字节型指针*/
{
byte i,a;
a=(char_code<<3)|0x40; /* 应该是编号,换算成LCD的地址 */
for(i=0;i<8;i++)lcd_write_byte(a++,*pc++) /* 输出字符,应为一般因为字符是8*8点阵所以输出8次 */
}
把PC指向的FLASH字符串对应的点阵数据,输出到LCD
a=(char_code<<3)|0x40;
左移3及把编号乘以8,则的字符每一列的地址
第0个字符起始地址 则LCD的地址0*8=0
第3个字符起始地址 则LCD的地址3*8=24
0x40--0b0100 0000表示这个是地址指令。要看什么LCD了。还有lcd_write_byte mljda 技术是人性------------------挺喜欢帮助人的 thankyou LZ,本专栏是讨论AVR的专栏.你问的都是C的问题.建议你把基础的东西打牢固. 马潮 老师啊 但是这个LCD的c涉及到硬件的问题啊 所以 真的看不明白 就算我看在学习的c语言书籍都是比较基础的 自从在这个论坛我问了问题之后啊 发觉自己懂了很多硬件配合软件的东西啊 但是我知道 有些人都同我一样有时里面的例子看不明啊 在学校没有人可以帮到我啊 所以 我将我的希望放到论坛上啊 所以马潮老师能体谅一下 我以后会注意点啊 HD44780器件手册.pdf里有相应的显示RAM地址,能说明程序中0x40的作用。
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_471175.jpg
LCD 16X2 显示RAM地址 (原文件名:char.jpg) 5楼解释是错的,上面的地址是显示地址DDRAM。
lcd_write_byte()是向CGRAM中写数据,(字符点阵数据),CGRAM的地址为0x40-0x7F!
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_471393.jpg
(原文件名:未标题-2 拷贝.jpg)
在下面代码中
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3)|0x40;
for(i=0;i<8;i++)lcd_write_byte(a++,*pc++)
}
char_code的值只能是0-7,左移3位是图中DB5、DB4、DB3,0x40是DB6。DB2、DB1、DB0从0-7,8个字节,放一个字符的点阵图。
===============================================
为什么不认真看HD44780手册?光盘中的资料难道没有用?代码只是是参考,是帮助学习和理解的。 我错了,张冠李戴了,刚入门看datasheet没准心, 以后要更加认真看,避免这种错误!
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_471456.jpg
CGRAM ADDRESS的说明 (原文件名:HD44780.pdf中CGRAM ADDRESS.jpg) 共64个字节放8个字符的点阵数据
页:
[1]