AVR应用笔记 AVR单片机笑傲江湖 AVR IO输入之独立按键检测程序

AVR IO输入之独立按键检测程序

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

系统功能

   使用AVR检测八个独立按键,一旦检测到按键被按,立马做出指示,非常牛!


硬件设计

   关于AVR的I/O结构及相关介绍详见Datasheet,这里仅对作部分简单介绍,下面是AVR的I/O引脚配置表:
AVR I/O 口引脚配置表

DDRXn

PORTXn

PUD

I/O 方式

内部上拉电阻

引脚状态说明

0

0

X

输入

无效

三态(高阻)

0

1

0

输入

有效

外部引脚拉低时输出电流 (uA)

0

1

1

输入

无效

三态(高阻)

1

0

X

输出

无效

推挽 0 输出,吸收电流 (20mA)

1

1

X

输出

无效

推挽 1 输出,输出电流 (20mA)


AVR主控电路原理图(点击图片放大,不需要放大镜!

LED控制电路原理图(点击图片放大,不需要放大镜!

独立按键电路原理图



软件设计

下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!

//目标系统: 基于AVR单片机
//应用软件: ICC AVR

/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
实验内容:
循环扫描PA口接入的8位独立按键,并使用PD口的LED指示灯指示按键的码值。
----------------------------------------------------------------------
硬件连接:
将PD口的LED指示灯使能开关切换到"ON"状态,使其指示按键的码值。
SingleKeyBoard:K0----K7
                 |    |
SMK1632:       PA0--PA7
----------------------------------------------------------------------
注意事项:
(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘
(2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/

#include <iom16v.h>
#include "D:\ICC_H\CmmICC.H"

#define LED_DDR  DDRD
#define LED_P0RT PORTD
#define KEY_DDR  DDRA
#define KEY_PORT PORTA
#define KEY_PIN  PINA

/*--------------------------------------------------------------------
程序名称:独立键盘扫描
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
void scanKey()
{
   
    KEY_PORT=0xFF;  //设置按键输出“1”,之后语句检测按键,若端口变为“0”,则表示被按   
    if(KEY_PIN==0xFE)   //1111 1110 --> 说明最低位的按键可能被按
    {
        delay50us(1);  //去抖
        if(KEY_PIN==0xFE) //1111 1110 --> 确认最低位的按键被按
            LED_P0RT=0xFE; //进行LED指示
    }
    if(KEY_PIN==0xFD)   //1111 1101 --> 说明最低位的按键可能被按
    {
        delay50us(1);  //去抖
        if(KEY_PIN==0xFD) //1111 1101 --> 确认最低位的按键被按
            LED_P0RT=0xFD; //进行LED指示
    }
    if(KEY_PIN==0xFB)   
    {
        delay50us(1);
        if(KEY_PIN==0xFB)
            LED_P0RT=0xFB; 
    }
    if(KEY_PIN==0xF7)   
    {
        delay50us(1);
        if(KEY_PIN==0xF7)
            LED_P0RT=0xF7; 
    }
    if(KEY_PIN==0xEF)   
    {
        delay50us(1);
        if(KEY_PIN==0xEF)
            LED_P0RT=0xEF; 
    }
    if(KEY_PIN==0xDF)   
    {
        delay50us(1);
        if(KEY_PIN==0xDF)
            LED_P0RT=0xDF; 
    }
    if(KEY_PIN==0xBF)   
    {
        delay50us(1);
        if(KEY_PIN==0xBF)
            LED_P0RT=0xBF; 
    }
    if(KEY_PIN==0x7F)   
    {
        delay50us(1);
        if(KEY_PIN==0x7F)
            LED_P0RT=0x7F; 
    }
 }


系统调试

按第一个键,第一个LED亮;按第二个键,第二个LED亮。。。

 相关AVR资料说明

可作为如下AVR的参考资料: ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny2313 ATtiny26 ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32 ATmega64 ATmega128 ATmega162 ATmega169 ATmega169P ATmega8515 ATmega8535

 相关AVR型号资料

ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny26 ATtiny2313
ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32
ATmega64 ATmega128 ATmega162 ATmega169 ATmega8515 ATmega8535

AVR IO输入之独立按键检测程序

——