按键去抖动c语⾔编程,单⽚机实现电脑键盘去抖的编程设计当轻触开关合闭或是断掉时都有每段电平不平稳的時期,轻触开关在合闭时不容易⽴刻就平稳的接⼊,在断掉时也不容易突然之间完全断掉,只是在合闭和断掉的⼀瞬间随着了⼀个⼀个的电平颤动。这类颤动通常都会10ms上下。为了保证程序流程对功能键的⼀回合闭或是⼀回断掉只没有响应⼀回,务必开展功能键的去抖解决。当检验到功能键情况转变时,并不是马上去没有响应姿势,只是先等候合闭或断掉平稳后再开展解决。
功能键去抖⽅式 可分成硬件配置去抖和⼿机软件去抖,硬件配置去抖没有⽂中的探讨中,⽂中只探讨⼿机软件去抖。
通常的⼿机软件去抖就是说程序流程在检验到功能键合闭或断掉时启⽤每段廷时汇编程序(在c语⾔中叫涵数),程序流程再此死等10ms或更长。廷时之后再检验功能键的情况是不是与廷时前的情况相同,若相同就实⾏电脑键盘程序流程⼀部分,若不相同,则绕过实⾏电脑键盘程序流程。
这类⽅式 在程序流程劳动量并不是挺⼤时是沒有难题的。但在某些CPU负荷较为⼤的程序流程中,尤其某些程序流程运⾏中有较为多的在不确定性時间就会产⽣的终断的状况下(外界终断、串⼝终断、定时器中断等),这⾥死等,总有将会导致某⼀部分程序流程不可以⾮常好的被实⾏,乃⾄程序流程跑飞等⽐较严重难题。
⾃⼰历经很多年的程序编写,⼩结了⼀整套处理这难题的⽅式 ,供⼤家参考。
单⽚机设计电脑键盘去抖的编程设计
程序流程是⽤51汇编语⾔写的,⼤伙⼉若想⽤c语⾔撰写,参照这流程表改⼀下下就成。
先表述这流程表中的⾃变量和汇编程序:
KSTEP:步进电机标⽰⾃变量,当程序流程从⼦程序进到到此汇编程序后,马上依据这KSTEP的值跳⾄相对的程序语⾔。
KEYSCAN:读电脑键盘汇编程序,若你的功能键总数很少得话,⽴即读IO⼝。功能键总数多得话,
还要⽤向量⽅法读电脑键盘,这⼉未作赘⾔。
HASK:位⾃变量,读电脑键盘汇编程序中的位⾃变量,当读电脑键盘汇编程序KEYSCAN检验到有键合闭时置“1”,相反置“0”。
R2:键值⾃变量,读电脑键盘汇编程序KEYSCAN读取的键值。
KVALU:键值⾃变量,R2的键值送⾄这⼉,供此汇编程序下⼀回分辨或⼦程序应⽤。
K20MS:20ms记时器⾃变量,当初次检验到有键合闭时往⾥送值10。程序流程复位中设置定时器中断为2ms间隔时间。进到定时器中断后,最先分辨K20MS是不是为0?若此0则⽴即撤出定时器中断;若不以0则将K20MS减1后再撤出定时器中断。那样K20MS⾃变量从10瘦到0時间为20ms。键断掉时都是相同地实⾏。
KAVA:位⾃变量,告知⼦程序:键合闭(断掉)合理。
程序流程表述:
1.程序流程复位时KSTEP的数值0,因此⼀进到本⼦h程序流程,程序流程⽴刻就跳⾄型号KSC0处,在此地启⽤读电脑键盘汇编程序KEYSCAN。
1.1从KEYSCAN出去后,若位⾃变量HASK的数值0,表明沒有键合闭,程序流程⽴即跳⾄型号RET处撤出。
1.2若位⾃变量HASK的数值1,就是说有键合闭,这时将标值1送进步进电机标⽰⾃变量KSTEP中,有利于到时候进到本⼦h程序流程时,程序流程⽴即跳⾄型号KSC1处。再将从KEYSCAN汇编程序读出的键值送进⾃变量KVALU中,⽤以到时候再启⽤读电脑键盘汇编程序KEYSCAN时与R2读取的键值开展较为。
最终将标值10送进20ms记时器⾃变量K20MS中,⽤以2ms定时器中断后减1,随后撤出汇编程序。
2.当⼦程序再度启⽤本⼦h程序流程时,程序流程⽴刻就跳⾄型号KSC1处。
2.1在此地最先辨别20ms记时器⾃变量K20MS是不是瘦到0(也就是说辨别20ms廷时来到沒有?),若K20MS不以0(20ms廷时都还没到),则马上撤出。
2.2若K20MS为0(表明20ms廷时時间来到),再度启⽤读电脑键盘汇编程序KEYSCAN。启⽤KEYSCAN汇编程序后,再度辨别位⾃变量HASK是不是合理?
2.2.1若HASK失效,表明之前(KSC0处)将会是遭受⼀回⼲挠。因此校准KSTEP(清0),撤出。使到时候启⽤本程序流程时,⼜重新开始。
2.2.2若HASK合理,则将此次从KEYSCAN读取的键值与之前读取并存有KVALU中的键值开展较为。
2.2.2.1若较为值不⼀样,则程序流程跳⾄型号KE1处,将新的键值存进KAVALU中,20ms后再启⽤KEYSCAN汇编程序,再度较为。
2.2.2.2若较为值同样,则表明此次键合闭合理,因此置位KAVA(当⼦程序是键按住实⾏时),告知⼦程序,键合闭合理,能够实⾏此键所需做的程序流程了。⼀起将标值2送进步进电机标⽰⾃变量KSTEP中,有利于到时候进到本⼦h程序流程时,程序流程⽴即跳⾄型号KSC2处。最终将标值10送进20ms记时器⾃变量K20MS中,在到时候进到KSC2型号处,也得等20ms以后再辨别键是不是断掉。
c语言如何去学3.如今⼦程序启⽤本⼦h程序流程时,程序流程⽴刻就跳⾄型号KSC2处,再此也是,最先辨别20ms记时器⾃变量K20MS是不是瘦到0(也就是说辨别20ms廷时来到沒有?),若K20MS不以0(20ms廷时都还没到),则马上撤出。若K20MS为0,启⽤读电脑键盘汇编程序KEYSCAN。
启⽤KEYSCAN汇编程序后,辨别位⾃变量HASK是不是合理?
3.1若HASK失效,表明功能键将会被释放出来断掉,因此将标值3送进步进电机标⽰⾃变量KSTEP中,有利于到时候进到本⼦h程序流程时程序流程能够⽴即跳⾄型号KSC3处。最终将标值10送进20ms记时器⾃变量K20MS中,在到时候进到KSC3型号处,也得等20ms以后再辨别键是不是再次断掉情况。
3.2若HASK合理,表明功能键再次合闭情况,再较为KEYSCAN读取的键值与之前读取在KVALU中的键值开展较为。
3.2.1若较为值不⼀样,则程序流程跳⾄型号KE0处,从头开始。
3.2.1若较为值同样,则表明功能键都还没断掉,再次将标值10送进20ms记时器⾃变量K20MS中,等20ms以后再进到型号KSC2处,再度辨别功能键是不是断掉。
4.当⼦程序启⽤本⼦h程序流程时,程序流程程序流程⽴刻跳⾄型号KSC3处,還是最先辨别20ms记时器⾃变量K20MS是不是瘦到0,若K20MS不以0(20ms廷时都还没到),则马上撤出。若K20MS为0,启⽤读电脑键盘汇编程序KEYSCAN。
启⽤KEYSCAN汇编程序后,辨别位⾃变量HASK是不是合理?
4.1若HASK失效,表明功能键早已彻底释放出来断掉,因此将标值0送进步进电机标⽰⾃变量KSTEP中,有利于到时候进到本⼦h程序流程时,程序流程重新开始,⼀起置位KAVA(当⼦程序是键释放出来实⾏时),告知⼦程序,键释放出来合理,能够实⾏此键所需做的程序流程了。
4.2假如位⾃变量HASK再次合理,表明⼜有键合闭了(尽管这类⼏率较为⼩,但程序流程得编进来),依据新键值与⽼键值的同样与不⼀样,各⾃跳⾄型号KE3处,或是型号KE0处实⾏。
表明:KE3型号和KE7型号下边常有SETBKAVA,具体程序编写时仅⽤⼀回,依据你的⼦程序是在键按住实⾏還是键释放出来实⾏采⽤。
本程序流程的特性就是说:在等键合闭或断掉去抖的那20ms時间,并不是死等,只是搞好标识及置好必需的变量值后马上撤出到⼦程序去做别的事⼉。程序流程每⼀次从进到到撤出这⼀汇编程序中所花的時间通常为⼗多微秒(没有读电脑键盘汇编程序KEYSCAN所花的時
间,KEYSCAN花的時间依据功能键总数的是多少⽽不⼀样,通常为好多个微秒到⼀百多微秒)。
责任编辑;zl

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。