4X4键盘扫描程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4X4键盘扫描程序,采用查表方式,适用于AVR单片机。
此处为4X4键盘软件部分,硬件部分设计请参照:4X4键盘扫描电路分析。此程序对应的键盘电路为:
键盘状态扫描函数
/*
键盘扫描函数
读取当前键盘的状态
有按键按下返回相应按键值
无按键按下返回"0x00"
*/
unsigned char key_read(void){
unsigned char i;
DDRA = 0x00;/*获取列地址*/
PORTA = 0x0F;
DDRA = 0xF0;
i = PINA;
DDRA = 0x00;/*获取行地址*/
PORTA = 0xF0;
DDRA = 0x0F;
i |= PINA;
DDRA = 0x00;/*输出复位*/
PORTA = 0xFF;
switch (i) {/*将按键码转换成键值*/
case 0x00: return 0x00;
case 0xEE: return '1';
case 0xDE: return '2';
case 0xBE: return '3';
case 0x7E: return 'A';
case 0xED: return '4';
case 0xDD: return '5';
case 0xBD: return '6';
case 0x7D: return 'B';
case 0xEB: return '7';
case 0xDB: return '8';
case 0xBB: return '9';
case 0x7B: return 'C';
case 0xE7: return '*';
case 0xD7: return '0';
case 0xB7: return '#';
case 0x77: return 'D';
default : return 0x00;
}
键盘读取函数
/*
按键获取函数
获取按键信号,其中包含有状态记录及按键去颤抖。有正确按键按下返回相应按键值
无正确按键按下返回"0x00"
*/
unsigned char get_key(void){
unsigned char i;
static unsigned char j;/*按键记录*/
i = key_read();
if (i == 0x00){/*无有效按键按下*/
j = 0x00;/*清除按键记录*/
return 0x00;/*程序退出*/
}
if (j == 0x00) {/*为新按键*/
j = i;/*保存本次采样结果*/
delay_ms(10);/*去按键颤抖*/
i = key_read();
if(i == j) {
return i;
}
}
return 0x00;
我有两个问题关于这个程序请教:
一,无按键按下返回"0x00",这个"0x00"是自己规定的还是什么来头?
二,"case 0xEE: return '1';",返回'1'是键值?如果我要把按键的值用数码管显示,那么这个返回值应该在主函数里面怎么处理?
三,"return i;",返回值到哪里?
回复:(dudubeibei)我有两个问题关于这个程序请教:一...
1、无按键按下返回"0x00",这是自己定义的。就是为了表明现在没有按键按下。
2、case 0xEE: return '1';这个地方我可能没说清楚,返回的是ASCII码,要把它转换成十六进制码才能用。或者修改这个地方不用ASCII码,直接用十六进制码。
3、return i;这个是函数的返回,返回给调用它的地方。
调用有返回值的函时可以写成下面方式,这样就可以得到函数的返回值了。(i)
temp = key();
建议:C语言的函数部分再复习一次,加深一下理解。
没见有主程序!!!
我参考后编了个你们帮我看看是不是这样用的!!
#include
#include
delay_ms//延时子程序省略
unsigned char key_read(void)
{ unsigned char i;
DDRA = 0x00;/*获取列地址*/
POR TA = 0x0F;
DDRA = 0xF0;
i = PINA;
DDRA = 0x00;/*获取行地址*/
POR TA = 0xF0;
DDRA = 0x0F;
i |= PINA;
DDRA = 0x00;/*输出复位*/
POR TA = 0xFF;
switch (i)
{/*将按键码转换成键值*/
case 0x00: return 0x00;
case 0xEE: return 1;
case 0xDE: return 2;
case 0xBE: return 3;
case 0x7E: return 4;
case 0xED: return 5;
case 0xDD: return 6;
case 0xBD: return 7;
case 0x7D: return 8;
case 0xEB: return 9;
case 0xDB: return 10;
case 0xBB: return 11;
case 0x7B: return 12;
case 0xE7: return 13;
case 0xD7: return 14;
case 0xB7: return 15;
case 0x77: return 16;
default : return 0x00;
}
}
/*按键获取函数获取按键信号,其中包含有状态记录及按键去颤抖。有正确按键按下返回相应按键值无正确按键按下返回"0x00"*/
unsigned char get_key(void)
{
unsigned char i;