4X4键盘扫描程序,采用查表方式,适用于AVR单片机。
此处为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;
}
关键字:4X4键盘 扫描程序
引用地址:
4X4键盘扫描程序
推荐阅读最新更新时间:2024-03-16 15:00
简单的4*4矩阵键盘扫描程序
/* 程序效果:按下任意键,LED显示P0读回的数据其中4*4的矩阵键盘接P0口 */ #include reg52.h //头文件 unsigned char key=0xff; //定义一个变量用于存放按键值 void readkey(); //读按键子函数,获取键值 void main() //主函数 { while(1) { readkey(); //读按键值 if(key!=0xff) //判断是否有按键按下 P2=~key;//这里取反:是因为LED为共阴,显示所按下的值 } } void readkey() //读键盘子函数 { P0=0xfe; //将第一列拉低,扫描是否有按键按下,第一列键值为:0,4,
[单片机]
感觉比较好的矩阵键盘扫描程序
这个程序是我在写一个计算器的程序的时候想出来的,总感觉常用的键盘扫描程序用起来很麻烦,总是要一行一行的进行扫描,看起来也很繁琐,于是自己想了一个矩阵键盘的扫描程序,原理很简单的! 这个程序的基本思路是两条相交直线只有一个交点的原理,说白了就是先检测行,再检测列,或者倒过来也可以。 这个键盘扫描子程序是一个有返回值的无参函数,需要之前计算好一个数组就OK了! 下面是子函数的实现,我在这里只用一个3*4的矩阵键盘为例,原理都是一样的! ================================================================= uchar code key_table = { 0x77, 0x7
[单片机]
4X4键盘测试程序
/***********************Copyright(c)************************** **------------------------------------------------------------ **Created by: 康利平 **Descriptions: The original version **Descriptions: 键盘测试程序1 **------------------------------------------------------------*/ #include reg51.h #define uchar unsigned char
[单片机]
缩短PLC程序扫描周期的方法
提高plc运行效率,缩短完成相同任务时的执行时间。 提醒:初学者不必在意本文归纳的做法,以程序易读、规范为目标,完成功能要求即可。 1、可以用“字”的时候尽量避免用“双字”,可以用整数时,尽量避免用实数。 2、优先使用富余的(硬件连接以外的)IB、IW、ID、QB、QW、QD,其次是M,S; 3、尽量避免数据类型转换,不得不用时,尽量用AC存放中间变量,减少转换次数。或者编程时先预留出存储空间,比如:用VW2存整数时,VW0空出不用,就可以直接以VD0的形式来进行访问VW2中的数据; 4、减少非必要网络扫描,把可以设条件执行的网络(特别是AIW、AQW),归类到子程序中作条件调用(例如定时中断);
[嵌入式]