×
单片机 > 单片机程序设计 > 详情

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

发布时间:2024-05-18 发布时间:
|

系统功能

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


硬件设计

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


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

#include "D:ICC_HCmmICC.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亮。。。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析