手机网站 网站地图 招生城市 文章 资讯 湖南长沙阳光PLC编程培训学校是一家以plc技术为核心的plc程控编程培训学校,主营湖南plc培训,长沙plc培训。学校的主要课程有PLC培训,PLC编程培训,plc自动化培训,欢迎全国各地学员来我校学习plc自动化编程技术。学校常年开设:plc培训,plc编程培训,plc自动化培训,PLC编程入门,线下PLC培训,PLC学习,西门子PLC培训,三菱PLC培训,机器人培训。提供plc学员最关心的问题:plc培训,plc培训机构,一般plc培训要多少钱,plc专业培训机构,三菱plc培训,plc基础培训,专业plc编程培训,plc培训学校哪个好,plc培训大概多少钱,plc培训学校,学习plc培训,plc培训班大概多长时间,plc编程培训,plc入门培训,plc零基础自学入门,plc培训班有用吗,三菱plc培训多少钱,三菱plc培训要多少钱,plc编程入门培训,plc学习培训,plc培训中心,培训机构plc,plc培训要多少钱,plc培训需要多少钱哪家好,plc培训需要多少钱,专业的plc培训机构,plc培训机构排名,比较好的plc培训机构,plc培训班,专业培训plc机构,plc培训价格,plc培训机构哪个好,plc培训哪里比较好,三菱plc培训机构,哪个plc培训机构好,plc培训费用多少,哪家plc培训机构好,plc初级入门培训,知名plc培训机构,比较好的plc培训班,正规plc培训机构,plc编程学习培训班,好的plc培训机构,plc培训机构哪里好,plc基础培训价格,哪家plc培训比较好,专业plc培训机构,plc培训学习机构,培训plc多少钱,plc培训机构哪家好,plc入门培训机构,plc编程培训要多少钱,plc培训费用,培训plc价格,plc培训多少钱,plc编程培训班,plc培训那个机构好,哪个机构培训plc好,电工plc培训,plc 培训班,哪里plc培训比较好,plc培训多长时间,plc培训哪里专业,plc培训班哪里好,plc培训的价格,plc 培训,比较好的plc培训,plc 培训价格,plc培训哪家比较好,专业plc培训学校,plc培训班价格,专业plc培训,plc编程培训多少钱,plc课程培训班,plc培训 多少钱,附近哪有plc培训机构,plc的培训机构,plc培训学校哪家好,plc基础培训学习,plc培训班费用,plc培训哪家强,哪里的plc培训好,三菱plc培训权威机构,plc培训机构怎么样,plc编程培训价格,哪个plc培训好点,哪边有plc培训机构,培训plc课程,plc培训教学,plc专业技能培训,plc电工培训,plc专业培训,学习plc培训的费用,plc课程培训价格表,plc培训入门,plc培训哪里好,哪里有培训plc培训班,零基础plc培训,三菱plc培训班,plc培训收费,零基础plc编程培训,plc培训要学多久,专业plc培训班,培训学plc要多长时间,三菱plc培训学校,plc编程,专门的plc培训,专业培训plc,plc培训哪个好,plc培训哪家,plc编程培训费用,plc自动化培训机构,三菱plc培训中心,plc培训那家好,plc编程培训班多久,专业培训plc班,plc编程培训机构,有没有plc培训的,plc职业培训机构,plc培训那里好,plc 编程培训,plc工业培训,国内plc培训机构,plc哪里有培训班,plc培训哪的好,哪有plc培训,哪家plc培训强,plc培训班怎么样,plc培训哪家好,学plc培训班,哪个plc培训好,plc电工培训班,从零开始学plc培训,plc速成培训,哪里有好的plc培训,plc培训学习班,plc培训哪好,plc工程师培训机构,plc编程培训培训,plc技能培训班,哪里plc培训,plc培训 哪里好,那里有好的plc培训,plc工程培训,哪有plc培训班,plc培训考证,哪里有plc培训班,plc培训 机构,哪家plc培训好,学plc有没有必要培训,哪里培训plc比较好,plc培训去哪里好,培训plc公司,哪里有plc培训机构,plc编程培训学校,plc技术培训机构,工控plc培训,学plc的培训,plc培训哪里有,plc培训公司,plc编程培训哪家好,plc工控培训,plc职业技能培训,plc的培训学习,plc快速培训,学习plc的培训班,plc自动化培训班,学习plc培训班,plc编程基础培训,plc的培训班,专业培训plc编程机构,如何选择plc培训机构,plc编程培训班有用吗,plc培训多久,plc工程师培训,plc是什么培训班多钱,plc培训怎么学,plc 培训机构,学plc培训的,plc班培训,plc学习培训班,三菱plc学习,好的plc培训,plc的专业培训,专业的plc培训,plc实战培训,plc自动化培训,哪里培训plc,哪里有培训plc,编程plc培训,plc自动化培训学校,哪有plc编程培训班,plc培训那个好。营口PLC培训,乐清PLC培训,咸宁PLC培训,个旧PLC培训,宁国PLC培训,临汾PLC培训,临沂PLC培训,开封PLC培训,宁安PLC培训,上海PLC培训,宣城PLC培训,娄底PLC培训,安陆PLC培训,广水PLC培训,乌兰察布PLC培训,密山PLC培训,宜都PLC培训,三门峡PLC培训,市北PLC培训,二连浩特PLC培训,庐山PLC培训,临江PLC培训,常州PLC培训,兴安盟PLC培训,威海PLC培训,定西PLC培训,宁乡PLC培训,宁波PLC培训,东莞PLC培训,东台PLC培训,义马PLC培训,丽江PLC培训,东营PLC培训,东阳PLC培训,建德PLC培训,沅江PLC培训,永安PLC培训,武夷山PLC培训,伊宁PLC培训,庄河PLC培训,禹城PLC培训,江阴PLC培训,汉川PLC培训,乌海PLC培训,九江PLC培训,东兴PLC培训,市南PLC培训,广安PLC培训,温州PLC培训,武汉PLC培训,保定PLC培训,新民PLC培训,盐城PLC培训,东港PLC培训,玉溪PLC培训,灯塔PLC培训,榆林PLC培训,新疆PLC培训,绥芬河PLC培训,白城PLC培训,湖北PLC培训,池州PLC培训,公主岭PLC培训,沙市PLC培训,济宁PLC培训,溧阳PLC培训,盘锦PLC培训,甘肃PLC培训,自贡PLC培训,朔州PLC培训,普兰店PLC培训,偃师PLC培训,太原PLC培训,德惠PLC培训,伊春PLC培训,五常PLC培训,临安PLC培训,庆阳PLC培训,福泉PLC培训,安顺PLC培训,泰安PLC培训,古交PLC培训,定州PLC培训,涿州PLC培训,河北PLC培训,宁夏PLC培训,乐陵PLC培训,枣庄PLC培训,化州PLC培训,瑞安PLC培训,昌都PLC培训,泸州PLC培训,深州PLC培训,中山PLC培训,富阳PLC培训,汝州PLC培训,穆棱PLC培训,乳山PLC培训,泰州PLC培训,永康PLC培训,泊头PLC培训,泰兴PLC培训,肥城PLC培训,河源PLC培训,崇左PLC培训,仪征PLC培训,安宁PLC培训,汕尾PLC培训,和田PLC培训,建瓯PLC培训,商丘PLC培训,福建PLC培训,塔城PLC培训,罗定PLC培训,新余PLC培训,敦煌PLC培训,南昌PLC培训,江山PLC培训,丹阳PLC培训,中卫PLC培训,安丘PLC培训,南宁PLC培训,信宜PLC培训,涟源PLC培训,湛江PLC培训,宝鸡PLC培训,沧州PLC培训,江苏PLC培训,三亚PLC培训,东宁PLC培训,开平PLC培训,益阳PLC培训,乌鲁木齐PLC培训,汕头PLC培训,抚远PLC培训,漯河PLC培训,舞钢PLC培训,枣阳PLC培训,绥化PLC培训,淮安PLC培训,绵阳PLC培训,林芝PLC培训,梅州PLC培训,抚州PLC培训,延边PLC培训,包头PLC培训,合肥PLC培训,湘西PLC培训,温岭PLC培训,湘乡PLC培训,兴化PLC培训,山西PLC培训,奉化PLC培训,华蓥PLC培训,乐昌PLC培训,兴宁PLC培训,松原PLC培训,北流PLC培训,新乐PLC培训,武威PLC培训,宿州PLC培训,甘孜PLC培训,蓬莱PLC培训,新市PLC培训,蒙自PLC培训,三河PLC培训,晋城PLC培训,迪庆PLC培训,辽源PLC培训,河南PLC培训,吉林PLC培训,侯马PLC培训,彬州PLC培训,山南PLC培训,昆明PLC培训,运城PLC培训,兴平PLC培训,焦作PLC培训,乐平PLC培训,漳州PLC培训,合山PLC培训,汨罗PLC培训,三明PLC培训,太仓PLC培训,漳平PLC培训,什邡PLC培训,广汉PLC培训,林州PLC培训,招远PLC培训,同江PLC培训,淮南PLC培训,黔西南PLC培训,梧州PLC培训,卫辉PLC培训,景德镇PLC培训,张家港PLC培训,福清PLC培训,延安PLC培训,百色PLC培训,安庆PLC培训,阜新PLC培训,眉山PLC培训,防城港PLC培训,霍林郭勒PLC培训,大庆PLC培训,河池PLC培训,盖州PLC培训,临湘PLC培训,苏州PLC培训,镇江PLC培训,十堰PLC培训,邓州PLC培训,雷州PLC培训,孝感PLC培训,景洪PLC培训,阿尔山PLC培训,青海PLC培训,德阳PLC培训,吴川PLC培训,长沙PLC培训,孟州PLC培训,彭州PLC培训,宜昌PLC培训,项城PLC培训,陕西PLC培训,邳州PLC培训,达州PLC培训,贺州PLC培训,安阳PLC培训,武安PLC培训,老河口PLC培训,弥勒PLC培训,腾冲PLC培训,牙克石PLC培训,德宏PLC培训,调兵山PLC培训,如皋PLC培训,从化PLC培训,乌苏PLC培训,新沂PLC培训,南充PLC培训,张家口PLC培训,双鸭山PLC培训,日照PLC培训,禹州PLC培训,阿里PLC培训,濮阳PLC培训,格尔木PLC培训,阜阳PLC培训,界首PLC培训,广州PLC培训,桐乡PLC培训,石嘴山PLC培训,宜城PLC培训,邯郸PLC培训,扎兰屯PLC培训,新郑PLC培训,连云港PLC培训,西昌PLC培训,兖州PLC培训,平度PLC培训,河津PLC培训,贵港PLC培训,海西PLC培训,桦甸PLC培训,图们PLC培训,英德PLC培训,云浮PLC培训,珲春PLC培训,七台河PLC培训,资兴PLC培训,海宁PLC培训,恩平PLC培训,梅河口PLC培训,潞城PLC培训,金坛PLC培训,锦州PLC培训,襄阳PLC培训,肇庆PLC培训,德州PLC培训,滁州PLC培训,青州PLC培训,靖江PLC培训,衡水PLC培训,安徽PLC培训,丰镇PLC培训,应城PLC培训,雅安PLC培训,和龙PLC培训,广元PLC培训,那曲PLC培训,大冶PLC培训,贵州PLC培训,巩义PLC培训,曲阜PLC培训,阿坝PLC培训,香格里拉PLC培训,北安PLC培训,凯里PLC培训,满洲里PLC培训,忻州PLC培训,泸水PLC培训,九台PLC培训,天津PLC培训,郴州PLC培训,三沙PLC培训,潍坊PLC培训,南京PLC培训,阳泉PLC培训,海东PLC培训,霸州PLC培训,韶山PLC培训,长治PLC培训,京山PLC培训,固原PLC培训,成都PLC培训,栖霞PLC培训,上饶PLC培训,兴城PLC培训,武穴PLC培训,枝江PLC培训,平顶山PLC培训,巴彦淖尔PLC培训,泉州PLC培训,额尔古纳PLC培训,新乡PLC培训,鄂尔多斯PLC培训,兴仁PLC培训,兴义PLC培训,滨州PLC培训,鄂州PLC培训,海林PLC培训,西安PLC培训,井冈山PLC培训,唐山PLC培训,沁阳PLC培训,桐城PLC培训,胶州PLC培训,湖州PLC培训,辽阳PLC培训,诸暨PLC培训,邹城PLC培训,佳木斯PLC培训,石家庄PLC培训,韶关PLC培训,遂宁PLC培训,吐鲁番PLC培训,尚志PLC培训,开原PLC培训,汾阳PLC培训,五大连池PLC培训,长乐PLC培训,海口PLC培训,武冈PLC培训,葫芦岛PLC培训,永城PLC培训,肇东PLC培训,绍兴PLC培训,普洱PLC培训,来宾PLC培训,六安PLC培训,廉江PLC培训,霍州PLC培训,金昌PLC培训,登封PLC培训,耒阳PLC培训,崇州PLC培训,衢州PLC培训,上虞PLC培训,隆昌PLC培训,舟山PLC培训,富锦PLC培训,洪湖PLC培训,邢台PLC培训,滕州PLC培训,荥阳PLC培训,宿迁PLC培训,荣成PLC培训,云南PLC培训,嘉峪关PLC培训,宣威PLC培训,安国PLC培训,莱西PLC培训,普宁PLC培训,余姚PLC培训,玉林PLC培训,平凉PLC培训,韩城PLC培训,临沧PLC培训,山东PLC培训,浏阳PLC培训,蚌埠PLC培训,昆山PLC培训,鹰潭PLC培训,株洲PLC培训,双城PLC培训,潮州PLC培训,阆中PLC培训,水富PLC培训,讷河PLC培训,周口PLC培训,朝阳PLC培训,遵义PLC培训,北票PLC培训,高碑店PLC培训,岳阳PLC培训,毕节PLC培训,伊犁PLC培训,厦门PLC培训,宜州PLC培训,广东PLC培训,随州PLC培训,当阳PLC培训,怀化PLC培训,阿克苏PLC培训,万源PLC培训,玉门PLC培训,樟树PLC培训,神木PLC培训,任丘PLC培训,松滋PLC培训,新泰PLC培训,果洛PLC培训,麻城PLC培训,白山PLC培训,瑞丽PLC培训,河间PLC培训,仁怀PLC培训,阳春PLC培训,榆树PLC培训,岑溪PLC培训,赤壁PLC培训,鹿泉PLC培训,青岛PLC培训,启东PLC培训,敦化PLC培训,临夏PLC培训,内蒙古PLC培训,铁力PLC培训,丹江口PLC培训,克孜勒苏PLC培训,义乌PLC培训,库尔勒PLC培训,遵化PLC培训,宜春PLC培训,慈溪PLC培训,怒江PLC培训,辽宁PLC培训,赤峰PLC培训,张掖PLC培训,无锡PLC培训,昭通PLC培训,龙海PLC培训,凌源PLC培训,黄冈PLC培训,西宁PLC培训,邵武PLC培训,简阳PLC培训,南阳PLC培训,大兴安岭PLC培训,高平PLC培训,宜兴PLC培训,鹤山PLC培训,奎屯PLC培训,扬中PLC培训,沙河PLC培训,贵溪PLC培训,孝义PLC培训,珠海PLC培训,灵武PLC培训,江油PLC培训,北海PLC培训,江门PLC培训,莱芜PLC培训,齐齐哈尔PLC培训,长葛PLC培训,洛阳PLC培训,海安PLC培训,资阳PLC培训,福安PLC培训,高密PLC培训,德令哈PLC培训,陆丰PLC培训,曲靖PLC培训,鹤壁PLC培训,鸡西PLC培训,北京PLC培训,开远PLC培训,华亭PLC培训,峨眉山PLC培训,平泉PLC培训,安康PLC培训,霍尔果斯PLC培训,宁德PLC培训,赣州PLC培训,沈阳PLC培训,晋州PLC培训,南宫PLC培训,江西PLC培训,集安PLC培训,都江堰PLC培训,根河PLC培训,保山PLC培训,凭祥PLC培训,合作PLC培训,平湖PLC培训,湘潭PLC培训,晋中PLC培训,本溪PLC培训,张家界PLC培训,黄山PLC培训,酒泉PLC培训,荆门PLC培训,揭阳PLC培训,清远PLC培训,聊城PLC培训,安达PLC培训,铜川PLC培训,兰溪PLC培训,萍乡PLC培训,丹东PLC培训,呼伦贝尔PLC培训,攀枝花PLC培训,大同PLC培训,石狮PLC培训,永济PLC培训,龙井PLC培训,冀州PLC培训,南通PLC培训,汉中PLC培训,石首PLC培训,拉萨PLC培训,青铜峡PLC培训,六盘水PLC培训,西双版纳PLC培训,建阳PLC培训,淮北PLC培训,菏泽PLC培训,柳州PLC培训,陇南PLC培训,南雄PLC培训,淄博PLC培训,铁岭PLC培训,章丘PLC培训,商洛PLC培训,瓦房店PLC培训,黄南PLC培训,克拉玛依PLC培训,诸城PLC培训,四平PLC培训,延吉PLC培训,吉首PLC培训,马鞍山PLC培训,冷水江PLC培训,深圳PLC培训,荆州PLC培训,海阳PLC培训,黄石PLC培训,甘南PLC培训,茫崖PLC培训,锡林郭勒盟PLC培训,海南PLC培训,吴忠PLC培训,内江PLC培训,银川PLC培训,桂林PLC培训,龙泉PLC培训,芒市PLC培训,藁城PLC培训,莆田PLC培训,哈尔滨PLC培训,宜宾PLC培训,阿勒泰PLC培训,莱阳PLC培训,灵宝PLC培训,共青城PLC培训,迁安PLC培训,四会PLC培训,市中PLC培训,邹平PLC培训,巢湖PLC培训,洪江PLC培训,临海PLC培训,怀仁PLC培训,呼和浩特PLC培训,临清PLC培训,亳州PLC培训,佛山PLC培训,常宁PLC培训,信阳PLC培训,海北PLC培训,咸阳PLC培训,扶余PLC培训,黑河PLC培训,乌兰浩特PLC培训,秦皇岛PLC培训,贵阳PLC培训,康定PLC培训,嵊州PLC培训,黄骅PLC培训,杭州PLC培训,马尔康PLC培训,绵竹PLC培训,驻马店PLC培训,海城PLC培训,渭南PLC培训,巴中PLC培训,黑龙江PLC培训,大连PLC培训,龙口PLC培训,丽水PLC培训,原平PLC培训,广西PLC培训,明光PLC培训,兰州PLC培训,红河PLC培训,金华PLC培训,连州PLC培训,徐州PLC培训,常熟PLC培训,嘉兴PLC培训,乐山PLC培训,西藏PLC培训,高安PLC培训,津市PLC培训,丰城PLC培训,鹤岗PLC培训,哈密PLC培训,高要PLC培训,大安PLC培训,鞍山PLC培训,衡阳PLC培训,天长PLC培训,虎林PLC培训,介休PLC培训,洮南PLC培训,新密PLC培训,海门PLC培训,台州PLC培训,高邮PLC培训,锡林浩特PLC培训,醴陵PLC培训,许昌PLC培训,昌邑PLC培训,通化PLC培训,福州PLC培训,南安PLC培训,天水PLC培训,浙江PLC培训,钟祥PLC培训,阳江PLC培训,莱州PLC培训,辛集PLC培训,磐石PLC培训,黔东南PLC培训,南康PLC培训,海伦PLC培训,长春PLC培训,清镇PLC培训,德兴PLC培训,吉安PLC培训,湖南PLC培训,文登PLC培训,吕梁PLC培训,都匀PLC培训,日喀则PLC培训,西市PLC培训,郑州PLC培训,蛟河PLC培训,牡丹江PLC培训,扬州PLC培训,潜山PLC培训,阿图什PLC培训,惠州PLC培训,永州PLC培训,增城PLC培训,四川PLC培训,常德PLC培训,大丰PLC培训,大石桥PLC培训,凤城PLC培训,瑞金PLC培训,芜湖PLC培训,瑞昌PLC培训,承德PLC培训,钦州PLC培训,烟台PLC培训,北镇PLC培训,凉山PLC培训,茂名PLC培训,台山PLC培训,高州PLC培训,巴音郭楞PLC培训,白银PLC培训,双辽PLC培训,邵阳PLC培训,盘州PLC培训,廊坊PLC培训,福鼎PLC培训,寿光PLC培训,南平PLC培训,龙岩PLC培训,凌海PLC培训,铜仁PLC培训,华阴PLC培训,舒兰PLC培训,重庆PLC培训,济南PLC培训,铜陵PLC培训,黔南PLC培训,即墨PLC培训,句容PLC培训,通辽PLC培训,博尔塔拉PLC培训,阿拉山口PLC培训,赤水PLC培训,邛崃PLC培训,晋江PLC培训,桂平PLC培训,抚顺PLC培训。
PLC培训,PLC编程培训学校,工控培训学校
PLC培训,PLC编程培训学校,工控培训学校
PLC培训,PLC编程培训学校,工控培训学校
毕业学员的真情感言
当前位置: > PLC培训
单片机消抖程序
单片机消抖程序
时间:2021-10-16 08:56:25 采集:PLC培训,PLC编程培训学校 主题:单片机消抖程序 浏览:
  通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动,如图所示。

  按键稳定闭合时间长短是由操作人员决定的,通常都会在 100ms 以上,刻意快速按的话能达到 40-50ms 左右,很难再低了。抖动时间是由按键的机械特性决定的,一般都会在 10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。当检测到按键状态变化时,不是立即去响应动作,而是先等待闭合或断开稳定后再进行处理。按键消抖可分为硬件消抖和软件消抖。

  硬件消抖就是在按键上并联一个电容,如图所示,利用电容的充放电特性来对抖动过程中产生的电压毛刺进行平滑处理,从而实现消抖。但实际应用中,这种方式的效果往往不是很好,而且还增加了成本和电路复杂度,所以实际中使用的并不多。

  在绝大多数情况下,我们是用软件即程序来实现消抖的。最简单的消抖原理,就是当检测到按键状态变化后,先等待一个 10ms 左右的延时时间,让抖动消失后再进行一次按键状态检测,如果与刚才检测到的状态相同,就可以确认按键已经稳定的动作了。将上一个的程序稍加改动,得到新的带消抖功能的程序如下。


