NIOS-II+Ucos-ii+lcd12864调试很几天,还是不明白,所以请求大家一起帮帮忙,谢谢了
[复制链接]
我的系统时钟是100M 现在有时可以显示,但有时又不能显示,显示还乱码 软件代码如下:
//检测忙 void Check_Busy(void) { CLR_RS; SET_RW; SET_E; while((READ_DATA & 0x80) == 0X80); // printf("Hello111111\n"); CLR_E; }
//写数据 void Write_Data(uchar dat) { Check_Busy(); SET_RS; CLR_RW; CLR_E; SET_E; WRITE_DATA(dat); CLR_E; OSTimeDlyHMSM(0, 0, 0, 1); }
//写命令 void Write_Cmd(uchar cmd) { Check_Busy(); CLR_RS; CLR_RW; CLR_E; SET_E; WRITE_DATA(cmd); CLR_E; OSTimeDlyHMSM(0, 0, 0, 1); }
//读数据 uchar Read_Data(void) { uchar temp_data; Check_Busy(); WRITE_DATA(0XFF); SET_RW; SET_RS; SET_E; CLR_E; SET_E; temp_data = READ_DATA; CLR_E; OSTimeDlyHMSM(0, 0, 0, 1); return temp_data; }
void lcd_init() { OSTimeDlyHMSM(0, 0, 0, 10); Write_Cmd(0x30); //基本指令操作 OSTimeDlyHMSM(0, 0, 0, 1); Write_Cmd(0x30); //基本指令操作 OSTimeDlyHMSM(0, 0, 0, 1); Write_Cmd(0x0f); //光标操作 OSTimeDlyHMSM(0, 0, 0, 1); Write_Cmd(0x10); //光标操作 OSTimeDlyHMSM(0, 0, 0, 1); Write_Cmd(0x01); //清屏 OSTimeDlyHMSM(0, 0, 0, 100); // Write_Cmd(0x04); }
void LCD_12864_WrChar(uchar x, uchar y, uchar *dat, uchar n) { uchar addr; uchar i; switch(x) { case 0: addr = 0x80; break; case 1: addr = 0x90; break; case 2: addr = 0x88; break; case 3: addr = 0x98; break; } addr += y; Write_Cmd(addr); for(i = 0; i < 2*n; i++) { Write_Data(dat); } }
主函数: 如果把初始化和显示放在死循环里,就会显示,但不能正常显示,其他位置也显示了乱码 如果放在while(1)的外面,就不能显示了 我是问问我的程序有问题吗 还有我的硬件需要注意那些地方,比如LCD的reset脚和PSB脚之类的
比如这样 void task1(void* pdata) { lcd_init(); Write_Cmd(0x80); Write_Data("8"); // OSTimeDlyHMSM(0, 0, 5, 0); //lcd_init(); //LCD_12864_WrChar(2, 0, str, 7); while (1);
根本就不会显示 放在死循环里面会显示,但是乱码
[ 本帖最后由 tpengti 于 2012-4-18 10:39 编辑 ]
|