📄 third.c
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include<stdio.h>
static unsigned char style=0x00;//按键类型
unsigned char key_tag=0;
unsigned char key=0,key1=0;
int counter1=0,counter2=0;
//______________________________________________________
//初始化定时器T/C0
void T_INIT()
{
ASSR|=(0<<AS0);//使用内部晶振
TCCR0|=(1<<CS02)|(1<<CS00);//128分频
TCNT0=0xC0;//记数周期为1ms,F=1m
TIMSK|=(1<<TOIE0); //比较中断0允许
SREG = 0x80;
}
//初始化I/O口
void PORT_INIT()
{
DDRC=0x00;
}
//定时器中断函数
SIGNAL(SIG_OVERFLOW0)
{
TCNT0=0XC0;
//对按键及按下时间进行分析
if(key_tag==0)//没有按键,对上次按键按下时间进行分析
{
if(counter2>300)
{
switch(key1)
{
case 0x01:
if(counter2>3000) style=15;
break;//开关
case 0x02:
if(counter2>300) style=16;
break;//上翻
case 0x03:
if(counter2>300) style=17;
break;//下翻
case 0x04:
if(counter2>300) style=18;
break;//确定
case 0x05:
if(counter2>300) style=19;
break;//取消
case 0x06:
if(counter2>3000) style=20;
break;//组合按键:取消键+确定键
case 0x07:
if(counter2>3000) style=21;
break;//组合按键:开关键+上翻键
case 0x08:
if(counter2>3000) style=22;
break;//组合按键:开关键+下翻键
case 0x09:
if(counter2>3000) style=23;
break;//组合按键:开关键+确定键
case 0x10:
if(counter2>3000) style=24;
break;//组合按键:开关键+取消键
case 0x11:
if(counter2>3000) style=25;
break;//组合按键:上翻键+确定键
default:break;//无按键按下
}//end of switch
counter1=0;//清空计数器
counter2=0;
key=0;
}//end of if
}//end of if
else
if(key1==key)//有键按下,并且是上一次检测到的按键
{
counter1++;
if(counter1>7)//消除抖动
{
counter2++;
}
}
else//有键按下,但不是上一次检测到的按键
{
key1=key;
counter1=0;
counter2=0;
}
}
//读键盘
int key_read()
{
unsigned char i;
i=PINC&0X1f;
if(i==0x1e) key=0x01;//开关
else if(i==0x1d) key=0x02;//上翻
else if(i==0x1b) key=0x03;//下翻
else if(i==0x17) key=0x04;//确定
else if(i==0x0f) key=0x05;//取消
else if(i==0x07) key=0x06;//取消+确定组合键
else if(i==0x1c) key=0x07;//开关键及上翻键组合
else if(i==0x1a) key=0X08;//开关键及下翻键组合
else if(i==0x16) key=0X09;//开关键及确定键组合
else if(i==0x0e) key=0X10;//开关键及取消键组合
else if(i==0x15) key=0X11;//上翻键及确定键的组合
else key=0;
return(key);
}
//扫描键盘
void key_scan(void)
{
if(key_read())
key_tag=1;
else key_tag=0;//有按键按下,标志位置1,否则为0
}
//主函数
int main()
{
PORT_INIT();
T_INIT();
sei();
key1=key;
while(1)
{
key_scan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -