完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
也就是,用矩阵键盘输入字母,然后显示到液晶上
#include #define uchar unsigned char #define uint unsigned int ***it du=P2^6; ***it we=P2^7; ***it en=P3^4; ***it rs=P3^5; ***it rw=P3^6; uchar code tab[]="ABCDEFGHIJKLMNOP"; uchar key; void delay(uint z) { uint a; for(z=z;z>0;z--) for(a=114;a>0;a--); } void Write_dat(uchar dat) { P0=dat; rs=1; en=0; delay(5); en=1; delay(5); en=0; } void Write_com(uchar com) { P0=com; rs=0; en=0; delay(5); en=1; delay(5); en=0; } void init() { delay(20); Write_com(0x38); delay(5); Write_com(0x0c); delay(5); Write_com(0x06); delay(5); Write_com(0x01); delay(5); } void miskey() { uint temp; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(4); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { delay(4); temp=P3; switch(temp) { case 0xee: key=0;break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } Write_dat(tab[key]); delay(5); } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; if(temp=temp&0xf0) { temp=P3; switch(temp) { case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } Write_dat(tab[key]); delay(5); } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } Write_dat(tab[key]); delay(5); } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0;} Write_dat(tab[key]); delay(5); } } } void main() { rw=0; init(); du=0; we=0; Write_com(0x80); while(1) { miskey(); } } |
|
相关推荐
9个回答
|
|
首先你确定一下你的显示程序是不是有问题,你可以把你要显示的东西改成常量,比如 Write_dat(tab[key]);改成 Write_dat(tab[1]);然后看看显示屏是不是有显示,如果没有就是你显示程序的问题了,或者你的液晶没把亮度调好什么的,如果显示没问题就是你按键代码问题,不得不说你的额按键代码写的太长了!对了,液晶如果不能显示着重看一下你的延时,多数是延时的问题。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
瞎折腾 发表于 2016-10-14 18:02 亮度,对比度全部调好,显示程序也能显示,就是按按键不显示,应该是按键程序错了但又找不出来:L |
|
|
|
Eagleson 发表于 2016-10-14 17:43 抱歉哦...我给忘了,1602显示屏,键盘就是一般的矩阵键盘 |
|
|
|
汉云 发表于 2016-10-14 15:55 该成数字后之后不能显示,不过加个单个显示程序却能显示字母和数字 |
|
|
|
uchar code tab[]="ABCDEFGHIJKLMNOP";
这里是不是应该改成 uchar code tab[]={"ABCDEFGHIJKLMNOP"}; |
|
|
|
瞎折腾 发表于 2016-10-15 19:05 不是呢...干脆换一种键盘写法吧 |
|
|
|
只有小组成员才能发言,加入小组>>
710 浏览 0 评论
1120 浏览 1 评论
2497 浏览 5 评论
2836 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2677 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
662浏览 9评论
673浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
791浏览 6评论
637浏览 5评论
681浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 03:00 , Processed in 3.292811 second(s), Total 95, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号