首页 > 代码库 > AVR第8课:独立按键
AVR第8课:独立按键
值得注意的是,独立按键的检测原理和消抖处理在51单片机中已经讲过了,这些东西都不会变。只是AVR单片机的IO口操作方式改变了。在AVR中,检测方式是:首先让将和独立按键相连接的IO口设置成输出高电平,接着将他们设置成输入模式,再然后检测这些IO口的值。电路图如下所示。
代码1:检测是哪一个按键被按下。这里不需要用到消抖动处理。
#include<iom16v.h> #include<macros.h> #define uint unsigned int #define uchar unsigned char uchar table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; void keyScan(); void initSYS(); void main() { initSYS(); while(1) { keyScan(); } } void initSYS() { //init the system DDRB = 0xFF; PORTB = 0xFF; DDRA = 0xFF; PORTA = table[0]; } void keyScan() { //to check wether the key has pressed uchar isPressed; DDRB = 0x00; isPressed = PINB; if(isPressed != 0xFF) { switch(isPressed) { case 0x7F: PORTA = table[1]; break; case 0xBF: PORTA = table[2]; break; case 0xDF: PORTA = table[3]; break; case 0xEF: PORTA = table[4]; break; case 0xF7: PORTA = table[5]; break; case 0xFB: PORTA = table[6]; break; case 0xFD: PORTA = table[7]; break; case 0xFE: PORTA = table[8]; break; } } else { //PORTA = table[0]; } }代码2:每次按一下按键,数字就加1。
#include<iom16v.h> #include<macros.h> #define uint unsigned int #define uchar unsigned char uchar table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar num; void init(); void delay(); void keyScan(); void main() { init(); while(1) { keyScan(); } } void init() { DDRA = 0xFF; PORTA = table[0]; DDRB = 0xFF; PORTB = 0xFF; num = 0; } void keyScan() { uchar keyValue; DDRB = 0x00; keyValue = http://www.mamicode.com/PINB;>AVR第8课:独立按键
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。