📄 5buttononekey.c
字号:
/*
5ButtonOneKey.C
5个按钮+4位共阴数码管显示例程
带软件去抖功能
作者:吴健
*/
#define F_CPU 4000000UL
#include <avr/io.h>
#include <avr/delay.h>
#define uchar8 unsigned char
const uchar8 LedNum[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar8 KeyNum = 0; // 按钮的值
void delay()
{
int i;
for(i=0;i<600;i++)
;
}
void LEDShow(int num)
{
uchar8 i,tmp,curnum;
int tmpnum;
tmp = 0xef;
tmpnum = num;
for(i=0;i<4;i++)
{
curnum = tmpnum % 10;
tmpnum = tmpnum / 10;
PORTA = tmp;
PORTC = LedNum[curnum];
delay();
tmp = (tmp << 1) + 0x1;
}
}
// 得到按钮按下所代表的按键号码
uchar8 GetKey(void)
{
uchar8 keyval;
keyval = PIND;
keyval = (~keyval)&0xf8;
keyval = keyval >>3;
switch(keyval)
{
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
case 4:
return 3;
case 8:
return 4;
case 0x10:
return 5;
default:
return 0;
}
return 0;
}
// 带软件10ms去抖功能的读按钮
uchar8 GetOneKey(void)
{
uchar8 tmpkey;
if(GetKey() == 0)
{
KeyNum = 0;
return KeyNum;
}else{
tmpkey = GetKey();
_delay_ms(10);
if(tmpkey == GetKey())
{
KeyNum = tmpkey;
return KeyNum;
}
}
KeyNum = 0;
return KeyNum;
}
int main(void)
{
int num=0; /* 要显示的数字 */
DDRC = 0xff;
DDRA = 0xff;
DDRD = 0; // 输入方式
num = 0;
while(1)
{
LEDShow(num);
num = GetOneKey();
delay();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -