对比度控制部分电路怎么处理的? |
LCD12864仿真与现实用的LCD12864没有那一款是相同的,所以不能用仿真的代码驱动现实的LCD,你应该将你的LCD图片传上来让大家看看你用的是哪种(现实板的也有很大的不同,有有字库与无字库,驱动用的芯片也有很多不一样的) 我这有一个 #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit RS = P2^6; //(数据命令)寄存器选择输入 sbit RW = P2^5; //液晶读/写控制 sbit EN = P2^7; //液晶使能控制 sbit PSB = P3^2; //串/并方式控制 sbit RST = P3^4; //复位端 void LCD12864_init(); void delay(uint c); uchar Busy(void); //判忙 void WriteCmd(uchar cmd); //写指令 void WriteData(uchar dat); //写数据 void SetWindow(uchar x, uchar y); // SetWindow void disp(uchar *wc); //显示 uchar code zhifu1[]="相见时难别亦难,东风无力百花残。春蚕到死丝方尽,蜡炬成灰泪始干。0 "; uchar code zhifu2[]="晓镜但愁云鬓改,夜吟应觉月光寒。蓬山此去无多路,青鸟殷勤为探看。0 "; uchar code shiju1[]="黄河远上白云间,一片孤城万仞山。羌笛何须怨杨柳,春风不度玉门关。0 "; uchar code shiju2[]="两个黄鹂鸣翠柳,一行白鹭上青天。窗含西岭千秋雪,门泊东吴万里船。0 "; uchar code shiju3[]=" 千山鸟飞绝, 万径人踪灭。 孤舟蓑笠翁, 独钓寒江雪。 0 "; uchar code ci1[]="春花秋月何时了?往事知多少。 小楼昨夜又东风,故国不堪回首 0 "; uchar code ci2[]="月明中。 雕栏玉砌应犹在,只是朱颜改。 问ju能有几多愁?0 ";// 我晕!没有君! uchar code ci3[]="恰似一江春水 向东流。 0 "; uchar code zhaopin1[]=" 【招聘】 电子软件工程师: 1 名 1.要会吹牛 0 "; uchar code zhaopin2[]="2.要会勾妹仔, 多勾多得! 3.要会忽悠 赵本山十级俱佳。0 "; void disp(uchar *wc) { uchar t; t=0; SetWindow(0, 0); while(wc[t]!='\0') { WriteData(wc[t]); t++; if (t==16)SetWindow(1,0); //第一行满写第三行 if (t==32)SetWindow(2,0); //第三行满写第四行 if (t==48)SetWindow(3,0); //第三行满写第四行 } delay(5000); } void main() { uchar j=0; LCD12864_init(); while(1) { disp(&zhifu1); disp(&zhifu2); disp(&shiju1); disp(&shiju2); disp(&shiju3); disp(&ci1); disp(&ci2); disp(&ci3); disp(&zhaopin1); disp(&zhaopin2); } } void LCD12864_init() //初始化LCD12864 { PSB = 1; //选择并行输入 RST = 1; //复位 WriteCmd(0x30); //选择基本指令操作 WriteCmd(0x0c); //显示开,关光标 WriteCmd(0x01); //清除LCD12864的显示内容 } void delay(uint c) { uchar a,b; for(; c>0; c--) { for(b=199; b>0; b--) { for(a=1; a>0; a--); } } } uchar Busy(void) //判忙 { uchar i = 0; RS = 0; //选择命令 RW = 1; //选择读取 EN = 1; delay(1); while(( P0 & 0x80) == 0x80) //检测读取到的值 { i++; if(i > 100) { EN = 0; return 0; //超过等待时间返回0表示失败 } } EN = 0; return 1; } void WriteCmd(uchar cmd) //写指令 { uchar i; i = 0; while( Busy() == 0) { delay(1); i++; if( i>100) { return; //超过等待退出 } } RS = 0; //选择命令 RW = 0; //选择写入 EN = 0; //初始化使能端 P0 = cmd; //放置数据 EN = 1; //写时序 delay(5); EN = 0; } void WriteData(uchar dat) //写数据 { uchar i = 0; while( Busy() == 0) { delay(1); i++; if( i>100)return;//超过等待退出 } RS = 1; //选择数据 RW = 0; //选择写入 EN = 0; //初始化使能端 P0 = dat; //放置数据 EN = 1; //写时序 delay(5); EN = 0; } void SetWindow(uchar x, uchar y) // SetWindow { uchar con; if(x == 0) x = 0x80; // 第一行的地址是80H else if(x == 1) x = 0x90; // 第二行的地址是90H else if(x == 2) x = 0x88; // 第三行的地址是88H else if(x == 3) x = 0x98; // 98 con = x + y; WriteCmd(con); } 这几点控制点你要改成你板上的,数据口也要改 sbit RS = P2^6; //(数据命令)寄存器选择输入 sbit RW = P2^5; //液晶读/写控制 sbit EN = P2^7; //液晶使能控制 sbit PSB = P3^2; //串/并方式控制 sbit RST = P3^4; //复位端 下面是我用的12864带字库 ![]() |
参与人数 7 | 黑币 +108 | 收起 理由 |
---|---|---|
![]() | + 12 | |
![]() | + 12 | |
![]() | + 12 | |
![]() | + 12 | |
![]() | + 35 | |
![]() | + 15 | 回帖助人的奖励! |
![]() | + 10 | 回帖助人的奖励! |