| 第一接线套路,二程序套路 |
|
多看几遍12864的说明书DATASHEET,将引脚功能、数据、控制 代码记熟,先排除硬件问题。再仔细校对控制时序。 static void lcd12864_write_command(uint8 cmd)/*写命令*/ { while(lcd12864_chek_busy()); LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_EN = 0; delay1us(); LCD12864_DATA = cmd; delay50us(); LCD12864_EN = 1; delay50us(); LCD12864_EN = 0; return temp1; } // 描述: lcd12864写数据 // 参数: dat:写入的数据. // 返回: none. //======================================================================== static void lcd12864_write_data(uint8 dat) { while(lcd12864_chek_busy()); LCD12864_RS = 1; LCD12864_RW = 0; LCD12864_EN = 0; LCD12864_DATA = dat; delay50us(); LCD12864_EN = 1; delay50us(); LCD12864_EN = 0; } //======================================================================== // 描述: lcd12864初始化 // 参数: none. // 返回: none. //======================================================================== void lcd12864_init() { //引脚配置 LCD12864_RS_OUT; LCD12864_RW_OUT; LCD12864_E_OUT; LCD12864_RST_OUT; LCD12864_DATA_OUT; LCD12864_RST = 1; LCD12864_RST = 0; LCD12864_RST = 1; //复位RST=1 lcd12864_write_command(0x34); //34H--扩充指令操作 delay5us(); lcd12864_write_command(0x30); //功能设置,一次送8位数据,基本指令集 delay5us(); lcd12864_write_command(0x0C); //显示状态开关:整体显示开,光标显示关,光标显示反白关 delay5us(); lcd12864_write_command(0x01); //清DDRAM delay5us(); lcd12864_write_command(0x02); //DDRAM地址归位 delay5us(); lcd12864_write_command(0x80); //设定DDRAM 7位地址000,0000到地址计数器AC delay5us(); } //======================================================================== // 描述: lcd12864设定显示位置 // 参数: X,Y:坐标. // 返回: none. //======================================================================== void lcd12864_display_pos(uint8 X,uint8 Y) { uint8 pos; if (Y==0) {Y=0x80;} else if (Y==1) {Y=0x90;} else if (Y==2) {Y=0x88;} else if (Y==3) {Y=0x98;} pos = X+Y ; lcd12864_write_command(pos); //显示地址 } //======================================================================== // 描述: lcd12864清屏 // 参数: none. // 返回: none. //======================================================================== void lcd12864_clear() { lcd12864_write_command(0x30);// lcd12864_write_command(0x01);//清除显示 delay(1); } //======================================================================== // 描述: lcd12864写单个字符 // 参数: X,Y;坐标; sig:要显示的字符. // 返回: none. //======================================================================== void lcd12864_show_char(uint8 X,uint8 Y,uint8 sig) { lcd12864_display_pos(X,Y); lcd12864_write_data(sig); //输出单个字符 } //======================================================================== // 描述: lcd12864写字符串 // 参数: X(0~3)行,Y(0~7)个字符; str:要显示的字符串; // 返回: none. //======================================================================== void lcd12864_show_string(uint8 X,uint8 Y,uint8 *str) { uint8 i = 0; lcd12864_display_pos(X,Y); while(str[i] != '\0') { lcd12864_write_data(str[i]); i++; } } //======================================================================== // 描述: lcd12864写数字() // 参数: X(0~3)行,Y(0~7)个字符; num:要显示的数字; // 返回: none. //======================================================================== void lcd12864_show_num(uint8 x,uint8 y,int num) { char men[8]; char *str = men; sprintf(str,"%d",num); lcd12864_show_string(x,y,str); } //======================================================================== // 描述: lcd12864显示图像 // 参数: p:要显示的图像. // 返回: none. //======================================================================== void lcd12864_show_image(uint8 *p) { int ygroup,x,y,i; int temp; int tmp; for(ygroup=0;ygroup<64;ygroup++) //写入液晶上半图象部分 { //写入坐标 if(ygroup<32) { x=0x80; y=ygroup+0x80; }else { x=0x88; y=ygroup-32+0x80; } lcd12864_write_command(0x34); //写入扩充指令命令 lcd12864_write_command(y); //写入y轴坐标 lcd12864_write_command(x); //写入x轴坐标 lcd12864_write_command(0x30); //写入基本指令命令 tmp=ygroup*16; for(i=0;i<16;i++) { temp=p[tmp++]; lcd12864_write_data(temp); } } lcd12864_write_command(0x34); //写入扩充指令命令 lcd12864_write_command(0x36); //显示图象 } |
| 我退货了,谢谢各位热血的朋友,就不一一回复啦 |
| 这样一般都是底层驱动对不上 |
|
如果没有老师实地指导,建议买成品的试验套件,想省钱某鱼就可以不用买全新。 套件一般都厂家有标配的例程,先搞出花样提高兴趣并且先感觉一下,然后移置到自己DIY的板上。 如果有实地指导除外,否则不同器件的接线和编程都是不一样的,对于你这种自制宝贝只能理论上点赞。 |
|
1.程序问题——占大头,所谓的教程程序一般都得修修改改才能用。 2.上面说的对比度问题 3.接线问题 这些问题都可以跟屏幕厂家沟通,都不是上面大问题 至于屏幕损坏,只要是才买的这种几率很小很小 |
| 应该是对比度的问题 |
middfat 发表于 2021-12-26 19:55 确实是,现在很难买到质量好的杜邦线了。。。 |
| 我仿佛看到了曾经的自己。首先,要在正常使用的开发板上,用原厂点屏代码测试,最好连引脚都不要动,能成功点亮了再说。然后,自己焊接的实验板,先实现正常的下载点灯都没问题了,再考虑修改移植代码。这样用杜邦线连接模块最好只用于验证,实际使用最好是画图打板,反正现在打板也是免费,顺便练习画图技能。现在万能宝上面的杜邦线质量普遍不怎么样,我已经被坑过好几次了,所以,有条件最好自己制作杜邦线,或者直接焊接。 |
|
有一个小经验:之前我玩这个12864的时候也是用的接线的方式,故障也是差不多:有背光,就是不显示。 后来搞了很久,才发现是一根接线质量差,是中间断的。走了好多弯路才纠正过来 ![]() |
Qiuhan 发表于 2021-12-26 16:59 一般都是用的LCD12864背部的可调电阻 如果想用第三个焊点VO来外接可调电阻的话需要把背部的通路断掉 |
| 12864的第三个焊点旁边有一个焊点 看看有没有焊上 加一个调节屏幕的电阻试试 10K的可调电阻 |
|
比如,你贴出来的甚至连接线都看不清楚谁跟谁。起码的液晶屏的型号,与MCU连线,以及程序全部贴好,然后大家再根据具体情况帮助你判断问题的所在。这样会更好些,不让你让大家浪费时间在这猜想,这样根本猜不出个所以然,因为问题太多了。 毕竟像贴图这种情况只需要连接背光的AK两个引脚即可。 |
| 这个如果不是某某开发板的套件加配套程序的话很难说明到底哪里除了问题,12864问题不比1602,要复杂的多,比如同一厂家的LCD12864只是后缀不同都需要不同的接线以及驱动程序,而且不同的主控芯片需要不同的初始化程序。把问题叙述的更清楚些也许更容易让大家帮助你解决问题。 |
|
单片机+ lcd12864 只蓝屏 要檢查: 1.硬件接線對嗎?(包括单片机有無正常工作 .. lcd12864接線有無問題,程式中使用管腳與接線是否相符) 2.编写的程序適合這個LCD對嗎?(LCD 12864不只一總型號..不同的型號驅動程是有差別) 3.编写的程序對嗎? 4.lcd 12864對比調整適當 5.lcd損壞 .....(這種情形相當少見) 只要不是lcd損壞 ...完成1 至 4 項 一定會顯示 |
![]() ![]() 嘿嘿嘿,你这可以把12864的程序贴出来让大家看看到底是软件的问题还是硬件的问题 |