完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 yanxuerui 于 2011-5-4 14:28 编辑 need you now! 在写LCD显示程序遇到的问题: 下面是程序部分代码: #define uchar unsigned char #define uint unsigned int #define lcdport P1 #define LCDSTARTROW 0xC0 //设置起始行指令 #define LCDPAGE 0xB8 //设置页指令 #define LCDLINE 0x40 //设置列指令 ***it BUSYSTATUS=P1^7; ***it RST=P2^0; ***it E=P2^1; ***it RW=P2^2; ***it DI=P2^3; ***it CS2=P2^4; ***it CS1=P2^5; void delay_1(uint r) { uint s; while(r--) { for(s=110;s>0;s--); } } uchar checkbusy() { lcdport=0xff; RW=1; DI=0; E=1; E=0; return BUSYSTATUS; } void WriteCMD(uchar uCMD) { while(checkbusy()); lcdport=0xff; RW=0; DI=0; lcdport=uCMD; E=1; E=0; } void WriteData(uchar uDAT) { while(checkbusy()); lcdport=0xff; RW=0; DI=1; lcdport=uDAT; E=1; E=0; } void LCD_Init() { RST=0; delay_1(10); RST=1; E=1; CS1=1; CS2=1; WriteCMD(0x38); //显示方式 WriteCMD(0x3f); //开显示 WriteCMD(0x01); //清屏 WriteCMD(LCDSTARTROW); } void SetStartLine(uchar urow) //设置显示起始行 { WriteCMD(LCDSTARTROW+urow); } void SetPage(uchar upage) { WriteCMD(LCDPAGE+upage); } void SetColumn(uchar ucusor) { WriteCMD(LCDLINE+ucusor); } void Dsp(uchar p[16],uchar q) { uchar count,b[16]; if(q==1) { CS1=1; CS2=0; for(count=0;count<16;count++) { b[count]=*(p+count); WriteData(b[count]); } } else { CS1=0; CS2=1; for(count=0;count<16;count++) { b[count]=*(p+count); WriteData(b[count]); } } } void delay(uchar w) { uint y; while(w--) { for(y=125;y>0;y--); } } void main() { LCD_Init(); while(1) { uchar i; for(i=0;i<4;i++) { SetPage(0); //设置从第0页显示 SetColumn(i<<4); //显示一次,显示列位置向右移动16个单元 Dsp(QING_SHU_1,1); //输入“你好! 请”上半部分 通过CS1,CS2控制 SetPage(1); SetColumn(i<<4); Dsp(QING_SHU_2,1); //输入“你好! 请”下半部分 通过CS1,CS2控制 delay(200); } for(i=0;i<4;i++) { SetPage(0); SetColumn(i<<4); Dsp(QING_SHU_1[i+4],2); //输入“输入密码”下半部分 通过CS1,CS2控制 SetPage(1); SetColumn(i<<4); Dsp(QING_SHU_2[i+4],2); //输入“输入密码”下半部分 通过CS1,CS2控制 delay(200); } for(i=0;i<4;i++) { SetPage(6); SetColumn(i<<4); Dsp(QING_CHU_1,1); //显示“‘C’清除“的上半部分 SetPage(7); SetColumn(i<<4); Dsp(QING_CHU_2,1); //显示“‘C’清除“的下半部分 delay(200); } for(i=0;i<4;i++) { SetPage(6); SetColumn(i<<4); Dsp(QING_CHU_1[i+4],2); //显示”‘=’确认“的上半部分 SetPage(7); SetColumn(i<<4); Dsp(QING_CHU_2[i+4],2); //显示”‘=’确认“的下半部分 delay(200); } 仿真调试时,只显示上面一行“您好! 请输入密码”或者只显示下面一行“‘C’清除=’确认”没问题,但同时显示时,LCD屏上“您好! 请输入密码”这一行的第一个字“您”的上半部分跟“‘C”上半部分替换了,其他的都显示正常,查看LCD的RAM中显示“您”上半部分和“‘C”上半部分的十六进制码替换了。 请问这是什么原因?LCD选用的是LGM12641BS1R。 非常感谢你的帮助! 具体效果请看图片! |
|
相关推荐
5个回答
|
|
很详细,坐等高手解答
|
|
|
|
哪位热心人士帮帮小弟解决这个问题!
|
|
|
|
挺好,可惜没上传仿真和编译文件!
|
|
|
|
路过学习。。。。。。。。。。。
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4642 浏览 3 评论
5923 浏览 1 评论
6197 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
7938 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1226 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 06:48 , Processed in 0.602133 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号