博主:hotpower
+加为好友
+发送站内短信
+我的博客精华
ARM (17)
GCCAVR之C++ (20)
尿童学堂 (28)
CUPL语言设计 (11)
非典应用怪潭 (6)
51反汇编 (23)
串口通讯专栏 (6)
SPI接口 (3)
程序优化 (3)
PIC C30 (4)
HotPower水潭导航 (3)
尿童图解 (3)
自言自语 (24)
菜农搞笑 (22)
菜农文集 (3)
LabWindows/CVI (13)
电信交换 (14)
DSP5402 (16)
尿童答疑 (1)
串行数据通讯 (5)
实用电子书籍 (1)
LPCARM之ISP (12)
上位机 (7)
CRC专栏 (3)
数据库 (8)
单总线通讯 (6)
CPLD (2)
DSP2812 (13)
DSP206 (0)
DSP (10)
菜地公告 (22)
LPCARM爬鸟 (4)
程序安全 (4)
DSP GEL语言 (5)
Keil C51 (19)
非典型LPCARM之攻防体系 (3)
非典型LPCARM专栏 (3)
51演示程序 (4)
开源文件包 (4)
无线通讯 (6)
三十年追梦 (7)
PICC (12)
Delphi语言设计 (5)
非典应用怪潭 (9)
函数指针 (1)
菜农文件 (5)
ARM入门 (1)
菜农的HotComm串口控件 (17)
STM32菜鸟实习 (16)
LM菜鸟实习 (10)
看门狗专栏 (10)
CRC/PEC (18)
USB (9)
电源技术 (1)
DSP/BIOS (31)
ABEL语言设计 (3)
菜农键盘专栏 (14)
I2C接口 (10)
IAR C++ (4)
MSP430 (3)
2008年份 (123)
2007年份 (296)
2006年份 (130)
· 倒塌了~~~MSP430什么都不明白就debug了
· 00要误导一大片了---再论C语言指针问题
· 郁闷+求助~~~不知2008年"430 Day"研讨会的时间表
· C语言指针问题
· 在做DSP/GEL菜鸟前的一些感慨
更多>>
· 周末没人呀~~~谢谢~~~
· 联系TI啊,问他们啊
· 个人认为2.2.1已经很好了。3.0的有点复杂
·HotPower的水潭
·汽车电子的个人网站
·phoenixmy的BLOG
·菜农hotpower的菜地
·电脑圈圈
·侯小慧同学的保健网站
·HotPower电潭
·开发板之家
·周立功单片机
日志总数:549 篇
评论数量:264
访问次数:335157
标签: 无标签
出处: http://bbs.21ic.com/club/bbs/showEssence.asp?id=8907
“零耗时键盘”介绍: “零耗时”并非不耗时。它主要是将原本需要延时消除键盘抖动的时间转化为对定时器的计数来替代。这样就可将节约的时间用于对其他事件的处理。 “零耗时”键盘程序的编写很简单,首先要做到:1.用总键盘个数除消除键盘抖动的时间20mS.本例有4个键,即20mS/4=5mS. 所以,定时器0中断时间常数应该定义为5mS.2.设置1个压键20mS计数器数组KeyPressCount[]。用于对各键盘的压键次数计数。 由于全部键盘扫描需要20mS,故KeyPressCount[]内的值为20mS的倍数。3.设置1个键扫描位置计数器KeyCount,用于记录当前键扫描的位置。 注意键扫描函数KeyScan()每次只扫描1个键(本例即为IRQ_Timer0())。4.设置1个键扫描键值计数器数组KeyDblCount[],用于记录键值以处理双击状态。 本例主要讲解“零耗时”键盘程序的编写,一般不主张在MCU系统下用双击键。 多建议采用长压键来替代双击键。特别注意: “零耗时”键盘程序属于“扫而不描”类型,即每次只扫描1个键而不管其他键的状态。这样就可在一定的时间范围内“并行”地处理多个键盘事件。 键扫描位置计数器KeyCount的值就是键盘扫描结果的键值。故也改进了经典的键扫描函数KeyScan()需要逐次扫描的缺点 “零耗时”键盘程序只区分键释放,单击键,双击键 和长压键4种基本事件。区分只简单地判别KeyPressCount[]的个数即可。1.当无键压下且KeyPressCount[]减到0时,可判别为键释放事件发生。2.当有键压下且KeyPressCount[]=2时,可认为键已经经过20mS消抖处理, 即单击键事件发生。 如果需要双击键处理,则需要附加KeyDblCount[]双击键计数器数组。3.当有键压下且KeyPressCount[]=3*50时,即3*50*20mS=3S时,认为3S长压键事件发生。 对“零耗时键盘”的个人应用总结:在MCU的裸奔中,“零耗时键盘”很容易构成一个基于时间片小型的操作系统。它可以“并行地”处理多个键盘事件及任务。它的节拍不是OS常用的10mS,而是20mS消抖时间的1/N份。由于20mS也做为视觉暂留的时间基准,故在常用的LED+KEY系统中裸奔表现很不错。如果每个任务都能保证在20mS/N内完成,那么后台程序可以废除,即主程序只是个死循环。这在低功耗系统中应用很广。
系统分类: 单片机 | 用户分类: 菜农键盘专栏 | 来源: 原创 | 【推荐给朋友】
投一票您将和博主都有获奖机会!
欢迎参加“基础示波器博客大赛”,分享9,000元现金大奖
l0p0c
2007-11-26 9:49:22
不错啊!
学习下!