编程语言及工具
AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。AVR单片机是 Atmel 公司 1997 年推出的 RISC 单片机。RISC(精简指令系统计算机)是相对于CISC(复杂指令系统计算机)而言的。RISC 并非只是简单地去减少指令,而是通过使计算机的结构更加简单合理而提高运算速度的。
RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高运行速度。由于 AVR 采用了 RISC 的这种结构,使AVR系列单片机都具备了1MIPS/MHz(百万条指令每秒/兆赫兹)的高速处理能力。
按键控制流程
state action
0检测是否有按下
1消抖
2检测是否有按下行扫描列读取出健值送出键值,并移至高4位
3 行扫描列读取出健值跟上一次比较相问计时(2s)加一。计调转下- 一个状态(长按);不同则转到1(组合键可以在这一状态下判断)
4 行扫描,列该取出健值跟上: 一次比较相同计时(100ms)加一,计满送出键值,不同则转到1
#idefine LPT 1200
#define LPT_SEND_DATA 200
#define JUDGE_KEY_DOWN 0
#detine WAITKEYSTATE 1g
4define SEND_KEY_VALUE 2
#idefine JUDGE_ LOONG PRESS 3
#define LOONG PRESS_ ACTION 4
#define KEY_UP_STATE 5
#define key_port PORTC
#define key_dd DDRC
#define key_in PINC
#define key_IO 0xF0
/ 备配10 的输入输出h.1为输出0 为输入
#define key_L 0xF0
/1|输出来低位输出
#define key_R 0x0F
/行输入,高位读入
unsigned char key_pin[ h- {0x10,0x20,0x40,0x80} ;
const unsigned char key_table[-{
0x0O,0x01,0x02.0xf,0x3,.0xfJOXfJoxf.oxo4.0xf.Oxf.Xff.offoxf.oxT.oxf/ 第一行
0x 10,0x05.0x06,0x1f;.Ox07,0xf.Oxf,0of.38.OXfG.OXfQ.Xf.Xf.Oxf.oxf.oxtf;/ 第二行
0x20,0x09,0x0a,0xf,0xOb,0xtf:Oxf;Oxf.oxOc,OxfofOoxf.OXf.OXf(oqif.0./ 第三行
0x30,0x0d,0x0e,0xf,0x0f,0xf,Oxtf.Oxf;.0x 10,0xff.Oxf,0xf.offixf,0xf.oxf‘1第四行
{
volatile unsigned char key_value_old;
volatile unsigned int key_time;
volatile unsigned char state;
volatile unsigned char j:
{
unsigned char key_scan(void)
unsigned char j;
for(j-0;j4j+ +)
{
key_port-key_pin[j l;
key_pinui
key_port“ I
/_NOPO :_NOPO;NOP0;_NOPO:_NOP( );_NOP( );
i( (key_in & key_R)!= 0x00 )
/reurn (key_lablelj + key_in]);/ i-0,5,10,15
/PORTD- key_table[i《c4 + key_in];
/IPORTD- key_in;
/key_part=0x0f;
/retum j;
switch(key_in )
case 0b00010001: return 0;
break;
case 0b00100001: return 1;
break;
case 0b00011000: return 12;
break;
case 0b00101000: return 13;
break;
case 0b01001000: recurn 14;
break;
case 0b10001000: return 15;
break;
defaul :break;
key_port” key_IO;
全部0条评论
快来发表一下你的评论吧 !