#include

sbit addr0 = p1^0;
sbit addr1 = p1^1;
sbit addr2 = p1^2;
sbit addr3 = p1^3;
sbit enled = p1^4;
sbit key1 = p2^4;
sbit key2 = p2^5;
sbit key3 = p2^6;
sbit key4 = p2^7;

unsigned char code ledchar[] = { //数码管显示字符转换表
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e
};

void delay();
void main(){
bit keybuf = 1; //按键值暂存,临时保存按键的扫描值
bit backup = 1; //按键值备份,保存前一次的扫描值
unsigned char cnt = 0; //按键计数,记录按键按下的次数

enled = 0; //选择数码管 ds1 进行显示
addr3 = 1;
addr2 = 0;
addr1 = 0;
addr0 = 0;
p2 = 0xf7; //p2.3 置 0,即 keyout1 输出低电平
p0 = ledchar[cnt]; //显示按键次数初值

while (1){
keybuf = key4; //把当前扫描值暂存
if (keybuf != backup){ //当前值与前次值不相等说明此时按键有动作
delay(); //延时大约 10ms
if (keybuf == key4){ //判断扫描值有没有发生改变,即按键抖动
if (backup == 0){ //如果前次值为 0,则说明当前是弹起动作
cnt++; //按键次数+1
//只用 1 个数码管显示,所以加到 10 就清零重新开始
if (cnt >= 10){
cnt = 0;
}
p0 = ledchar[cnt]; //计数值显示到数码管上
}
backup = keybuf; //更新备份为当前值,以备进行下次比较
}
}
}
}
/* 软件延时函数,延时约 10ms */
void delay(){
unsigned int i = 1000;
while (i--);
}


  这个程序用了一个简单的算法实现了按键的消抖。作为这种很简单的演示程序,我们可以这样来写,但是实际做项目开发的时候,程序量往往很大,各种状态值也很多, while(1)这个主循环要不停的扫描各种状态值是否有发生变化,及时的进行任务调度,如果程序中间加了这种 delay 延时操作后,很可能某一事件发生了,但是我们程序还在进行 delay 延时操作中,当这个事件发生完了,程序还在 delay 操作中,当我们 delay 完事再去检查的时候,已经晚了,已经检测不到那个事件了。为了避免这种情况的发生,我们要尽量缩短 while(1)循环一次所用的时间,而需要进行长时间延时的操作,必须想其它的办法来处理。

  那么消抖操作所需要的延时该怎么处理呢?其实除了这种简单的延时,我们还有更优异的方法来处理按键抖动问题。举个例子:我们启用一个定时中断,每 2ms 进一次中断,扫描一次按键状态并且存储起来,连续扫描 8 次后,看看这连续 8 次的按键状态是否是一致的。8 次按键的时间大概是 16ms,这 16ms 内如果按键状态一直保持一致,那就可以确定现在按键处于稳定的阶段,而非处于抖动的阶段,如图。



  假如左边时间是起始 0 时刻,每经过 2ms 左移一次,每移动一次,判断当前连续的 8 次按键状态是不是全 1 或者全 0,如果是全 1 则判定为弹起,如果是全 0 则判定为按下,如果0 和 1 交错,就认为是抖动,不做任何判定。想一下,这样是不是比简单的延时更加可靠?

  利用这种方法,就可以避免通过延时消抖占用单片机执行时间,而是转化成了一种按键状态判定而非按键过程判定,我们只对当前按键的连续 16ms 的 8 次状态进行判断,而不再关心它在这 16ms 内都做了什么事情,那么下面就按照这种思路用程序实现出来,同样只以k4 为例。
