女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式電路圖
[導(dǎo)讀]用單片機(jī)或ARM做的產(chǎn)品經(jīng)常會(huì)遇到有鍵盤輸入的產(chǎn)品,而鍵盤輸入有一個(gè)繞不過(guò)去的問(wèn)題就是:鍵盤去抖。見(jiàn)下圖 當(dāng)按鍵開(kāi)關(guān)閉合或者斷開(kāi)時(shí)各有一段電平不穩(wěn)定的時(shí)期,按鍵開(kāi)關(guān)

用單片機(jī)或ARM做的產(chǎn)品經(jīng)常會(huì)遇到有鍵盤輸入的產(chǎn)品,而鍵盤輸入有一個(gè)繞不過(guò)去的問(wèn)題就是:鍵盤去抖。見(jiàn)下圖

 

當(dāng)按鍵開(kāi)關(guān)閉合或者斷開(kāi)時(shí)各有一段電平不穩(wěn)定的時(shí)期,按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上就穩(wěn)定的接通,在斷開(kāi)時(shí)也不會(huì)一下子徹底斷開(kāi),而是在閉合和斷開(kāi)的瞬間伴隨了一連串的電平抖動(dòng)。這種抖動(dòng)一般都在10ms左右。為了確保程序?qū)Π存I的一次閉合或者一次斷開(kāi)只響應(yīng)一次,必須進(jìn)行按鍵的去抖處理。當(dāng)檢測(cè)到按鍵狀態(tài)變化時(shí),不是立即去響應(yīng)動(dòng)作,而是先等待閉合或斷開(kāi)穩(wěn)定后再進(jìn)行處理。

按鍵去抖方法可分為硬件去抖和軟件去抖,硬件去抖不在本文的討論中,本文只討論軟件去抖。

一般的軟件去抖就是程序在檢測(cè)到按鍵閉合或斷開(kāi)時(shí)調(diào)用一段延時(shí)子程序(在C語(yǔ)言中叫函數(shù)),程序在此死等10ms或更長(zhǎng)。延時(shí)過(guò)后再檢測(cè)按鍵的狀態(tài)是否與延時(shí)前的狀態(tài)一致,若一致就執(zhí)行鍵盤程序部分,若不一致,則跳過(guò)執(zhí)行鍵盤程序。

這種方法在程序工作量不是很大時(shí)是沒(méi)有問(wèn)題的。但在一些CPU負(fù)荷量比較大的程序中,特別是在一些程序運(yùn)轉(zhuǎn)中有比較多的在不確定時(shí)間就會(huì)發(fā)生的中斷的情況下(外部中斷、串口中斷、定時(shí)器中斷等),在這里死等,就有可能造成某部分程序不能很好地被執(zhí)行,甚至程序跑飛等嚴(yán)重問(wèn)題。

本人經(jīng)過(guò)多年的編程,總結(jié)了一套解決這問(wèn)題的方法,供大家參考。

 

程序是用51匯編語(yǔ)言寫(xiě)的,大家若要用C語(yǔ)言編寫(xiě),參考這流程圖改一下就成。

先解釋這流程圖中的變量和子程序:

KSTEP: 步進(jìn)指示變量,當(dāng)程序從主程序進(jìn)入到此子程序后,立刻根據(jù)這KSTEP的值跳到相應(yīng)的程序段。

KEYSCAN:讀鍵盤子程序,若你的按鍵數(shù)量不多的話,直接讀IO口。按鍵數(shù)量多的話,就要用矩陣方式讀鍵盤,這里不作贅述。

HASK: 位變量,讀鍵盤子程序中的位變量,當(dāng)讀鍵盤子程序KEYSCAN檢測(cè)到有鍵閉合時(shí)置“1”,反之置“0”。

R2: 鍵值變量,讀鍵盤子程序KEYSCAN讀出的鍵值。

KVALU: 鍵值變量,R2的鍵值送到這里,供此子程序下一次判斷或主程序使用。

K20MS: 20ms計(jì)時(shí)器變量,當(dāng)?shù)谝淮螜z測(cè)到有鍵閉合時(shí)往里面送值10。程序初始化中設(shè)定定時(shí)器中斷為2ms時(shí)間間隔。進(jìn)入定時(shí)器中斷后,首先判斷K20MS是否為0?若為0則直接退出定時(shí)器中斷;若不為0則將K20MS減1后再退出定時(shí)器中斷。這樣K20MS變量從10減到0時(shí)間為20ms。鍵斷開(kāi)時(shí)也是一樣地執(zhí)行。

KAVA: 位變量,告訴主程序:鍵閉合(斷開(kāi))有效。

程序解釋:

1. 程序初始化時(shí)KSTEP的值為0,所以一進(jìn)入本子程序,程序馬上就跳到標(biāo)號(hào)KSC0處,在此處調(diào)用讀鍵盤子程序KEYSCAN。

1.1 從KEYSCAN出來(lái)后,若位變量HASK的值為0,說(shuō)明沒(méi)有鍵閉合,程序直接跳到標(biāo)號(hào)RET處退出。

1.2 若位變量HASK的值為1,就是有鍵閉合,此時(shí)將數(shù)值1送入步進(jìn)指示變量KSTEP中,便于下次進(jìn)入本子程序時(shí),程序直接跳到標(biāo)號(hào)KSC1處。再將從KEYSCAN子程序讀出來(lái)的鍵值送入變量KVALU中,用于下次再調(diào)用讀鍵盤子程序KEYSCAN時(shí)與R2讀出的鍵值進(jìn)行比較。

最后將數(shù)值10送入20ms計(jì)時(shí)器變量K20MS中,用于2ms定時(shí)器中斷后減1,然后退出子程序。

