避免错误,一律选择矩阵键盘方式。
比赛用开发板不可使用按键触发外部中断的方式来检测按键
P.S :使用IAP15转接板后,单片机P4.2代替P3.6,P4.4代替P3.7
sfr P4 = 0xc0;
sbit p36replace = P4^2;
sbit p37replace = P4^4;
编程步骤:
(1)将4条列线中的第一条置为0
(2)读行线
(3)判断行线中是否存在为0的行
(4)若存在,则有按键按下, 消抖
(5)读行线,判断是否有行线被置为0,若有,判断哪条行线被置为0,
(6)switch case 匹配行线
(7)(1)++
程序:
char liecode[4] = {0x7f, 0xbf, 0xdf, 0xef};
sfr P4 = 0xc0;
sbit p36replace = P4^2;
sbit p37replace = P4^4;
sfr AUXR = 0x8E;
int keycheck()
{
char temp,value;
int a;
for(a=0;a<4;a++)
{
if(a == 0)
{
p37replace = 0;
p36replace = 1;
P3 = liecode[a];
}
if(a == 1)
{
p37replace = 1;
p36replace = 0;
P3 = liecode[a];
}
if(a>1)
{
P3 = liecode[a]; //set P35.4=0
}
temp = P3;
value = temp & 0x0f; //check hang
if(value != 0x0f) //a key in this lie has been pressed
{
delayms(10);
temp = P3;
value = temp & 0x0f; //check hang
if(value != 0x0f)
{
if(value == 0x07)
{
key = 1;
switch (a)
{
case 0: key += 0; break;
case 1: key += 4; break;
case 2: key += 8; break;
case 3: key += 12; break;
}
while((P3 & 0x0f) != 0x0f);
return key;
}
if(value == 0x0b)
{
key = 2;
switch (a)
{
case 0: key += 0; break;
case 1: key += 4; break;
case 2: key += 8; break;
case 3: key += 12; break;
}
while((P3 & 0x0f) != 0x0f);
return key;
}
if(value == 0x0d)
{
key = 3;
switch (a)
{
case 0: key += 0; break;
case 1: key += 4; break;
case 2: key += 8; break;
case 3: key += 12; break;
}
while((P3 & 0x0f) != 0x0f);
return key;
}
if(value == 0x0e)
{
key = 4;
switch (a)
{
case 0: key += 0; break;
case 1: key += 4; break;
case 2: key += 8; break;
case 3: key += 12; break;
}
while((P3 & 0x0f) != 0x0f);
return key;
}
}
}
}
return key;
}
若keycheck()置于主程序,需要放在while(1)中,若置于中断中:
void main()
{
cls_buzz();
t0_init();
while(1)
{
display(value);
}
}
void t0_interpt() interrupt 1
{
EA = 0;
// TH0 = (65536-45872)/256; //设置定时初值
// TL0 = (65536-45872)%256; //设置定时初值
TL0 = 0xCD;
TH0 = 0xD4;
value = keycheck();
EA = 1;
}
上一篇:【蓝桥杯单片机组】AT2C02 EEPROM
下一篇:【蓝桥杯单片机组】DS18B20
推荐阅读最新更新时间:2024-11-22 23:59
设计资源 培训 开发板 精华推荐
- 使用 Diodes Incorporated 的 ZR78L033 的参考设计
- FOC-V1.0.0-M
- 用于数据采集系统的 20 位 1CH DAC
- 继电器模块
- RT7236、5A、18V、650kHz、ACOT同步降压转换器的典型应用
- 使用 Richtek Technology Corporation 的 RT9387A 的参考设计
- 使用 Richtek Technology Corporation 的 RT8576AGS 的参考设计
- SY89464U,用于 GB 以太网交换机的时钟缓冲器的评估板
- LT3791IFE-1 98% 效率 60W (12V/5A) LED 驱动器的典型应用电路
- LT6656ACDC-4.096、4.096V 低功率精密高压电源监视器的典型应用