|
我用的是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; 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--); }
|
|