PIC单片机引脚中断程序的设计技巧
[09-12 16:35:08] 来源:http://www.88dzw.com 单片机学习 阅读:8786次
文章摘要: bit SYSTime; #defincTimeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;) 可以把TimeEnable()放到主程序死循环的任何地方,每当程序执行这个宏,SYSTime就会清零,这就是标志位的自我消失.如果在定时器时间基准标志位SYSlms已经置位的话,SYSTime就会置1,这样别的程序就可以利用这个时间消息了,这就是消息的自我发布。下面就是利用这个时间消息来进行按键延时去抖的,首先看一下按键扫描子程序; void seaakey(){ unsigned char KeyTime,KeyT
PIC单片机引脚中断程序的设计技巧,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.combit SYSTime;
#defincTimeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;)
可以把TimeEnable()放到主程序死循环的任何地方,每当程序执行这个宏,SYSTime就会清零,这就是标志位的自我消失.如果在定时器时间基准标志位SYSlms已经置位的话,SYSTime就会置1,这样别的程序就可以利用这个时间消息了,这就是消息的自我发布。下面就是利用这个时间消息来进行按键延时去抖的,首先看一下按键扫描子程序;
void seaakey(){
unsigned char KeyTime,KeyTask;//定义任务时间参数、
//任务参数
switch(KeyTask){
case0:if(key){
KeyTime=30; //准备延时30 ms
KeyTask++; //准备好下一个任务
kcy=0;
}
break;
case I:KeyTime--; //延时30 ms
if(KeyTime==0)Key+ask++;
break;
case2;if(RB4==o){
//调按键处理程序
KeyTask=0;
}
else KeyTask=0;//退出任务
break;
}
}
在主程序的死循环中这样用:
while(1){
TimeEnable();
If(SYSTime==1){scankey();)
//在此可以添加其他程序
只有有时问消息的时候才执行按键扫描程序。可以看到,进入扫描程序执行第一次的时候,程序首先判断按键标志位有没有置位,置位的话(也就是有按键按下的话),任务时间参数(KeyTime)赋值为30,这是延时30ms,去抖,当然你也可以设置为其他的时间值;同时任务参数 (KeyTask)加1。1ms后,再进入扫描程序,这个时候扫描程序执行casel的语句,这样30次后(延时了30ms),任务参数(KeyTask)加1,值为2。lms后,再进入扫描程序,将执行case 2的语句,首先在这里再次判断是不是按键还在按下,如果是就调按键的处理程序,如果不是。就退出按键扫描程序。在这里,还可以加入按键是否抬起的判断程序。
这样设计的引脚变化程序,CPU开销小,效率高,不会出现堆浅溢出的问题,提高了系统的实时性。
Tag:单片机学习,单片机开发,单片机原理,单片机教程,单片机学习
- 上一篇:单片机在智能电饭煲中的应用
《PIC单片机引脚中断程序的设计技巧》相关文章
- › Microchip推出闪存PIC单片机 数据传输速度达12Mbps
- › Microchip推出USB、LCD及通用8位PIC单片机系列
- › Microchip推出全新通用小型PIC单片机,适合多种应用
- › Microchip推出针对PIC单片机的mTouch解决方案
- › Microchip 推出全新通用小型PIC单片机
- › Microchip新推出两款20引脚8位PIC单片机
- 在百度中搜索相关文章:PIC单片机引脚中断程序的设计技巧
- 在谷歌中搜索相关文章:PIC单片机引脚中断程序的设计技巧
- 在soso中搜索相关文章:PIC单片机引脚中断程序的设计技巧
- 在搜狗中搜索相关文章:PIC单片机引脚中断程序的设计技巧
分类导航
最新更新