switch按键扫描数码管显示0-F
链接: https://pan.baidu.com/s/169Vl36wDqOxhIE4uGpIrzA 提取码: unkk
//说明:按下任意一按键时,数码管会显示它在键盘矩阵上的序号0-F,
//扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加
//不同的值,从而得到键盘按键序号。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code shu_zi[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,
0X88,0X83,0XC6,0XA1,0X86,0X8E,0X00};
uchar wu_jian_hao=16,jian_hao=16;
void yan_shi(uchar ms)
{
uchar i,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++);
}
void anjian_samao()
{
uchar an_jian_wei;
P1=0x0f;
yan_shi(1);
an_jian_wei=P1^0x0f;
switch(an_jian_wei)
{
case 1: jian_hao=0;break;
case 2: jian_hao=1;break;
case 4: jian_hao=2;break;
case 8: jian_hao=3;break;
default: jian_hao=16;//当没有按键,按下。jian_hao=16;
//default 语句既可以放在 switch 结构结尾处,也可以放在开头处,还可以放在中间位置。
}
P1=0xf0;
yan_shi(1);
an_jian_wei=P1^0xF0;//^按位异或 例如:不同为1,相同为0: 1^1=0, 1^0=1, 0^1=1, 0^0=0
switch(an_jian_wei)
{
case 0X10: jian_hao+=0;break;//可以展是jian_hao=jian_hao+0
case 0X20: jian_hao+=4;break;//
case 0X40: jian_hao+=8;break;
case 0X80: jian_hao+=12;
}
}
void main()
{
P1=0xFF;
while(1)
{
P1=0XF0;
if(P1!=0xf0)
{
anjian_samao();
P1=0xf0;
while(P1==0xf0);//等待按键松开。
}
if(wu_jian_hao!=jian_hao)
P2=shu_zi[jian_hao];
}
}








最新发布