- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AVR单片机定时器按键扫描程序.doc
AVR单片机定时器按键扫描程序
AVR单片机定时器按键扫描程序
[日期:2008-07-09 ] [来源:东哥单片机学习网 整理 作者:佚名] [字体:大 中 小] (投递新闻)
/*******************************************************************************
*程序共定义了6个键的功能:K1、K2、K3、K4以及K5、K8组成的一对复合键,其中K2,K3为
*连击键,K5为上档键。在正常工作模式下按K1则切换至状态,在设定模式下按K1键循环选
*择4个数码管中的某个,被选中的数码管闪烁,此时单按K2键显示数值加1;常按K2显示数
*值以一定速度递增,同时数码管停止闪烁,当K2松开,数码管恢复闪烁,显示数值停留在
*K2松开前的值上。K3完成的功能和K2类似。其完成减操作。这2个键只有在设定状态才有
*效,可以有效防止误操作。K4为确认键,按下该键回到正常显示状态,所有指示灯熄灭,
*数码管显示刚刚设定的数值。K5+K8这对复合键执行复位操作,任何情况下同时按下K5和K8
*或先按下K5再按下K8,所有数码管的显示全为0,指示灯全灭,进入正常显示状态。同时程
*序还对如下几个异常操作进行了处理:
* 2个或多个功能键同时按下
* 一个功能键按下未释放,又按另一个功能键,然后再松开其中一个功能键
* 先按下功能键再按下上档键
* 多个上档键和一个功能键同时按下,此时不做处理。等到松开其他上档键,只剩下一个上
* 档键和一个功能键时才执行这对复合键;或松开所有上档键,处理单一功能键。
*******************************************************************************/
#include iom8v.h
#include macros.h
#define uchar unsigned char
#define uint unsigned int
#define RCtrl 0x20 //定义上挡键 第5键
#define RConti 0xfe //定义连击键 第6键
#define N 2 //去抖年龄下限
#define MaxRate 50 //重复前的延迟值 600ms
#define MinRate 20 //重复速度 240ms
#define leddark 83 //闪烁时灭时间1s
#define ledshow 83 //闪烁时亮时间1s
#define decimal 0x80 //小数点的段数
#define KEY_DDR DDRC
#define KEY_PORTO PORTC
#define KEY_PORTI PINC
#define OUT 0x3f
#define IN 0xc0
#define KeyValue 0x3f
#define LEDD_DDR DDRB
#define LEDD_PORTO PORTB
#define LEDS_DDR DDRD
#define LEDS_PORTO PORTD
#define LEDS_MASK 0xfc
#define LEDS_NUM 0x06
#define TRUE 1
#define FALSE 0
/*定义键盘扫描程序返回数据类型*/
typedef struct
{
uchar shiftcnt; //上档键的个数值
uchar funcnt; //功能键的个数值
uchar shiftval; //最后扫描到的上档键的值
uchar funval; //最后扫描到的功能键的值
} keyret;
/*定义显示字符段码*/
uchar const led_stroke[19] =
{
//0,1,2,3,4,5,6,7,8,9
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
//a,b,C,d,e,F,P,
0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,
文档评论(0)