#include

sbit addr0 = p1^0;
sbit addr1 = p1^1;
sbit addr2 = p1^2;
sbit addr3 = p1^3;
sbit enled = p1^4;
sbit key1 = p2^4;
sbit key2 = p2^5;
sbit key3 = p2^6;
sbit key4 = p2^7;

unsigned char code ledchar[] = { //数码管显示字符转换表
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e
};
bit keysta = 1; //当前按键状态

void main(){
bit backup = 1; //按键值备份,保存前一次的扫描值
unsigned char cnt = 0; //按键计数,记录按键按下的次数
ea = 1; //使能总中断
enled = 0; //选择数码管 ds1 进行显示
addr3 = 1;
addr2 = 0;
addr1 = 0;
addr0 = 0;
tmod = 0x01; //设置 t0 为模式 1
th0 = 0xf8; //为 t0 赋初值 0xf8cd,定时 2ms
tl0 = 0xcd;
et0 = 1; //使能 t0 中断
tr0 = 1; //启动 t0
p2 = 0xf7; //p2.3 置 0,即 keyout1 输出低电平
p0 = ledchar[cnt]; //显示按键次数初值

while (1){
//keysta = key4; //把当前扫描值暂存
if (keysta != backup){ //当前值与前次值不相等说明此时按键有动作
if (backup == 0){ //如果前次值为 0,则说明当前是弹起动作
cnt++; //按键次数+1
if (cnt >= 10){ //只用 1 个数码管显示,所以加到 10 就清零重新开始
cnt = 0;
}
p0 = ledchar[cnt]; //计数值显示到数码管上
}
//更新备份为当前值,以备进行下次比较
backup = keysta;
}
}
}
/* t0 中断服务函数,用于按键状态的扫描并消抖 */
void interrupttimer0() interrupt 1{
//扫描缓冲区,保存一段时间内的扫描值
static unsigned char keybuf = 0xff;

th0 = 0xf8; //重新加载初值
tl0 = 0xcd;
//缓冲区左移一位,并将当前扫描值移入最低位
keybuf = (keybuf<<1) | key4;
//连续 8 次扫描值都为 0,即 16ms 内都只检测到按下状态时,可认为按键已按下
if (keybuf == 0x00){
keysta = 0;
//连续 8 次扫描值都为 1,即 16ms 内都只检测到弹起状态时,可认为按键已弹起
}else if (keybuf == 0xff){
keysta = 1;
}
else{
//其它情况则说明按键状态尚未稳定,则不对 keysta 变量值进行更新
}
}

  这个算法是我们在实际工程中经常使用按键所总结的一个比较好的方法,介绍给大家,今后都可以用这种方法消抖了。当然,按键消抖也还有其它的方法,程序实现更是多种多样,大家也可以再多考虑下其它的算法,拓展下思路。

单片机消抖程序
    推荐文章


    PLC培训,PLC编程培训学校,工控培训学校
    PLC培训,PLC编程培训学校,工控培训学校
    PLC培训,PLC编程培训学校,工控培训学校
    PLC培训,PLC编程培训学校,工控培训学校