#include <myinclude.h>
/**************************************
名称:read_key
功能:按键扫描
输入参数:无
输出参数:key_return(扫描到的按键值)
*************************************/
uchar read_key( void )
{
//key_state,状态变量,key_value为输入存储变量,key_line为行线输入变量
static uchar key_state = 0, key_value, key_line;
uchar key_return = No_key, i;
switch( key_state )
{
case 0:
key_line = 0x10;//0b00010000
for( i = 1; i <= 4; i++ )
{
KEY_PORT = ~key_line;
KEY_PORT = ~key_line;
key_value = Key_mask & KEY_PIN;// 读列电平
if( key_value == Key_mask )// 没有按键,继续扫描
{
key_line <<= 1;
}
else
{
key_state++;// 有按键,停止扫描
break;// 转消抖确认状态
}
}
break;
case 1:
if( key_value == ( Key_mask & KEY_PIN ) )// 再次读列电平,此时key_value为上次扫描之值
{
switch( key_line | key_value )
{
//case 0b00011110:
case 0x1e:
key_return = K1_1;
break;
//case 0b00011101:
case 0x1d:
key_return = K1_2;
break;
//case 0b00011011:
case 0x1b:
key_return = K1_3;
break;
//case 0b00010111:
case 0x17:
key_return = K1_4;
break;
//case 0b00101110:
case 0x2e:
key_return = K2_1;
break;
//case 0b00101101:
case 0x2d:
key_return = K2_2;
break;
//case 0b00101011:
case 0x2b:
key_return = K2_3;
break;
//case 0b00100111:
case 0x27:
key_return = K2_4;
break;
//case 0b01001110:
case 0x4e:
key_return = K3_1;
break;
//case 0b01001101:
case 0x4d:
key_return = K3_2;
break;
//case 0b01001011:
case 0x4b:
key_return = K3_3;
break;
//case 0b01000111:
case 0x47:
key_return = K3_4;
break;
//case 0b10001110:
case 0x8e:
key_return = K4_1;
break;
//case 0b10001101:
case 0x8d:
key_return = K4_2;
break;
//case 0b10001011:
case 0x8b:
key_return = K4_3;
break;
//case 0b10000111:
case 0x87:
key_return = K4_4;
break;
}
key_state++;// 转入等待按键释放状态
}
else
{
key_state--;// 两次列电平不同返回状态0,(消抖处理)
}
break;
case 2:
//KEY_PORT = 0b00001111;
//KEY_PORT = 0b00001111;
KEY_PORT = 0x0f;
KEY_PORT = 0x0f;
if( ( Key_mask & KEY_PIN ) == Key_mask )
{
key_state = 0;// 列线全部为高电平返回状态0
}
break;
}
return( key_return );
}
/*
系统主程序应每隔10ms调用该键盘接口函数read_key(),
函数返回值为255 时表示无按键按下。检测和确认按键
按下时,函数返回值为0 到16 之间的一个,该返回值
已经是经过了键盘编码的值。此函数为逐行扫描,一
旦列线有低电平输入,即锁定行线扫描值,之后与列
线输入之值进行逻辑或,即可得到键盘在行列线的二
进制信息编码
*/
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
avr ATMEG16 IAR 例程 (1053个子文件)
key_dis_led.cspy.bat 2KB
1571.cspy.bat 2KB
1571.cspy.bat 2KB
T1_ICP.cspy.bat 2KB
macro.cspy.bat 2KB
dtmf.cspy.bat 2KB
mega16_ad.cspy.bat 2KB
mega16_ad.cspy.bat 2KB
adc0.cspy.bat 2KB
beep.cspy.bat 2KB
7219.cspy.bat 2KB
7219.cspy.bat 2KB
T1_CTC.cspy.bat 2KB
single_key.cspy.bat 2KB
matrix_key.cspy.bat 2KB
machao_key.cspy.bat 2KB
4_3_keyboard.cspy.bat 2KB
7219.cspy.bat 2KB
led88.cspy.bat 2KB
only_dtmf.cspy.bat 2KB
dtmf_50ms.cspy.bat 2KB
led_flash.cspy.bat 2KB
int.cspy.bat 2KB
swap_2.cspy.bat 2KB
pointer_0.cspy.bat 2KB
wuhong.cspy.bat 2KB
timer1.cspy.bat 2KB
music.cspy.bat 2KB
dtmf_detect.cspy.bat 2KB
74hc595_sample.cspy.bat 2KB
led4_scan.cspy.bat 2KB
lcd.cspy.bat 2KB
T2_PWM.cspy.bat 2KB
T1_PWM.cspy.bat 2KB
TWI.cspy.bat 2KB
TWI_master1.cspy.bat 2KB
TWI_slave.cspy.bat 2KB
huwei_lcd.cspy.bat 2KB
595.cspy.bat 2KB
struct.cspy.bat 2KB
watchdog.cspy.bat 2KB
eeprom.cspy.bat 2KB
eeprom.cspy.bat 2KB
T0_CTC_DA.cspy.bat 2KB
spi_slave.cspy.bat 2KB
spi.cspy.bat 2KB
2543.cspy.bat 2KB
usart.cspy.bat 2KB
file_include.cspy.bat 2KB
sinwave.cspy.bat 2KB
C_calloc.cspy.bat 2KB
74hc595_sample.cspy.bat 2KB
read_key.c 7KB
read_key.c 7KB
read_keyboard.c 5KB
main.c 5KB
main.c 5KB
read_key.c 4KB
main.c 4KB
single_key.c 3KB
single_key.c 3KB
main.c 3KB
swap.c 3KB
main.c 3KB
main.c 3KB
7219.c 3KB
7219.c 3KB
main.c 3KB
main.c 3KB
main.c 3KB
control.c 3KB
7219.c 2KB
main.c 2KB
main.c 2KB
main.c 2KB
7219.c 2KB
7219.c 2KB
7219.c 2KB
main.c 2KB
main.c 2KB
main.c 2KB
control.c 2KB
main.c 2KB
main.c 2KB
control.c 2KB
7219.c 2KB
main.c 2KB
main.c 1KB
calculate.c 1KB
main.c 1KB
main.c 1KB
interrupt.c 1KB
1571.c 1KB
display.c 1KB
initial.c 1KB
display.c 1KB
main.c 1KB
main.c 1KB
main.c 1KB
display.c 1KB
共 1053 条
- 1
- 2
- 3
- 4
- 5
- 6
- 11
feman5012
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 高等数学第一章第二节数列的极限
- Python 版冒泡排序算法源代码
- tensorflow-gpu-2.7.2-cp38-cp38-manylinux2010-x86-64.whl
- tensorflow-2.7.3-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-2.7.2-cp39-cp39-manylinux2010-x86-64.whl
- Python版本快速排序源代码
- Python 语言版的快速排序算法实现
- 450815388207377安卓_base.apk
- 超微主板 X9DRE-TF+ bios 支持 nvme启动
- 基于Python通过下载气象数据和插值拟合离散数据曲线实现对寒潮过程的能量分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页