完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
4*4矩阵键盘输入一个两位数,显示在一个两位数码管上。程序如下:现在的问题是我接一位的数码管能正常显示数,接两位的就像图片中乱码了?这是为什么呢?
#include unsigned char code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff }; unsigned char keyNO0=16,keyNO1=16; ***it P2_6=P2^6; ***it P2_7=P2^7; void delay(int x) { unsigned int i; for(;x>0;x--) for(i=0;i<120;i++); } void keyscan() { unsigned char temp,temp1; temp=P1&0xf0; P1=0x0f; temp1=P1&0x0f; switch(temp) { case 0xe0:keyNO0=0;break; case 0xd0:keyNO0=1;break; case 0xb0:keyNO0=2;break; case 0x70:keyNO0=3;break; } switch(temp1) { case 0x0e:keyNO1=0;break; case 0x0d:keyNO1=1;break; case 0x0b:keyNO1=2;break; case 0x07:keyNO1=3;break; } P3=temp; } void main() { unsigned char keyNO=16,prekey=16,count=0; while(1) {P1=0xf0; if(P1!=0xf0) { keyscan(); count++; keyNO=keyNO0*4+keyNO1;prekey=keyNO; //P0=~DSY_CODE[prekey]; if(count==1) { P2_6=0; P2_7=1; P0=~DSY_CODE[prekey]; delay(500); } if(count==2) { P2_7=0; P2_6=0; count=0; P0=~DSY_CODE[prekey]; delay(500); } } } } 补充内容 (2017-2-25 13:49): 现在显示的问题解决了,就是不知道怎么分别对第一个数码管按键输入和对第二个数码管按键输入?有没有人帮忙看看
|
|
相关推荐
2个回答
|
|
可以设置一个标志位,这个标志位就是对数码管的位选数据进行操作!有两个数码管,则标志位就只有两种状态。
|
|
|
|
比如:table[]={0xfe,0xfb}; //位选数据
int flag;对位选位进行选择! 即table[flag]; 你按下按键这个flag自动加1. 并判断flag |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
6077 浏览 3 评论
7343 浏览 1 评论
7585 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
9373 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1273 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:19 , Processed in 0.548707 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号