51单片机矩阵按键控制代码
时间: 2023-12-06 20:38:01 浏览: 88
51单片机控制代码
以下是51单片机矩阵按键控制代码的示例:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
}; // 数码管显示0~F的值
uchar KeySta[4][4]={
{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}
}; // 按键状态数组
uchar KeyValue[4][4]={
{1,2,3,0},
{4,5,6,0},
{7,8,9,0},
{0xa,0,0xb,0xc}
}; // 按键值数组
void Delay10ms(uint c) // 延时函数
{
uint a,b;
for(;c>0;c--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
void DigDisplay() // 数码管显示函数
{
uchar i;
for(i=0;i<8;i++){
switch(i){
case(0):LSA=0;LSB=0;LSC=0;break;
case(1):LSA=1;LSB=0;LSC=0;break;
case(2):LSA=0;LSB=1;LSC=0;break;
case(3):LSA=1;LSB=1;LSC=0;break;
case(4):LSA=0;LSB=0;LSC=1;break;
case(5):LSA=1;LSB=0;LSC=1;break;
case(6):LSA=0;LSB=1;LSC=1;break;
case(7):LSA=1;LSB=1;LSC=1;break;
}
P0=table[i]; // 显示数码管的值
Delay10ms(1); // 延时
P0=0x00; // 清空数码管
}
}
uchar KeyScan() // 按键扫描函数
{
uchar i,j;
uchar keyvalue=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(KeySta[i][j]==0){
keyvalue=KeyValue[i][j];
KeySta[i][j]=1;
return keyvalue;
}
}
}
return 0;
}
void main()
{
uchar keyvalue;
while(1){
keyvalue=KeyScan(); // 扫描按键
if(keyvalue!=0){
DigDisplay(); // 显示数码管
}
else{
P0=0x00; // 清空数码管
}
}
}
```
阅读全文