完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
|
吴坚鸿单片机程序风格赏析(连载)
|
|
|
|
|
|
|
|
|
|
|
|
case 6: if (key_sr1 == 1 && key_sr2 == 1) { key_step++; key_lock1 = 0; delay_cnt1 = 0; } Else if (key_sr1 == 0 && key_sr2 == 1 && key_lock1 == 0) { ++delay_cnt1; if (delay_cnt1 > cnt_delay_cnt1) { delay_cnt1 = 0; key_lock1 = 1; key_sec = 3; //触发3号键 } } else if (key_sr1 == 1 && key_sr2 == 0 && key_lock1 == 0) { ++delay_cnt1; if (delay_cnt1 > cnt_delay_cnt1) { delay_cnt1 = 0; key_lock1 = 1; //自锁按键置位,避免一直触发 key_sec = 4; //触发4号键 } } break; } if (key_step > 6) //第1组按键与第2组按键反复轮流扫描 { key_step = 1; } //================================================= 个人看过楼主的简介后决定好好学习下这段代码,但看过之后有一点不太明白的地方,特来请教: 在中断扫描里,当key_step=6时的最后又进行了一次 if (key_step > 6) //第1组按键与第2组按键反复轮流扫描,也就是说key_step=6运行了两次,这段时间按楼主的说法应该是比较赶时间的,为什么要做两次处理呢,是为防止出错又做了一次扫描呢(但在程序中也没有看见备份第一次的扫描数据),还是写错了呢,我感觉应该这么写:把if去掉,直接key_step=1;//因为这里已经是6也,要不也不会进入该函数里,所以没有必要判断是否等于6的问题了, 还有一点,具我所知,好像有源蜂鸣器在实际产品中应用甚少,可否指点下无源蜂鸣器+数码管显示+按键扫描的代码? 另外,我是初学者,跟楼主一样,也是自学的,有什么不对的地方还请指教,多谢。。。 |
|
|
|
|
|
//以下代码通过解析每一位电平状态来确定哪个按键被触发 if((key_status &0x0001)==0x0001) { key_lock1=0; //按键自锁标志清零 delay_cnt1=0; //按键去抖动延时计数器清零,此行非常巧妙 } else if(key_lock1==0) { ++ delay_cnt1; if(delay_cnt1> cnt_delay_cnt1) //延时计数去抖动 { delay_cnt1=0; key_lock1=1; key_sec=1; //触发1号键 } } if((key_status &0x0002)==0x0002) { key_lock2=0; //按键自锁标志清零 delay_cnt2=0; //按键去抖动延时计数器清零,此行非常巧妙 } else if(key_lock2==0) { ++ delay_cnt2; if(delay_cnt2> cnt_delay_cnt1) //延时计数去抖动 { delay_cnt2=0; key_lock2=1; key_sec=2; //触发2号键 } } if((key_status &0x0004)==0x0004) { key_lock3=0; //按键自锁标志清零 delay_cnt3=0; //按键去抖动延时计数器清零,此行非常巧妙 } else if(key_lock3==0) { ++ delay_cnt3; if(delay_cnt3> cnt_delay_cnt1) //延时计数去抖动 { delay_cnt3=0; key_lock3=1; key_sec=3; //触发3号键 } } if((key_status &0x0008)==0x0008) { key_lock4=0; //按键自锁标志清零 delay_cnt4=0; //按键去抖动延时计数器清零,此行非常巧妙 } else if(key_lock4==0) { ++ delay_cnt4; if(delay_cnt4> cnt_delay_cnt1) //延时计数去抖动 { delay_cnt4=0; key_lock4=1; key_sec=4; //触发4号键 } } //如果要接16个按键,读者可以继续往下添加类似的代码,本例只触发4个按键作为演示 } //================================================ 个人看过楼主的简介后决定好好学习下这段代码,但看过之后有一点不太明白的地方,特来请教: 按照 吴坚鸿程序风格 按键扫描应该用switch语句才对啊? |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2077 浏览 1 评论
3505 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2333 浏览 2 评论
2760 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4015 浏览 5 评论
967浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6350浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 02:09 , Processed in 1.043642 second(s), Total 87, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号