Board logo

标题: lcd程序,大家看看有什么问题啊? [打印本页]

作者: szq_qian@eyou.c    时间: 2005-8-10 22:27     标题: lcd程序,大家看看有什么问题啊?

大家好,问一下,有谁用过带T6963C控制器的液晶屏阿,我在nios下,用J2端和液晶相连,用io口模拟液晶需要的时序,但是,怎么都没有显示。能否给点指点?关于连线,我用的是up3板子J2的4脚为wr 5脚为rd,6脚为c/d.lcd的ce直接接地。剩下的管脚给了8根数据线。 下面是程序,大家给指正一下阿。 #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "sys/alt_timestamp.h" #include #include #include #include #define us 10000 void init() //initialize the lcd pio before use it { IOWR(LED_PIO_BASE, 0, 1); usleep(1000000); IOWR(LED_PIO_BASE, 0, 0); //测试led的灯亮不亮。 IOWR(LCD_WR_BASE, 0, 1); IOWR(LCD_CD_BASE, 0, 1); IOWR(LCD_RD_BASE, 0, 1); //IOWR(LCD_DATA_BASE, 0, 0xff); } int read_state(void) // read state { int state =0; IOWR(LCD_CD_BASE, 0, 1); // IOWR(LCD_RD_BASE, 0, 1); IOWR(LCD_WR_BASE, 0, 1); IOWR(LCD_RD_BASE, 0, 0); asm(" nop "); asm(" nop "); asm(" nop "); //usleep(1); state = IORD(LCD_DATA_BASE,0); IOWR(LCD_RD_BASE,0,1); usleep(1); return (state); } void check_state() //检查状态字的第0、1位是否为1,为1的时候才能写 { while ((read_state()&0x03)!=3) ; } void check_state_auto_wr()//检查自动写状态是否满足,第3位为1的时候可以写 { while ((read_state()&0x80)!=8) ; } void lcd_wr_cmd(int writedata) //写命令 { check_state(); IOWR(LCD_RD_BASE, 0, 1); IOWR(LCD_WR_BASE, 0, 1); IOWR(LCD_CD_BASE, 0, 1); IOWR(LCD_DATA_BASE, 0, writedata); IOWR(LCD_WR_BASE, 0, 0); usleep(2); IOWR(LCD_WR_BASE, 0, 1); IOWR(LCD_CD_BASE, 0, 1); usleep(us); } void lcd_wr_data(int writedata)//写数据 { check_state(); IOWR(LCD_RD_BASE, 0, 1); IOWR(LCD_CD_BASE, 0, 0); //usleep(1); IOWR(LCD_DATA_BASE, 0, writedata); IOWR(LCD_WR_BASE, 0, 0); usleep(2); IOWR(LCD_WR_BASE, 0, 1); // usleep(1); IOWR(LCD_CD_BASE, 0, 1); usleep(us); } void lcd_wr_data_auto(int writedata)//自动写数据 { check_state_auto_wr(); //IOWR(LCD_RD_BASE, 0, 1); IOWR(LCD_CD_BASE, 0, 0); //usleep(1); IOWR(LCD_DATA_BASE, 0, writedata); IOWR(LCD_WR_BASE, 0, 0); usleep(us); IOWR(LCD_WR_BASE, 0, 1); // usleep(1); asm("nop"); IOWR(LCD_CD_BASE, 0, 1); usleep(us); } void clear() { long i; lcd_wr_data(0x00); lcd_wr_data(0x00); lcd_wr_cmd(0x24);//地址指针 lcd_wr_cmd(0xb0);//自动写打开 for (i=0;i<65535;i++) { lcd_wr_data_auto(0xf0); } lcd_wr_cmd(0xb2);//自动写关闭 } void lcd_display() // { long i; init(); clear(); lcd_wr_cmd(0x88);// display modle.graphic and using cgram lcd_wr_data(0x00);//graphic first address lcd_wr_data(0x00); lcd_wr_cmd(0x42); lcd_wr_data(0x20);//width of the graphic lcd_wr_data(0x00); lcd_wr_cmd(0x43); lcd_wr_cmd(0x98); //graphic display enable /*lcd_wr_data(0x00);//course of the address lcd_wr_data(0x1c); lcd_wr_cmd(0x24);*/ lcd_wr_cmd(0xb0);//auto write for (i=0;i<30720;i++) { lcd_wr_data_auto(0x00);//可以写00或0f测试。 } lcd_wr_cmd(0xb2);//自动写关闭 } void main(void) { lcd_display(); } 先谢谢了

[此贴子已经被作者于2005-8-10 22:27:22编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0