




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第3章 常用應用程序設計 3.1 數字濾波3.2 標度變換3.3 越限報警3.4 鍵盤控制程序3.5 顯示程序設計3.1 數字濾波 所謂數字濾波,就是在計算機中用某種計算方法對輸入的信號進行數學處理,以便減少干擾在有用信號中的比重,提高信號的真實性。 這種濾波方法不需要增加硬件設備,只需根據預定的濾波算法編制相應的程序即可達到信號濾波的目的。 數字濾波可以對各種干擾信號,甚至極低頻率的信號進行濾波。 數字濾波由于穩定性高,濾波參數修改也方便,一種濾波子程序可以被各控制回路調用,因此得到廣泛的應用。3.1 數字濾波3.1.1 程序判斷濾波 程序判斷濾波的方法,是根據生產經驗,確定出兩次采樣輸入信
2、號可能出現的最大偏差y。若超過此偏差值,則表明該輸入信號是干擾信號,應該去掉;如小于此偏差值,可將信號作為本次采樣值。 當采樣信號由于隨機干擾,如大功率用電設備的啟動或停止,造成電流的尖峰干擾或誤檢測,以及變送器不穩定而引起的嚴重失真等,使得采樣數據偏離實際值太遠,可采用程序判斷濾波。 程序判斷濾波可分為兩種,即限幅濾波和限速濾波。3.1 數字濾波1限幅濾波當| Y(n)-Y(n-1)|Y時,則取Y(n)= Y(n),取本次采樣值當| Y(n)-Y(n-1)|Y時,則取Y(n)= Y(n-1),取上次采樣值 Y(n)第n次采樣值; Y(n-1)第n-1次采樣值; Y相鄰兩次采樣值所允許的最大偏
3、差,它的大小取決于采樣周期T及被測參數Y應有的正常變化率。 一定要按照實際情況來確定Y,否則非但達不到濾波效果,反而會降低控制品質。Y通常可根據經驗數據獲得,必要時,也可由實驗得出。 3.1 數字濾波程序流程圖如圖3-1所示。 3.1 數字濾波 設Y存放在LIMIT單元,兩次采樣值Y(n-1)、Y(n)存放在DATA1、DATA2中,濾波結果存放在DATA單元中,限幅濾波程序如下: PUSHPSW;保護現場PUSHA CLRC;進位標志位清零MOVDATA, DATA1MOVA, DATA2SUBBA, DATA;求Y(n)Y(n-1)JNCCOMPARE;如果Y(n)- Y(n-1)0,轉C
4、OMPARECPLA;如果Y(n)- Y(n-1)Y, DATA1DATAOVER:POPA;恢復現場POPPSWRET;返回LIMITEQU30HDATA1EQU31HDATA2EQU32HDATAEQU33H 限幅濾波能有效地克服因偶然因素引起的脈沖干擾,但無法抑制周期性的干擾且平滑度差。3.1 數字濾波2限速濾波 設順序采樣時刻tn-1、tn、tn+1所采集的參數分別為Y(n-1)、Y(n)、Y(n+1),那么3.1 數字濾波 限速濾波是一種折衷的方法,既照顧了采樣的實時性,又顧及了采樣值變化的連續性。 缺點: 第一是Y的確定不夠靈活,必須根據現場的情況不斷更換新值; 第二是不能反映采樣
5、點數n3時各采樣數值受干擾情況。因此,它的應用受到一定的限制。 在實際使用中,可用 取代Y,這樣也可基本保持限速濾波的特性,雖增加一步運算,但靈活性大為提高。 3.1 數字濾波程序流程圖如圖3-2所示 3.1 數字濾波3.1.2 算術平均值濾波 算術平均值法濾波的實質即把一個采樣周期內對信號的n次采樣值進行算術平均,作為本次的輸出 ,即 (3-3) n值決定了信號平滑度和靈敏度。隨著n的增大,平滑度提高,靈敏度降低。應視具體情況選取n,以便得到滿意的濾波效果。為方便求平均值,n值一般取4、8、16之類的2的整數冪,以使用移位來代替除法。通常流量信號取12項,壓力信號取6項,溫度、成分等緩慢變化
6、的信號取2項甚至不平均。3.1 數字濾波 設8次采樣值依次存放在以DIGIT為首地址的連續單元中,求出平均值后,結果保留在SAMP單元中。計算的中間結果存放在FLAG和TEMP單元中,程序清單如下:PUSHPSW;現場保護PUSHAMOVFLAG, #00H;進位位清零MOVR0, #DIGIT;設置數據存儲區首址MOVR7, #08H;設置采樣數據個數CLRA;清累加器LOOP: ADDA, R0;兩數相加JNCNEXT;無進位,轉NEXTINCFLAG;有進位,進位位加13.1 數字濾波NEXT:INCR0 ;數據指針加1DJNZR7, LOOP;未加完,繼續加MOVR7, #03H;設置
7、循環次數DIVIDE:MOVTEMP, A;保存累加器中的內容MOVA,FLAG;累加結果除2CLRCRRCAMOVFLAG, A MOVA, TEMPRRCADJNZR7, DIVIDE;未結束,繼續執行MOVSAMP,A;保存結果至SAMP中POPA;恢復現場POPPSWRET3.1 數字濾波 算術平均值濾波主要用于對壓力、流量等周期脈動的采樣值進行平滑加工,但對偶然出現的脈沖性干擾的平滑作用尚不理想,因而它不適用于脈沖性干擾比較嚴重的場合。另外該濾波方法比較浪費RAM。3.1 數字濾波3.1.3 加權平均值濾波加權平均值濾波法公式為(3-4) 其中,k0、k1、kn-1為加權系數,體現了
8、各次采樣值在平均值中所占的比例,它們都為大于0的常數項,且滿足(3-5) 一般采樣次數愈靠后,取的比例愈大,這樣可增加新的采樣值在平均值中的比例。這種濾波方法可以根據需要突出信號的某一部分,抑制信號的另一部分。適用于純滯后較大的被控對象。3.1 數字濾波3.1.4 中值濾波 所謂中值濾波是對某一參數連續采樣n次(一般n取奇數),然后把n次的采樣值從小到大或從大到小排隊,再取中間值作為本次采樣值。 n 個數據按大小順序排隊的具體做法是兩兩進行比較,設R1為存放數據區首地址,先將(R1)與(R1)+1)進行比較,若是(R1)(R1)+1)則不交換存放位置,否則將兩數位置對調。繼而再取(R1)+1)
9、與(R1)+2)比較,判斷方法亦然,直到最大數沉底為止。然后再重新進行比較,把次大值放到n-1位,如此做下去,則可將n個數從小到大順序排列。 3.1 數字濾波 設采樣值從8位A/D轉換器輸入5次,存放在SAMP為首地址的內存單元中,其程序流程圖如圖3-3所示 。3.1 數字濾波程序清單如下 :ORG8000HINTER:MOVR4, #04H;置大循環次數SORT:MOVA, R4;小循環次數R5MOVR5, AMOVR1, #SAMP;采樣數據存放首地址R1LOOP:MOVA, R1;比較INCR1MOV R2, ACLRCSUBBA, R1MOVA, R2JCDONE3.1 數字濾波MOV
10、 A, R1;(R1)(R1)+1)DECR1XCHA, R1INCR1MOVR1, ADONE: DJNZR5, LOOP;R50,小循環繼續進行DJNZR4, SORT;R40,大循環繼續進行INCR1MOVR1, ARET 中值濾波對于去掉由于偶然因素引起的波動或采樣器不穩定而造成的誤差所引起的脈動干擾比較有效。若變量變化比較緩慢,采用中值濾波效果比較好,但對快速變化過程的參數(如流量),則不宜采用。一般n取35次。3.1 數字濾波3.1.5 去極值平均濾波 去極值平均值濾波的算法是:連續采樣n次,去掉一個最大值,再去掉一個最小值,求余下n-2個采樣值的平均值。程序的流程圖如圖3-4所示
11、。 為使平均濾波方便,n-2應為2、4、8、16,故n常取4、6、10、18。3.1 數字濾波圖3-4 去極值平均濾波3.1 數字濾波3.1.6 滑動平均濾波 滑動平均濾波法把n個測量數據看成一個隊列,隊列的長度固定為n,每進行一次新的采樣,把測量結果放入隊尾,而去掉原來隊首的一個數據,這樣在隊列中始終有n個“最新”的數據。然后把隊列中的n個數據進行算術平均運算,就可獲得新的濾波結果。 滑動平均值濾波對周期性干擾有良好的抑制作用,平滑度高,靈敏度低;但對偶然出現的脈沖性干擾的抑制作用差,不易消除由于脈沖干擾引起的采樣值的偏差,因此它不適用于脈沖干擾比較嚴重的場合,而適用于高頻振蕩系統。 通常對
12、流量信號,n取12,壓力信號n取4,液面參數n取412,溫度信號n取14。3.1 數字濾波 假定n個雙字節型采樣值,40H單元為采樣隊列內存單元首地址,n個采樣值之和不大于16位。新的采樣值存于3EH、3FH單元,濾波值存于60H、61H單元。FARFIL為算術平均濾波程序。程序清單為:MOVR2, N-1;采樣個數MOVR0, 42H;隊列單元首地址MOVR1, 43HLOOP:MOVA, R0;移動低字節DECR0DECR0MOVR0, AMOVA, R0;修改低字節地址ADDA, 04HMOVR0, A3.1 數字濾波MOVA, R1;移動高字節DECR1DECR1MOVR1, AMOV
13、A, R1;修改高字節地址ADDA, 04HMOVR1, ADJNZR2, LOOPMOVR0, 3EH;存新的采樣值MOVR1, 3FHACALLFARFIL;求算術平均值RET3.1 數字濾波3.1.7 低通數字濾波 對于變化過程比較緩慢的隨機變量采用短時間內連續采樣,然后求平均值的方法進行濾波,其效果往往不夠理想。為了提高濾波效果,可以仿照模擬系統RC低通濾波器的方法,將普通硬件RC低通濾波器的微分方程用差分方程來表示,便可以用軟件算法來模擬硬件濾波器的功能。 RC低通濾波器如圖3-5所示。圖3-5 RC低通濾波器3.1 數字濾波 由圖3-5可以寫出模擬低通濾波器的傳遞函數為(3-6)
14、其中, 為RC濾波器的時間常數, 。 將式(3-6)離散后,可得:Y(n)=(1-)Y(n-1)+X(n) (3-7) 式中,X(n)本次采樣值; Y(n-1)上次的濾波輸出值; 濾波系數,3.1 數字濾波 RC濾波器時間常數,=RC; T采樣周期;Y(n)本次濾波的輸出值。 低通數字濾波適用于高頻和低頻的干擾信號。3.1 數字濾波3.1.8 復合濾波程序 為了進一步提高濾波效果,改善控制精度,有時可以把兩種或兩種以上有不同濾波效果的數字濾波器組合起來,形成復合數字濾波器,或稱多級數字濾波器。 例如:把中值濾波和算術平均值濾波結合起來,就可以結合兩者的優點,既可以消除周期性的干擾信號,又可對隨
15、機的脈沖干擾信號進行濾波。濾波步驟為: 把n次采樣值按照從大到小或者從小到大的順序排列。 采用中值濾波,去掉最大值和最小值。 對其余的n-2個采樣值取算術平均值,作為濾波的輸出值。3.1 數字濾波 如果把n次采樣值已經按照從小到大的順序排列了,并且依次為Y1、Y2、Yn,則濾波輸出值為 (3-8) 此外,也可以采用多重濾波的方法,把多個濾波器串聯起來,前一個數字濾波器的輸出作為后一個數字濾波器的輸入。 比如:可以把兩個低通濾波器串聯起來,形成雙重濾波,這樣濾波效果會更好些。其濾波算式可以采用迭代方法求出。 3.1 數字濾波由式(3-7)可知:第一級濾波輸出為 Y(n)=(1-)Y(n-1)+X
16、(n) (3-9) 第二級濾波輸出為 Z(n)=(1-)Z(n-1)+Y(n) (3-10)將式(3-9)代入式(3-10)得Z(n)=(1-)Z(n-1)+(1-)Y(n-1)+2X(n) (3-11)3.1 數字濾波由式(3-10)可以求出 Y(n)= Z(n)-(1-)Z(n-1) (3-12)再用n-1代替n,可得Y(n-1)= Z(n-1)-(1-)Z(n-2) (3-13)將式(3-13)代入式(3-11),就得到兩級數字濾波算式Z(n)=2(1-)Z(n-1)-(1-)2Z(n-2)+2X(n) (3-14)3.2 標度變換標度變換: 在計算機控制系統中,生產中的各個參數都有著不
17、同的數值和量綱,所有這些參數都經過變送器轉換成A/D轉換器所能接收的05V統一電壓信號,又由AD轉換成00FFH(8位)的數字量。為進一步顯示、記錄、打印以及報警等,必須把這些數字量轉換成不同的單位,以便操作人員對生產過程進行監視和管理。這就是所謂的標度變換。3.2 標度變換3.2.1 線性參數標度變換 所謂線性參數,指一次儀表測量值與A/D轉換結果具有線性關系,或者說一次儀表是線性刻度的。 標度變換公式為 (3-15) 式中, A0 一次測量儀表的下限; Am 一次測量儀表的上限; Ax 實際測量值(工程量); N0 儀表下限對應的數字量; Nm 儀表上限對應的數字量; Nx 測量值所對應的
18、數字量。3.2 標度變換 為使程序簡單,一般把被測參數的起點A0(輸入信號為0)所對應的A/D輸出值為0,即N0=0,這樣上式可化作(3-16) 比如:某熱處理爐溫度測量儀表的量程為2001000,在某一時刻計算機采樣并經數字濾波后的數字量為0CDH,設儀表量程為線性的,求出此時溫度值。A0=200 ,Am=1000 ,Nx=0CDH=(205)D,Nm=0FFH=(255)D,根據式(3-16)可得此時溫度為3.2 標度變換 有時,工程量的實際值還需經過一次變換。如電壓測量值是電壓互感器的二次測的電壓,則其一次側的電壓還有一個互感器的變比問題,這時上式應再乘上一個比例系數,即(3-17) 3
19、.2 標度變換3.2.2 非線性參數標度變換比如:在過程控制中,最常見的非線性關系是差壓變送器信號P與流量Q的關系(3-18) 式中,Q流量; K流量系數,與流體的性質及節流裝置的尺寸有關;P節流裝置前后的差壓。3.2 標度變換據此,可得測量流量時的標度變換式為 整理得 (3-19) 3.2 標度變換式中 Q0流量儀表的下限值; Qm流量儀表的上限值; Qx被測量的流量值; N0差壓變送器下限所對應的數字量; Nm差壓變送器上限所對應的數字量; Nx差壓變送器所測得的差壓值(數字量)。 對于流量測量儀表,一般下限取0,此時Q0=0,N0=0,故上式變為(3-20) 3.3 越限報警 在計算機控
20、制系統中,為了安全生產,對于一些重要的參數或系統部位,都設有上、下限檢查及報警系統,以便提醒操作人員注意或采取相應的措施。其方法就是把計算機采集的數據經計算機進行數據處理、數字濾波、標度變換之后,與該參數上、下限給定值進行比較,如果高于(或低于)上限(或下限),則進行報警,否則就作為采樣的正常值,以便進行顯示和控制。 報警系統一般為聲光報警信號,在某些系統中,需要增加功能,還帶有打印輸出,如記下報警的參數、時間等,并能自動進行處理,如自動切換到手動,切斷閥門或自動撥出電話號碼等。3.3 越限報警報警程序的設計方法主要有兩種: 一種是軟件報警。這種方法的基本作法是把被測參數如溫度、壓力、流量、速
21、度、成分等參數,經傳感器、變送器、AD轉換送入計算機后,再與規定的上、下限值進行比較,根據比較的結果進行報警或處理,整個過程都由軟件實現。 另一種是直接報警。基本作法是被測參數與給定值的比較在傳感器中進行,如果被測參數超過給定值,就會通過硬件向CPU提出中斷請求,CPU響應中斷后,會產生報警信號。3.3 越限報警不論是軟件報警,還是直接報警,都需要經過以下三個步驟: 對被測參數進行采樣。 將采樣值與給定值的上、下限值進行比較。 根據比較結果執行相應的報警處理程序。下面分別舉例介紹這兩種報警程序的設計。3.3 越限報警3.3.1 軟件報警程序設計 假設被測參數的采樣值為Ux,設定該參數的上、下限
22、值分別為Umax、Umin。要求若被測參數Ux Umax時,則上限報警;若被測參數Ux Umax嗎ALARM1:CJNEA, 31H, BB;Ux Umax,轉AOUT1AJMPALARM1BB:JCAOUT2;Ux Umin,轉AOUT2AJMPDONEAOUT1:SETB00H;置Ux超上限報警標志AJMPDONEAOUT2:SETB01H;置Ux越下限報警標志AJMPDONE3.3 越限報警3.3.2 直接報警程序 這種報警方法的前提條件是被測參數與給定值的比較是在傳感器中進行的。當檢測值超過上限或低于下限時,結點開關閉合,從而產生報警信號。這類報警系統的電路如圖3-8所示。3.3 越限
23、報警 在圖3-8中,SL1和SL2分別為被測參數的上、下限報警結點。當被測參數處于正常范圍時,P1.0和P1.1均為高電平,當參數超過上限或低于下限時,其中的一個結點就會閉合,這樣就會由高電平變為低電平,向CPU發出中斷請求。CPU響應中斷后,讀入報警狀態P1.0和P1.1,然后從P1.4和P1.5輸出報警信號,完成越限報警。 3.3 越限報警具體報警程序如下:ORG6000HAJMPMAIN;上電自動轉向主程序ORG0003H;外部中斷方式0入口地址AJMPALARMORG0200HMAIN:SETBIT0;選擇邊沿觸發方式SETBEX0;允許外部中斷0SETBEA;CPU允許中斷HERE:
24、SJMPHERE;模擬主程序ORG0220HALARM:MOVA, #0FFH;設P1口為輸入口MOVP1, AMOVA, P1;取報警狀態SWAPA;ACC.7ACC.4與ACC.3ACC.0交換MOVP1, A;輸出報警信號RETI3.3 越限報警 在實際的控制系統中,往往為了避免測量值在極限值附近擺動造成頻繁報警,可以在上、下限附近設定一個回差帶,如圖3-9所示。 圖3-9 上、下限設置回差帶3.3 越限報警 H是上限帶,L是下限帶。規定只有當被測量值越過A點時,才認為越過上限,測量值穿越H帶區,下降到B點以下才認為是復限。同樣道理,測量值在L帶區內擺動均不做超越下限處理,只有它回到D點
25、之上時,才作越下限后復位處理。這樣就避免了頻繁的報警和復限。具體上、下限帶寬的選擇應根據被測參數的具體情況來決定。 3.4 鍵盤控制程序3.4.1 鍵盤的組成、特點及消除抖動的措施1鍵盤的組成及特點 一個按鍵電路如圖3-10所示。當按鍵未按下時,VA=1,為高電平;當按鍵S按下時,VA=0,為低電平。因此,可以通過高、低電平的檢測,便可確定按鍵是否被按下。 圖3-10 按鍵電路3.4 鍵盤控制程序 由于機械觸點的彈性作用,一個按鍵開關在閉合或斷開時不會馬上穩定下來,會有瞬間的抖動,具體波形如圖3-11所示。 圖3-11 按鍵抖動波形3.4 鍵盤控制程序2消除按鍵抖動的措施 消除按鍵抖動的措施有
26、兩種:硬件方法和軟件方法。(1)硬件方法 采用RC濾波消抖電路或RS雙穩態消抖電路,如圖3-12所示。3.4 鍵盤控制程序(2)軟件方法 當按鍵數量較多時,硬件消抖將無法勝任。在這種情況下,可以采用軟件的方法進行消抖。在第一次檢測到有按鍵閉合時,首先執行一段延時10ms的子程序,然后再確認該按鍵電平是否仍保持閉合狀態電平,如果保持閉合狀態電平則確認為真正有按鍵按下,從而消除了抖動的影響。3.4 鍵盤控制程序3.4.2 獨立式按鍵接口技術 所謂獨立式按鍵就是每個按鍵各接一根輸入線,各個按鍵的工作狀態互不影響。因此,通過檢測輸入線的電平狀態可以很容易判斷哪個按鍵被按下了。 如圖3-13所示為利用8
27、255A可編程并行接口擴展的獨立式按鍵電路。當某一按鍵未被按下時,對應位應為1,當按鍵按下時,對應位應為0,因此,用位檢測可以識別按鍵的工作狀態。3.4 鍵盤控制程序圖3-13 利用8255A可編程并行接口擴展的獨立式按鍵3.4 鍵盤控制程序 由圖3-13可知8255A的口地址為:PA口地址為7FFCH、PB口地址為7FFDH、PC口地址為7FFEH、控制口地址為7FFFH。查詢方式編程如下:ORG3000HMOVDPTR, #7FFFH;8255A初始化MOVA, #90HMOVXDPTR, AKBSPR:ACALLKEY;讀鍵的狀態JZDONE;若無按鍵閉合,轉DONEACALLDL10m
28、S;若有鍵按下,延時10mS以防抖動ACALLKEY;重讀鍵的狀態JZDONE;若無按鍵閉合,轉DONEJBACC.0, S1;轉S1鍵處理JBACC.1, S2;轉S2鍵處理3.4 鍵盤控制程序JBACC.2, S3;轉S3鍵處理JBACC.3, S4;轉S4鍵處理JBACC.4, S5;轉S5鍵處理JBACC.5, S6;轉S6鍵處理JBACC.6, S7;轉S7鍵處理JBACC.7, S8;轉S8鍵處理DONE: RETKEY:MOVDPTR, #7FFCH;判斷有無按鍵閉合MOVXA, DPTRCPLA;若(A)=0,則無按鍵閉合RET3.4 鍵盤控制程序DL10mS:MOVR5, #
29、14H;延時10mS子程序DL:MOVR6, #0FFHDL0:DJNZR6, DL0DJNZR5, DLRETS1:S1鍵處理S2:S2鍵處理3.4 鍵盤控制程序 獨立式鍵盤與計算機的接口也可以采用中斷方式,如圖3-14所示。 3.4 鍵盤控制程序3.4.3 矩陣式鍵盤接口技術1矩陣式鍵盤工作原理 矩陣式鍵盤由行線和列線組成,按鍵位于行、列線的交叉點上,行、列線分別連接到按鍵開關的兩端。行線通過上拉電阻接到5V上,如圖3-15所示 圖3-15 矩陣式鍵盤結構3.4 鍵盤控制程序 如圖3-15所示,行線通過上拉電阻接到5V上,平時無按鍵動作時,行線處于高電平狀態,而當有按鍵按下時,行線電平狀態
30、將由與此行線相連的列線電平決定。列線電平如果為低,則行線電平為低;列線電平如果為高,則行線電平亦為高。這一點是識別矩陣鍵盤按鍵是否被按下的關鍵所在。 3.4 鍵盤控制程序2按鍵的識別方法 目前常用的方法有兩種:一種是用硬件電路來識別,稱為編碼鍵盤;另一種是利用軟件方法來識別,稱為非編碼鍵盤。 在編碼鍵盤中設有硬件檢測電路,以確定哪一個按鍵閉合,并產生該鍵的代碼,非編碼鍵盤則是依靠外部的硬件電路和軟件來判別哪一個按鍵閉合。 常用的非編碼鍵盤的按鍵識別方法有兩種,一種是掃描法,另一種是線反轉法。3.4 鍵盤控制程序(1)掃描法 矩陣鍵盤按鍵的識別方法,此方法分兩步進行:第一步,識別鍵盤有無鍵被按下
31、;第二步,如果有鍵被按下,識別出具體的按鍵。 識別鍵盤有無鍵被按下的方法是:讓所有列線均置為0電平,檢查各行線電平是否有變化,如果有變化,則說明有鍵被按下,如果沒有變化,則說明無鍵被按下。(實際編程時應考慮按鍵抖動的影響,通常總是采用軟件延時的方法進行消抖處理。) 識別具體按鍵的方法是(亦稱之為掃描法):逐列置零電平,其余各列置為高電平,檢查各行線電平的變化,如果某行電平由高電平變為零電平,則可確定此行此列交叉點處的按鍵被按下。3.4 鍵盤控制程序(2)線反轉法線反轉法只須經過兩步便能獲得此按鍵所在的行與列的值。 第一步:將行線編程為輸入線,列線編程為輸出線,并使輸出線輸出為全零電平,則行線中
32、電平由高到低所在行為按鍵所在行。 第二步:同第一步完全相反,將行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全零電平,則列線中電平由高到低所在列為按鍵所在列。 綜合一、二兩步的結果,可確定按鍵所在行和列,從而識別出所按的鍵。3.4 鍵盤控制程序線反轉法的原理如圖3-16所示。 圖3-16 線反轉法原理圖3.4 鍵盤控制程序 假設7號鍵被按下,那么: 第一步即在P1.0P1. 3輸出全為0,然后,讀入P1. 4P1.7位的狀態,結果P1.5=0,而P1.4、P1.6和P1.7均為1,因此,第1行出現電平的變化,說明第1行有鍵按下; 第二步讓P1.4P1.7輸出全為0,然后,讀入P1.0P1
33、.3位,結果P1.0=0,而P1.1、P1.2和P1.3均為1,因此第3列出現電平的變化,說明第3列有鍵按下。 綜合一、二兩步,即第1行第3列按鍵被按下,此按鍵即是7號鍵。3.4 鍵盤控制程序3鍵盤工作方式 鍵盤工作方式有3種,即:編程掃描、定時掃描和中斷掃描。(1)編程掃描法 所謂編程掃描就是CPU對鍵盤的掃描采取程序控制方式,一旦進入鍵掃描狀態,則反復地掃描鍵盤,等待用戶從鍵盤上輸入命令或數據。而在執行鍵入命令或處理鍵入數據過程中,CPU將不再響應鍵入要求,直到CPU返回重新掃描鍵盤為止。3.4 鍵盤控制程序(2)定時掃描法 定時掃描工作方式就是CPU每隔一定的時間(例如10ms)對鍵盤掃
34、描一遍。當發現有鍵按下時,便進行讀入鍵盤操作,以求出鍵值,并分別進行處理。定時時間間隔由單片機內部定時器/計數器來完成,這樣可以減少計算機掃描鍵盤的時間,以減少CPU的開銷。具體做法是,當定時時間到,定時器便自動輸出一脈沖信號,使CPU轉去執行掃描程序。(3)中斷掃描法 當沒有鍵入操作時,CPU不對鍵盤進行掃描,以節省出大量的時間對系統進行監控和數據處理。一旦鍵盤有輸入,則向CPU申請中斷。CPU響應中斷后,即轉到相應的中斷服務程序,對鍵盤進行掃描,以便判別鍵盤上閉合鍵的鍵號,并做出相應的處理。3.4 鍵盤控制程序 綜上所述,對鍵盤所做的工作分為三個層次: 第1層:監視鍵盤的輸入。體現在鍵盤的
35、工作方式上就是: 編程掃描工作方式; 定時掃描工作方式; 中斷掃描工作方式。 第2層:確定具體按鍵。體現在按鍵的識別方法上就是: 掃描法; 線反轉法。 第3層:鍵功能程序執行。3.4 鍵盤控制程序4鍵盤接口及編程方法 圖3-17為一個48矩陣鍵盤通過8255A擴展IO口與80C51單片機的接口電路原理圖。圖3-17 8255A擴展I/O口組成的48矩陣式鍵盤3.4 鍵盤控制程序 在圖3-17中,8255A的PA、PB、PC口地址分別為:7FFCH、7FFDH、7FFEH,控制口地址為7FFFH。當PA口工作于方式0輸出,PC口低4位工作于方式0輸入時,方式命令控制字可設為89H。 鍵盤掃描子程
36、序完成如下4個功能。(1)判斷鍵盤上有無鍵閉合。(2)消除按鍵機械抖動(3)判別閉合鍵的鍵號(4)使CPU對鍵的一次閉合僅作一次處理3.4 鍵盤控制程序鍵輸入子程序的框圖如圖3-18所示。3.4 鍵盤控制程序 下面為鍵輸入程序的清單,從該程序返回后輸入鍵的鍵號在BUFF單元中。ORG5000HPROG: MOV DPTR, #7FFFH ;8255A初始化 MOV A, #89H ;89H=10001001MOVX DPTR, AKEY1:ACALL KS1 ;判斷有無鍵閉合JNZ LK1 ;(A)0,說明有鍵閉合AJMP KEY1 ;(A)=0,說明無鍵閉合LK1:ACALL DL10ms
37、;延時10ms(消抖)ACALL KS1 ;再次判斷有無鍵閉合JNZ LK2 ;(A)0,有鍵閉合,轉LK2AJMP KEY1 ;繼續查詢3.4 鍵盤控制程序LK2: MOV R2, #0FEH ;掃描模式R2MOV R4, #00H ;R4為列計數器LK4:MOV DPTR, #7FFCH ;掃描模式8255PA口MOV A, R2 MOVXDPTR, AINC DPTRINC DPTRMOVX A, DPTR ;讀8255PC口JB ACC.0, LONE ; ACC.0=1,說明0行無鍵閉合,轉 判第1行MOV A, #00H ;0行有鍵閉合,首鍵號0A AJMP LKPLONE:JBA
38、CC.1, LTWOMOV A, #08H ;1行有鍵閉合,首鍵號8AAJMP LKP3.4 鍵盤控制程序LTWO:JB ACC.2, LTHRMOV A, #10H;2行有鍵閉合,首鍵號16AAJMP LKPLTHR:JB ACC.3, NEXT ;轉判下一列MOV A, #18H;3行有鍵閉合,首鍵號24ALKP:ADD A, R4 ;鍵號=列號+行首鍵號PUSH ALK3: ACALL KS1 ;判斷鍵是否釋放JNZ LK3 ;直到A=0,鍵釋放POP A MOV BUFF, A ;存鍵值(如:以備顯示) AJMPKNDNEXT:INC R4 ;列計數器加1MOV A,R2 ;判斷是否掃
39、描到最后一列JNB ACC.7, KND RL A ;A7A0 A73.4 鍵盤控制程序MOV R2, AAJMP LK4KND:AJMP KEY1KS1:MOV DPTR, #7FFCH ;全0掃描口PAMOV A, #00HMOVX DPTR, AINC DPTRINC DPTRMOVX A, DPTR ;讀鍵入狀態PC03CPL AANL A, #0FH ;屏蔽高4位(若(A)=0,說明鍵沒閉合)RETDL10ms: MOV R5, #14HDL:MOV R6, #0FFH DL0:DJNZ R6, DL0DJNZ R5, DLRET3.4 鍵盤控制程序3.4.4 雙功能鍵的設計及重鍵處
40、理技術1雙功能鍵的設計 解決的辦法是設置上/下檔開關來實現。如圖3-19所示。3.4 鍵盤控制程序 當上下檔鍵控制開關處于上檔時,按鍵為上檔功能,當此控制開關處于下檔時,按鍵為下檔功能。 在編程時,鍵盤掃描子程序應不斷測試P1.7口線的電平狀態,根據此電平狀態的高低,賦予同一個鍵兩個不同的鍵碼,從而由不同的鍵碼轉入不同的鍵功能子程序;或者同一個鍵只賦予一個鍵碼,但根據上/下檔標志,相應轉入上/下檔功能子程序。3.4 鍵盤控制程序2重鍵處理技術 當發現有按鍵按下時,可以用掃描法進行按鍵定位,則所有的行(或列)均應掃描一次,這時就可以確定按下的是單鍵或多鍵,同時確定出各按鍵的具體位置,然后可以采取
41、相應的措施: (1)如果是單鍵,則以此鍵為準,其后(指等待此鍵釋放的過程中)其他的任何按鍵均無效。 (2)如果是多鍵,則可以有3種處理方法,即: 可視此次按鍵操作無效(通常應鳴響以示告警)。 可視多鍵都有效,按掃描順序,將識別出的按鍵依次存入緩沖區中以待處理。 不斷對按鍵進行定位處理,或者只令最先釋放的按鍵有效,或者只令最后釋放的按鍵有效。3.5 顯示程序設計3.5.1 LED顯示器接口技術1LED數碼顯示器結構與原理 LED數碼顯示器是由發光二極管組成的,如圖3-20所示。 圖3-20 LED數碼管的結構及外形圖3.5 顯示程序設計 LED數碼顯示管中的dp顯示段用來顯示小數點。LED中每一
42、段二極管與數據線的對應關系如下:數據線:D7D6D5D4D3D2D1D0LED段:dpgfedcba這樣,共陰極和共陽極LED數碼顯示器的字型碼如表3-1所示。 3.5 顯示程序設計顯示字符共陰極接法共陽極接法顯示字符共陰極接法共陽極接法 03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82H31HCEH707HF8HY6EH91H87FH80HH76H89H96FH90HL38HC7HA77H88H“滅”00HFFHB7CH83H3.5 顯示程序設計2LED數碼顯示
43、器的顯示方式 圖3-21是4位共陰極LED顯示器的結構原理圖。3.5 顯示程序設計 從圖中可以看出,4位LED顯示器有4根位選線和84根段選線。則N位LED顯示器有N根位選線和8N根段選線。 段選線控制顯示字符的字型,而位選線則控制顯示位的亮、暗。 根據位選線和段選線的連接方法不同,顯示方式也不同。LED顯示器有靜態顯示和動態顯示兩種顯示方式。3.5 顯示程序設計(1)靜態顯示方式 所謂靜態顯示方式,是由單片機一次輸出顯示后,就能保持該顯示結果,直到下次送新的顯示字型碼為止。 LED工作于靜態顯示方式時,各位的共陰極(或共陽極)連接在一起并接地(或接+5V);每位的段選線分別與一個8位的鎖存輸
44、出相連。靜態顯示方式中,在同一時間里,每一位顯示的字符可以各不相同。 優點:顯示器的亮度都較高,占用機時少,顯示可靠,編程容易,管理也簡單,因而在工業過程控制中得到了廣泛的應用。 缺點:使用元件多,且線路比較復雜,因而成本比較高。3.5 顯示程序設計 圖3-22給出了用8255A的三個口控制三位LED數碼顯示器的接口電路 。3.5 顯示程序設計 假設8255A的控制口地址為7FFFH,PC、PB、PA三個口地址分別為7FFEH、7FFDH、7FFCH,實現PA口顯示“0”,PB口顯示“1”,PC口顯示“2”的程序如下:ORG2000HSDISP-1:MOV DPTR, #7FFFH;8255初
45、始化MOV A, #80H MOVX DPTR, AMOV DPTR, #7FFCH;PA口顯示“0” MOV A, #3FHMOVX DPTR, AINC DPTR ;PB口顯示“1”MOV A, #06HMOVX DPTR, AINC DPTR ;PC口顯示“2”MOV A, #5BHMOVX DPTR, ARET3.5 顯示程序設計 利用BCD-7段鎖存/譯碼/驅動器來實現靜態顯示,如圖3-23所示。 3.5 顯示程序設計 其中MC14513為BCD-7段鎖存/譯碼/驅動器,A、B、C、D為BCD碼輸入端,RBI為高位零消隱輸入端,RBO為高位零消隱輸出端,LE為鎖存允許端,為高電平時,
46、鎖存輸入的BCD碼。 此三位靜態顯示器能顯示0999之間的任何數。使該顯示器顯示456的程序如下:3.5 顯示程序設計ORG3F00HDISP-2:MOVA, #04H;數4送AMOVP1, A;寫入P1口SETBP1.4;鎖存入MC14513(1)中,百位顯示4MOVA, #05H;數5送AMOVP1, A;寫入P1口SETBP1.5;鎖存入MC14513(2)中,十位顯示5MOVA, #06H;數6送AMOVP1, A;寫入P1口SETBP1.6;鎖存入MC14513(3)中,個位顯示6CLRP1RET3.5 顯示程序設計(2)動態顯示方式 所謂動態顯示,就是單片機定時地對顯示器件掃描,在
47、這種方法中,顯示器件分時工作,每次只能有一個器件顯示,而其他各位熄滅,但由于人眼有視覺暫留現象,只要每位顯示間隔足夠短,則可造成多位同時亮的假象,達到顯示的目的。 優點:使用硬件少,因而價格低。 缺點:占用機時長,只要單片機不執行顯示程序,就立刻停止顯示。由此可見,這種顯示方式將使計算機的開銷增大。故在以工程控制為主的控制系統中應用較少。3.5 顯示程序設計 圖3-24所示為利用8255A擴展的4位LED動態顯示器接口電路。 圖3-24 4位LED動態顯示器接口電路3.5 顯示程序設計 假設8255A的口地址分別為:PA口地址為7FFCH、PB口地址為7FFDH、PC口地址為7FFEH、控制口
48、地址為7FFFH。 現在80C51的RAM存儲器中設置4個顯示緩沖單元77H7AH,分別存放4位顯示器的顯示數據,則動態顯示程序如下:ORG3000HMOV DPTR, #7FFFH ;8255初始化MOV A, #80H;PA、PB口均為方式0輸出MOVX DPTR, ADIR: MOV R0, #77H ;置緩沖器指針初值MOV R3, #08H ;置掃描模式初值,位選碼指向 最左邊一位MOV A, R33.5 顯示程序設計LD0:MOV DPTR, #7FFCH ;模式送到8255的PA口MOVX DPTR, AMOV A, R0 ;取顯示數據MOV DPTR, DSEG;獲得要顯示數據
49、的代碼MOVC A, A+DPTRMOV DPTR, #7FFDH;把顯示數據代碼送到PB口MOVX DPTR, AACALL DL1;延時1msJB ACC.0, LD1 ;判斷是否顯示到第4位INC R0 ;指向下一個緩沖區MOV A, R3RR A ;將A的內容左移一位,顯示下 一位MOV R3, AAJMP LD03.5 顯示程序設計LD1: RETDSEG:DB 3FH, 06H, 5BH, 4FH, 66H, 6DH;段數據表DSEG1:DB 7DH, 07H, 7FH, 6FH, 77H, 7CHDSEG2:DB 39H, 5EH, 79H, 71H, 73H, 3EHDSEG3
50、:DB 31H, 6EH, 1CH, 23H, 40H, 03HDSEG4:DB 18H, 00HDL1:MOV R7, #02H;延時子程序DL:MOV R6, #0FFHDL6:DJNZ R6, DL6DJNZ R7, DLRET3.5 顯示程序設計 圖3-25為采用BCD-7段譯碼驅動器MC14558構成的8位動態LED顯示器。 3.5 顯示程序設計 圖中MC14558為BCD-7段譯碼驅動器,其中,A、B、C、D為BCD碼輸入端,a、b、c、d、e、f、g為顯示器段輸出端。P1.0P1.3輸出段數據的BCD碼,經MC14558譯碼出的字型碼由a、b、c、d、e、f、g輸出到七段LED顯
51、示器中,P1.4P1.6經74LS138譯碼器得到8根位選線分別連接LED的接地端,以控制各位的選通。P1.7與74LS138的S1端相連,當P1.7=1時,8位顯示器顯示,當P1.7=0時,8位顯示器熄滅。如果要顯示小數點,可再增加一根口線與LED的dp相連。3.5 顯示程序設計(3)軟件、硬件譯碼顯示器接口 隨著集成電路的發展,現在已經生產出鎖存/譯碼/驅動器為一體,并能同時供多位LED顯示的芯片。比如:INTEL SIL公司生產的CMOS 8位的可驅動共陽極LED的驅動器ICM7218A,內設兩種7段譯碼器(十六進制譯碼器及BCD碼譯碼器)及8字節靜態RAM(可存放顯示數據),能在多位掃
52、描電路的控制下實現8位LED顯示。ICM7218A的引腳排列如圖3-26所示。3.5 顯示程序設計圖3-26 ICM7218A的引腳排列3.5 顯示程序設計各引腳功能如下。 adp:8段驅動器。 D1D8:8位驅動器。 :低電平有效,將輸入數據寫入RAM中。 MODE:低電平時,輸入數據。高電平時,輸入控制字。 ID7為數據傳送標志位。ID7=1時,表明后面輸入數據;ID7=0時,表明后面不輸入數據。 ID6為譯碼方式標志位。ID6=1時,進行十六進制譯碼;ID6=0時,進行BCD譯碼。3.5 顯示程序設計ID5為硬件和軟件譯碼選擇端。ID5=0時,由ICM7218A內部完成硬件譯碼;ID5=
53、1時,由軟件完成譯碼,輸入的8位數據直接控制8個段的顯示,格式如下: ID7ID6ID5ID4ID3ID2ID1ID0 a b c e g f d某位置1,則相應此位的段被點亮,但dp不同,當此位置置0時,小數點被點亮。ID4為為關閉信號。ID4=0時,關閉晶振、譯碼和顯示;ID4=1時,正常工作。3.5 顯示程序設計 上述ID4ID6是在MODE為高電平時的功能,即控制字所實現的功能,此時ID3ID0無效。如果進行硬件譯碼且MODE為低電平時,ID7ID4為無效,而ID3ID0為十六進制或BCD碼輸入值,相應的譯碼真值表如表3-2所示。ID0ID3二進制0000000100100011010
54、001010110011110001001101010111100110111101111BCD碼0123456789-EHLP“滅”十六進制碼0113456789ABCDEF3.5 顯示程序設計圖3-27所示為用ICM7218A構成的顯示電路。 3.5 顯示程序設計 如果想顯示數字“97843210”,可用軟件譯碼和硬件譯碼的方法得到。 軟件譯碼。 先找出各字符的編碼。根據a、b、c、d、e、f、g、dp各段與數據位的對應關系,可得97843210的各位編碼分別為:F7H、F0H、FFH、B6H、F5H、EDH、B0H、FBH,并且存入80C51內部RAM的60H67H單元中。設顯示器最左邊
55、一位為第一位,R0為顯示數據單元地址,起始單元為60H,R2為顯示的位數,則程序如下:3.5 顯示程序設計DISSOFT:SETBP1.7;置MODE高電平,準備寫控制字MOVA, #0B0H;控制字為B0HMOVDPTR, #0200H;設置ICM7218A的工作地址MOVXDPTR, A;輸出控制字CLRP1.7;置MODE為低電平,準備寫數據ACALLDISPLAY8;顯示8位數據RETDISPLAY8:MOVR0, #60H;顯示數據首地址MOVR2, #08H;共顯示8位MOVDPTR, #0200HAGAIN:MOVA, R0;取出顯示數據MOVXDPTR, A;輸出數據INCR0;指向下一位DJNZR2, AGAIN;8位未顯示完,繼續RET3.5 顯示程序設計 硬件譯碼。 采用硬件譯碼的數據格式為ID3ID2ID1ID0 高3位無效,現取000, 不顯示取為1,ID3ID0為4位編碼,具體編碼情況參見表3-2。 那么要顯示數字“97
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 客戶禮品費管理制度
- 家樂福考勤管理制度
- 家居實訓室管理制度
- 庫房輔料庫管理制度
- 引進種雞苗管理制度
- 影視類項目管理制度
- 微商代理商管理制度
- 快易購銷售管理制度
- 念佛堂值班管理制度
- 總公司安全管理制度
- 2024年高考物理熱點磁場中的旋轉圓、放縮圓、平移圓、磁聚焦模型(學生版)
- 三年級下冊語文單元字詞專項練習-第1單元
- 鳥巢建筑分析
- 聯合體施工組織設計審批流程
- 中華民族共同體概論課件專家版10第十講 中外會通與中華民族鞏固壯大(明朝時期)
- 2021年10月自考02326操作系統試題及答案含解析
- 中華民族共同體概論課件專家版5第五講 大一統與中華民族共同體初步形成(秦漢時期)
- MOOC 大數據與法律檢索-湖南師范大學 中國大學慕課答案
- GB/T 19964-2024光伏發電站接入電力系統技術規定
- MSDS基礎知識培訓課件
- 疝氣護理課件
評論
0/150
提交評論