4X4的矩阵键盘

2019-03-24 18:09发布

我用的是51学习板  ,这个板子P2口直接 4X4的键盘,  P1口控制数码管位选,P0口是段选。下面的数码管显示函数单独运行没有问题,直接给(0-99)的数就会直接显示。。。     我的思路就是把 4x4按下的相应代码编成数组,然后取P2口的值,用for来一个一个对比。对比出来了,再直接显数。
看教程都是用swich-case 来做,只是觉得那个太长。想换一种思路。可就是不行,按了不显示,有时候狂按,会显示出一个数来。但是基本上按不出来。
#include<reg52.h>#define uint unsigned int#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,            0x99,0x92,0x82,0xf8,                0x80,0x90,0x88,0x83,    0xa7,0xa1,0x86,0x8e,0xff};//0-F
uchar temp,num=0;
void delay(uint z);void main(){ P1=0xff;   // 开数码管位选 P0=0xff;   // 关数码管段选 while(1) { P2=0xfe;   //矩阵位11111110 temp=P2; temp=temp&0xf0; if(temp!=0xfe) { delay(1); if(temp!=0xfe) { temp=P2; switch(temp) { case 0xee : num=0; break; case 0xde : num=1; YZ200原理图.pdf (144.69 KB, 下载次数: 30) 2012-4-11 17:28 上传 点击文件名下载附件
单片机的原理图
break; case 0xbe : num=2; break; case 0x7e : num=3; break; }
P0=table[num];
// while(temp!=0xf0)// {// temp=P3;// temp=temp&0xf0;// } } } }}
void delay(uint z){ uint x,y; for(x=120;x>0;x--) for(y=z;y>0;y--);}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。