📄 skey.c
字号:
/*******************************************
文件:SKEY.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驱动开发板上的独立按键,按下不同的键,数码管显示0-3四个数字
备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h> //包含型号头文件
#include <macros.h> //包含"位"操作头文件
#include <stdio.h> //标准输入输出头文件
/*******************************************
函数名称: Skey_press
功 能: 检测是否有键按下
参 数: 无
返回值 : pressed--有键按下时为TRUE,否则为FALSE
/********************************************/
uchar Skey_press(void)
{
uchar pressed;
KEY_DDR=OUT; //定义数据端口为输出
KEY_PORTO|=0x0F; //输出数据(输出检测码)
KEY_DDR=IN; //定义数据端口为输入
if((KEY_PORTI&0x0F)!=0x0F) //检测是否有键按下
pressed=TRUE; //有键按下则返回TRUE
else
pressed=FALSE; //无键按下则返回FALSE
KEY_DDR=OUT; //数据端口还原为输出
return pressed;
}
/*******************************************
函数名称: Skey_scan
功 能: 扫描所按的键并返回键值
参 数: 无
返回值 : keycode--被按下键值
/********************************************/
uchar Skey_scan(void)
{
uchar keycode=0xFF;
Delayms(15); //延时消抖
if(Skey_press()==TRUE) //如果有键按下
{
KEY_DDR=IN; //定义数据端口为输入
keycode=KEY_PORTI; //读入原始键码
keycode&=0x0F; //屏蔽高4位
switch(keycode) //翻译原始键码为0~3
{
case 0x0E:
keycode=0;
break;
case 0x0D:
keycode=1;
break;
case 0x0B:
keycode=2;
break;
case 0x07:
keycode=3;
break;
default:
keycode=0x00;
}
do
{
}while(Skey_press()==TRUE); //等待按键释放(为了防止按一次,执行多次的现象)
}
return keycode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -