关于ST7567 12864串口液晶屏不现实问题
小弟用PIC 18F4620控制 ST7567 12864串口液晶,一直都不显示。。考虑了很多原因,但还是不行,硬件方面也找过,也一切ok,测屏的端口,时钟,片选。RS端都正常,可还是不显示。。8MHZ晶振。各位大哥看到了帮小弟分析分析。
[解决办法]
给你思路,先抛开 PIC的影响,直接连到PC上,用串口调试工具发数据试试。
[解决办法]
//串行模式发送数据void data_send(unsigned char dat) { unsigned char s,temp; int i; sclk=0; waittime(); s=dat; for(i=8;i>0;i--){ sclk=0; waittime(); waittime(); temp=s & 0x80; if(temp){ di=1; }else{ di=0; } sclk=1; waittime(); s=s<<1; }} /*************************************************///写命令,串行模式/*************************************************/void w_coms(unsigned char x) { a0=0; cs1=0; data_send(x);} /*************************************************///写数据,串行模式/*************************************************/void wdatas(unsigned char dat) { a0=1; cs1=0; data_send(dat); } /*************************************************/ //写命令,通过P3.0 和P3.1 选择用何种驱动程序/*************************************************/ void w_com(unsigned char x){ c86=0; //串口模式下无效 ps=0; //串口方式 w_coms(x); } /*************************************************///写数据/*************************************************/void wdata(unsigned char dat) { c86=0; ps=0; wdatas(dat);} void display_map(void){ unsigned int i=0; unsigned char page=0; unsigned char colh=0; unsigned char coll=0; page=0xB0; for(i=0;i<1024;i++) // 写页地址共8 页0xb0----0xb8 { w_com(page); w_com(0x10|colh); // 列地址,高低字节两次写入,从第0 列开始 w_com(coll); wdata(niu[i]); coll++; if(coll>15){ coll=0; colh++; if(colh>=8){ colh=0; page++; } } }}void waittime(void){ nop();}//清屏操作void LCD_CLS(void){ unsigned char seg; unsigned char page; for(page=0xb0;page<0xb9;page++) // 写页地址共8 页0xb0----0xb8 { w_com(page); w_com(0x10); // 列地址,高低字节两次写入,从第0 列开始 w_com(0x00); for(seg=0;seg<128;seg++)//写128 列 { wdata(0x00); } } }//设置屏幕void LCD_Set(unsigned char page,unsigned char col,unsigned char newData){ unsigned char ColH=0x10; unsigned char tempH=0; unsigned char ColL=0x00; unsigned char tempL=0; unsigned char temppage; unsigned char i; tempH=col; for(i=0;i<4;i++) tempH=tempH>>1; tempL=col; for(i=0;i<4;i++) tempL=tempL<<1; for(i=0;i<4;i++) tempL=tempL>>1; ColH=ColH|tempH; ColL=ColL|tempL; temppage=0xB0; temppage=temppage|page; w_com(temppage); w_com(ColH); // 列地址,高低字节两次写入,从第0 列开始 w_com(ColL); wdata(newData);}/*************************************************/ /*主程序/*************************************************/ void LCD_Initialize(void) { rst=0; waittime(); waittime(); rst=1; w_com(0xAF); //ON DISPLAY w_com(0x40); //STAR DISPLAY w_com(0xA0); //ADC NORMAL w_com(0xA6); // w_com(0xA4); //CLEAR w_com(0xA2); //1/9BIAS w_com(0xC8); //COMMON OUTPUT DIRECTION w_com(0x2F); //POWER CONTROL w_com(0x24); //RESISTER RATIO w_com(0x81); //VOLUM MODE SET w_com(0x24); //RESISTER RATIO display_map(); // 显示一副SCH 图案 }
[解决办法]
你没初始化