2. 當(dāng)主程序再次調(diào)用本子程序時(shí),程序馬上就跳到標(biāo)號(hào)KSC1處。

2.1 在此處首先判別20ms計(jì)時(shí)器變量K20MS是否減到0(也就是判別20ms延時(shí)到了沒(méi)有?),若K20MS不為0(20ms延時(shí)還沒(méi)有到),則立即退出。

2.2 若K20MS為0(說(shuō)明20ms延時(shí)時(shí)間到了),再次調(diào)用讀鍵盤子程序KEYSCAN。調(diào)用KEYSCAN子程序后,再次判別位變量HASK是否有效?

2.2.1 若HASK無(wú)效,說(shuō)明上次(KSC0處)可能是受到一次干擾。于是復(fù)位KSTEP(清0),退出。使下次調(diào)用本程序時(shí),又從頭開(kāi)始。

2.2.2 若HASK有效,則將這次從KEYSCAN讀出的鍵值與上次讀出并存在KVALU中的鍵值進(jìn)行比較。

2.2.2.1 若比較值不同,則程序跳到標(biāo)號(hào)KE1處,將新的鍵值存入KAVALU中,20ms后再調(diào)用KEYSCAN子程序,再次比較。

2.2.2.2 若比較值相同,則說(shuō)明本次鍵閉合有效,于是置位KAVA(當(dāng)主程序是鍵按下執(zhí)行時(shí)),告訴主程序,鍵閉合有效,可以執(zhí)行此鍵所要做的程序了。同時(shí)將數(shù)值2送入步進(jìn)指示變量KSTEP中,便于下次進(jìn)入本子程序時(shí),程序直接跳到標(biāo)號(hào)KSC2處。最后將數(shù)值10送入20ms計(jì)時(shí)器變量K20MS中,在下次進(jìn)入KSC2標(biāo)號(hào)處,也得等20ms之后再判別鍵是否斷開(kāi)。

3. 現(xiàn)在主程序調(diào)用本子程序時(shí),程序馬上就跳到標(biāo)號(hào)KSC2處,在此也一樣,首先判別20ms計(jì)時(shí)器變量K20MS是否減到0(也就是判別20ms延時(shí)到了沒(méi)有?),若K20MS不為0(20ms延時(shí)還沒(méi)有到),則立即退出。若K20MS為0,調(diào)用讀鍵盤子程序KEYSCAN。

調(diào)用KEYSCAN子程序后,判別位變量HASK是否有效?

3.1 若HASK無(wú)效,說(shuō)明按鍵可能被釋放斷開(kāi),于是將數(shù)值3送入步進(jìn)指示變量KSTEP中,便于下次進(jìn)入本子程序時(shí)程序可以直接跳到標(biāo)號(hào)KSC3處。最后將數(shù)值10送入20ms計(jì)時(shí)器變量K20MS中,在下次進(jìn)入KSC3標(biāo)號(hào)處,也得等20ms之后再判別鍵是否繼續(xù)斷開(kāi)狀態(tài)。

3.2 若HASK有效,說(shuō)明按鍵繼續(xù)閉合狀態(tài),再比較KEYSCAN讀出的鍵值與上次讀出在KVALU中的鍵值進(jìn)行比較。

3.2.1 若比較值不同,則程序跳到標(biāo)號(hào)KE0處,重新開(kāi)始。

3.2.1 若比較值相同,則說(shuō)明按鍵還沒(méi)有斷開(kāi),繼續(xù)將數(shù)值10送入20ms計(jì)時(shí)器變量K20MS中,等20ms之后再進(jìn)入標(biāo)號(hào)KSC2處,再次判別按鍵是否斷開(kāi)。

4. 當(dāng)主程序調(diào)用本子程序時(shí),程序程序馬上跳到標(biāo)號(hào)KSC3處,還是首先判別20ms計(jì)時(shí)器變量K20MS是否減到0,若K20MS不為0(20ms延時(shí)還沒(méi)有到),則立即退出。若K20MS為0,調(diào)用讀鍵盤子程序KEYSCAN。

調(diào)用KEYSCAN子程序后,判別位變量HASK是否有效?

4.1 若HASK無(wú)效,說(shuō)明按鍵已經(jīng)完全釋放斷開(kāi),于是將數(shù)值0送入步進(jìn)指示變量KSTEP中,便于下次進(jìn)入本子程序時(shí),程序從頭開(kāi)始,同時(shí)置位KAVA(當(dāng)主程序是鍵釋放執(zhí)行時(shí)),告訴主程序,鍵釋放有效,可以執(zhí)行此鍵所要做的程序了。[!--empirenews.page--]

4.2 如果位變量HASK繼續(xù)有效,說(shuō)明又有鍵閉合了(雖然這種概率比較小,但程序得編進(jìn)去),根據(jù)新鍵值與老鍵值的相同與不同,分別跳到標(biāo)號(hào)KE3處,或者標(biāo)號(hào)KE0處執(zhí)行。

說(shuō)明:KE3標(biāo)號(hào)和KE7標(biāo)號(hào)下面都有SETB KAVA,實(shí)際編程時(shí)只用一次,根據(jù)你的主程序是在鍵按下執(zhí)行還是鍵釋放執(zhí)行選用。

本程序的特點(diǎn)就是:在等鍵閉合或斷開(kāi)去抖的那20ms時(shí)間,不是死等,而是做好標(biāo)記及置好必要的變量值后立即退出到主程序去做其他事情。程序每次從進(jìn)入到退出這個(gè)子程序中所花的時(shí)間一般為十幾微秒(不含讀鍵盤子程序KEYSCAN所花的時(shí)間,KEYSCAN花的時(shí)間根據(jù)按鍵數(shù)量的多少而不同,一般為幾個(gè)微秒到幾十微秒)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