"); //-->
》》点此进入 http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛
一、程序结构
二、仿真效果
三、程序源码
1、main.c
/*******************************************************************************
Platform : AVR mega16学习板(www.iccavr.com)
Project : 实验五:按键扫描(用KEY点亮对应LED)(增加防抖) (GCC)
Clock F : 3.6864M
Software : WinAVR-20071221+Proteus7.4
Author : 林夕依然
Version : 08.11.30
Updata : 09.02.26 模块化
09.04.30 增加proteus仿真模型,仿真通过。
09.07.21 WinAVR-20071221环境下编译通过。
comments :
1、以学习板八个LED灯和八个按键为硬件电路,JP7短路块需装上
2、AVR单片机端口寄存器的使用及理解
3、端口电平检测程序的编写方法
4、同【实验八】功能相同:操作KEY键控制对应的LED点亮
5、参考:http://www.iccavr.com/forum/dispbbs.asp?boardid=9&replyid=13569&id=147&skin=0&page=1&star=1
6、函数整合为function.c,按键扫描增加防抖功能
*******************************************************************************/
#include <avr/io.h>
#include "function.h"
int main(void)
{
port_init();
while(1)
{
key_scan();
}
}
2、function.c
/*******************************
Platform : AVR mega16学习板(www.iccavr.com)
function :功能函数集
Clock F : 3.6864M
Software : WinAVR-20071221+Proteus7.4
Author : 林夕依然
Version : 09.07.21
comments :
1、两种方式实现延时
2、端口初始化函数
3、键盘扫描函数,增加防抖处理
********************************/
/*---------------------------------------------------------------------------------
延时程序计算方法
计数个数j = 延时时间/6*晶振频率 - 1
---------------------------------------------------------------------------------*/
#include <avr/io.h>
#define uchar unsigned char
#define uint unsigned int
//延时函数:方式一
void Delay(void)
{
uchar a, b, c;
for (a = 1; a; a++)
for (b = 1; b; b++)
for (c = 0; c<10; c++) //循环次数=255*255*10
;
}
//延时函数:方式二,1ms延时,准确性较Delay();高
void DelayMs(uint i)
{
while(i--)
{
uint j;
for(j=1;j<=613;j++)
;
}
}
//端口初始化
void port_init(void) //BCD口使能上拉
{
PORTB = 0XFF;
PORTC = 0XFF;
PORTD = 0XFF;
DDRB = 0X00;
DDRC = 0X00;
DDRD = 0X00;
}
//键盘扫描函数
void key_scan(void)
{
uchar key;
DDRB = 0XFF;
DDRA = 0X00;
PORTA = 0XFF;
if(PINA != 0XFF) //检测A口电平,如果全是高电平则退出
{
DelayMs(20); //防抖
if(PINA != 0XFF ) //再次检测A口电平,如果不全是高电平则继续执行程序
{
key = PINA; //读取PINA,将其存放在key中
PORTB = key; //将PINA读出的值赋给B端口,对应LED点亮
while(PINA != 0XFF); //当前有按键处于按下状态,再按其他按键时程序维持当前
//状态,不会有对应LED点亮发生
}
}
}
3、function.h
#define uint unsigned int
void Delay(void);
void DelayMs(uint i);
void port_init(void);
void key_scan(void);
四、完整项目文件下载
http://bbs.armavr.com/thread-798-1-2.html
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
ARM RealView开发套件功能简介
LoRa的特性及其物联网创新应用分析
Arm 架构将占据半数 2025 年出货到头部云服务提供商的算力
Microchip WiFi 模塊(MRF24WB0Mx系列) 的連線種類與方法—WiFi介紹与Infrastructure Mode
ARM7TDMI-S(Rev 4)技术参考手册 (英)
MPLAB® X IDE 编译调试(下)
FREFROMT MTS-9600型彩色显示器的电源电路图
PIC单片机原理
如何实现基于英飞凌TRAVEO™ T2G系列芯片的Dual Bank方案架构实现OTA功能
MPLAB® X IDE 编译调试(上)
ADS集成开发环境及EasyJTAG仿真器应用
PGS HX-12型彩色显示器的电源电路图
KEY ECH-14型单色显示器的电源电路图
关税效应 全球服务器出货动能强
FUJITSU FMV-DPS84Y2型SGVA彩色显示器的电源电路图
lpc2294的中文资料哪里能找到?到那可以下载嵌入式系统的软件(那种都可以)?
设计产品时要怎么选无线通信技术?抓好这几样!
[求助]请问qiutian
常见的8种PCB标记整理汇总
优化效率:探索有源钳位正激转换器的二次整流电路设计和占空比的作用
搞清几个概念 确保信号完整性
基于PIC32的蜂窝网机器到机器(M2M)通信解决方案
二十年过去 Arduino已经远不止是Arduino了
基于PIC32的低成本图形解决方案
ARM产品技术服务指南
PMV-P-14VC型彩色显示器的电源电路图
技术洞察 | 如何在英飞凌 AURIX™ TC3xx 系列单片机上移植 FreeRTOS 实时操作系统
AnyCAN嵌入式模块系列产品选型指南
我的2410跑起来了,看看图片吧.
PIC单片机原理