📄 5255_control_key.c
字号:
#include<stdio.h>
#include<reg52.h>
#include <absacc.h>
#define PA XBYTE[0x8000]
#define PB XBYTE[0x8001]
#define PC XBYTE[0x8002]
#define COM XBYTE[0x8003]
unsigned int data ledtable[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10},keytable[4][6]={{7,8,9,10,16,17},{4,5,6,11,18,19},{1,2,3,12,20,21},{0,15,14,13,22,23}};
unsigned int i;
/*===================延迟子程序============*/
void delay(void)
{
unsigned char j,k;
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
/*===========数码管显示子程序===============*/
void ledplay(int b)
{
unsigned int m,x[6];
for(i=0;i<6;i++)
{
x[i]=b%10;
b=b/10;
}
for(i=0;i<6;i++)
{
x[i]=ledtable[x[i]];
}
m=0xdf;
for(i=6;i>0;i--)
{
PA=x[i-1];
PC=m;
delay();
PC=0xff;
PA=0xff;
m=(m>>1)|(0x80);
}
}
/*=============测试按键===========*/
unsigned char testkey(void)
{
PC=0;
if((PB&0x0f)!=0x0f)
return(1);
else
return(0);
}
/*===============得到键值==========*/
unsigned int getkey(void)
{
unsigned int x,y,m;
m=0xfe;
PC=m;
while((PB&0x0f)==0x0f) //键盘扫描
{
m=(m<<1)|0x01;
PC=m;
}
y=m;
x=PB;
for(i=0;(x&0x01)!=0;i++)
x>>=1;
x=3-i; //行数
for(i=0;(y&0x01)!=0;i++)
y>>=1;
y=5-i; //列数
while(testkey()); //等待按键释放
return(keytable[x][y]); //查表得键值
}
/*===========main============*/
main()
{
unsigned int num=0;
COM=0x82;
while(1)
{
if(testkey()) //测试按键
{
delay(); //延时去抖动
if(testkey())
num=getkey(); //得按键值
}
ledplay(num); //LED显示
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -