• <del id="qqie6"><sup id="qqie6"></sup></del>
  • <tfoot id="qqie6"></tfoot>
  • <ul id="qqie6"></ul>
  • 產品推薦:水表|流量計|壓力變送器|熱電偶|液位計|冷熱沖擊試驗箱|水質分析|光譜儀|試驗機|試驗箱


    儀表網>技術中心>應用設計>正文

    歡迎聯系我

    有什么可以幫您? 在線咨詢

    基于51單片機秒表的程序設計

       2012年07月11日 15:20  
      1.設計目的:
      
      (1)利用單片機定時器中斷和定時器計數方式實現秒、分定時。
      
      (2)通過LED顯示程序的調整,熟悉8155與8051,8155與LED的接口技術,熟悉LED動態顯示的控制過程。
      
      (3)通過鍵盤程序的調整,熟悉8155與矩陣式鍵盤的接口技術,熟悉鍵盤掃描原理。
      
      (4)通過閱讀和調試簡易秒表整體程序,學會如何編制含LED動態顯示、鍵盤掃描和定時器中斷等多種功能的綜合程序,初步體會大型程序的編制和調試技巧。
      
      2.設計步驟與要求
      
      (1)要求:以8位LED右邊2位顯示秒,左邊6位顯示0,實現秒表計時顯示。以4×4矩陣鍵盤的KE0、KE1、KE2等3鍵分別實現啟動、停止、清零等功能。
      
      (2)方法:用單片機定時器T0中斷方式,實現1秒定時;利用單片機定時器1方式3計數,實現60秒計數。用動態顯示方式實現秒表計時顯示,用鍵盤掃描方式取得KE0、KE1、KE2的鍵值,用鍵盤處理程序實現秒表的啟動、停止、清零等功能。
      
      (3)軟件設計:軟件整體設計思路是以鍵盤掃描和鍵盤處理作為主程序,LED動態顯示作為子程序。二者間的是:主程序查詢有無按鍵,無按鍵時,調用二次LED動態顯示子程序(約延時8ms)后再回到按鍵查詢狀態,不斷循環;有按鍵時,LED動態顯示子程序作為按鍵防抖延時被連續調用二次(約延時16ms),待按鍵處理程序執行完后,再回到按鍵查詢狀態,同時兼顧了按鍵掃描取值的準確性和LED動態顯示的穩定性。秒定時采用定時器T0中斷方式進行,60秒計數由定時器1采用方式3完成,中斷及計數的開啟與關閉受控于按鍵處理程序。由上述設計思路可設計出軟件流程圖如圖1.1所示。
      
      (5)程序編制:編程時置KE0鍵為“啟動”,置KE1鍵為“停止”,置KE2鍵為“清零”,因按鍵較少,在處理按鍵值時未采用散轉指令“JMP”,而是采用條件轉移指令“CJNE”,每條指令后緊跟著一條無條件跳轉指令“AJMP”,轉至相應的按鍵處理程序,如不是上述3個按鍵值則跳回按鍵查詢狀態。8位LED顯示的數據由顯示緩沖區30H~37H單元中的數據決定,順序是從左至右,動態顯示時,每位顯示持續時間為1ms,1ms延時由軟件實現,8位顯示約耗時8ms。主程序、按鍵查詢子程序采用第0組工作寄存器,顯示子程序采用第1組工作寄存器。1秒定時采用定時器T0方式1中斷,每50ms中斷一次,用21H做50ms計數單元,每20次為一個循環,計滿20次,60秒計數單元(20H)計數1次。60秒計數采用定時器T1方式2計數,計數脈沖采用軟件置位、復位P3.5口的方法實現,用20H單元做60秒計數單元,如定時器T1溢出,則20H單元被清零,20H單元的數據采用十進制計數,該數據被拆成個位和十位兩個數據后分別送至顯示緩沖區的30H、31H單元。
      
      按照上述思路可編制源程序如下:
      
      ORG0000H
      
      AJMPMAIN
      
      ORG000BH
      
      AJMPCONT
      
      ;主程序
      
      ;――――――――――初始化程序―――――――――――
      
      MAIN:MOVTMOD,#61H;置T0方式1定時,T1方式2計數
      
      MOVTH0,#3CH;T0置初值
      
      MOVTL0,#0B0H
      
      MOVTH1,#0C4H;T1置初值
      
      MOVTL1,#0C4H
      
      MOVDPTR,#4400H;8155控制口地址送DPTR
      
      MOVA,#43H;設置8155工作方式字
      
      MOVX@DPTR,A;設置PA、PB口輸出,PC口輸入
      
      MOV20H,#00H;60秒計數單元置初值
      
      MOV21H,#14H;50ms計數單元置初值
      
      MOVSP,#3FH;堆棧指針置初值
      
      MOVR2,#08H&n,bsp;;LED待顯示位數送R2
      
      MOVR0,#30H;顯示緩沖區首址送R0
      
      STAR:MOV@R0,#00H;顯示緩沖區清零
      
      INCR0
      
      DJNZR2,STAR
      
      CLRA;累加器清零
      
      ;―――――――――――鍵盤查詢程序――――――――――
      
      KEY:ACALLKS;調按鍵查詢子程序判是否有鍵按下
      
      JNZK1;有鍵按下轉移
      
      ACALLDISP;無鍵按下,調顯示子程序延時
      
      AJMPKEY;繼續查詢按鍵
      
      ;―――――――――――鍵盤掃描程序――――――――――
      
      K1:ACALLDISP;鍵盤去抖延時
      
      ACALLDISP
      
      ACALLKS;再次判別是否有鍵按下
      
      JNZK2;有鍵按下轉移
      
      AJMPKEY;無按鍵,誤讀,繼續查詢按鍵
      
      K2:MOVR3,#0FEH;首列掃描字送R3
      
      MOVR4,#00H;首列號送R4
      
      K3:MOVDPTR,#4401H;PA口地址送DPTR,開始列掃描
      
      MOVA,R3
      
      MOVX@DPTR,A;列掃描字送PA口
      
      INCDPTR;指向PC口
      
      INCDPTR
      
      MOVXA,@DPTR;讀取行掃描值
      
      JBACC.0,L1;第0行無鍵按下,轉查第1行
      
      MOVA,#00H;第0行有鍵按下,行首鍵號送A
      
      AJMPLK;轉求鍵號
      
      L1:JBACC.1,L2;第1行無鍵按下,轉查第2行
      
      MOVA,#08H;第1行有鍵按下,行首鍵號送A
      
      AJMPLK;轉求鍵號
      
      L2:JBACC.2,L3;第2行無鍵按下,轉查第3行
      
      MOVA,#10H;第2行有鍵按下,行首鍵號送A
      
      AJMPLK;轉求鍵號
      
      L3:JBACC.3,NEXT;第3行無鍵按下,轉查下一列
      
      MOVA,#18H;第3行有鍵按下,行首鍵號送A
      
      AJMPLK
      
      LK:ADDA,R4;形成鍵碼送A
      
      PUSHACC;鍵碼入棧保護
      
      K4:ACALLDISP
      
      ACALLKS;等待鍵釋放
      
      JNZK4;未釋放,等待
      
      POPACC;鍵釋放,彈棧送A
      
      AJMPPR;轉鍵盤處理程序
      
      NEXT:INCR4;修改列號
      
      MOVA,R3
      
      JNBACC.3,KEY;4列掃描完返回按鍵查詢狀態
      
      RLA;未掃描完,改為下列掃描字
      
      MOVR3,A&,nbsp;;掃描字暫存R3
      
      AJMPK3;轉列掃描程序
      
      ;―――――――――――鍵盤處理程序―――――――――――――――
      
      PR:CJNEA,#00H,PR01;不是KE0鍵碼,轉KE1鍵
      
      AJMPKE0;轉KE0鍵處理程序
      
      PR01:CJNEA,#01H,PR02;不是KE1鍵碼,轉KE2鍵
      
      AJMPKE1;轉KE1鍵處理程序
      
      PR02:CJNEA,#02H,PR03;不是KE2鍵碼,返回按鍵查詢
      
      AJMPKE2;轉KE2鍵處理程序
      
      PR03:AJMPKEY
      
      KE0:SETBTR0;啟動定時器T0
      
      SETBTR1;啟動定時器T1
      
      SETBET0;允許定時器T0中斷
      
      SETBEA;開中斷
      
      AJMPKEY;返回鍵盤查詢狀態
      
      KE1:CLREA;關中斷
      
      CLRET0;禁止定時器T0中斷
      
      CLRTR1;關定時器T1
      
      CLRTR0;關定時器T0
      
      AJMPKEY
      
      KE2:CLREA;關中斷
      
      AJMPMAIN;返回主程序進行初始化
      
      ;――――――――――按鍵查詢子程序――――――――――――――
      
      KS:MOVDPTR,#4401H;置8155PA口地址
      
      MOVA,#00H
      
      MOVX@DPTR,A;全掃描字#00H送PA口
      
      INCDPTR;指向PC口
      
      INCDPTR
      
      MOVXA,@DPTR;讀入PC口狀態
      
      CPLA;變正邏輯,高電平表示有鍵按下
      
      ANLA,#0FH;屏蔽高4位
      
      RET;返回,A≠0表示有鍵按下
      
      ;―――――――――LED動態顯示子程序―――――――――――――
      
      DISP:PUSHACC;A入棧保護
      
      SETBRS0;保護第0組工作寄存器,啟用第1組工作寄存器
      
      MOVR2,#08H;LED待顯示位數送R2
      
      MOVR1,#00H;設定顯示時間
      
      MOVR3,#7FH;選中zui右端LED
      
      MOVR0,#30H;顯示緩沖區首址送R0
      
      MOVA,@R0;秒顯示個位送A
      
      DISP1:MOVDPTR,#TAB;指向字形表首址
      
      MOVCA,@A+DPTR;查表取得字形碼
      
      MOVDPTR,#4402H;指向8155PB口(段碼口)
      
      MOVX@DPTR,A;字形碼送PB口
      
      MOVA,R3;取位選字
      
      MOVDPTR,#4401H;指向8155PA口(位選口)<,/O:P>
      
      MOVX@DPTR,A;位碼送PA口
      
      DJNZR1,$;延時0.5ms
      
      DJNZR1,$;延時0.5ms
      
      RRA;位選字移位
      
      MOVR3,A;移位后的位選字送R3
      
      INCR0;指向下一位緩沖區地址
      
      MOVA,@R0;緩沖區數據送A
      
      DJNZR2,DISP1;未掃描完,繼續循環
      
      CLRRS0;恢復第0組工作寄存器
      
      POPACC;A彈棧,恢復現場
      
      RET
      
      TAB:DB3FH,06H,5BH,4FH,66H;共陰極LED字形表
      
      DB6DH,7DH,07H,7FH,6FH
      
      ;――――――――――定時器中斷服務程序―――――――――――――
      
      CONT:PUSHACC;保護現場
      
      MOVTH0,#3CH;定時器T1重置初值
      
      MOVTL0,#0B0H
      
      MOVA,20H;秒計數器送A
      
      AJMPCONT1
      
      REN:AJMPREN1
      
      CONT1:DJNZ21H,REN;1秒定時未到,中斷返回
      
      MOV21H,#14H;重置50ms計數初值
      
      CLRP3.5;軟件產生定時器T1計數脈沖
      
      NOP
      
      NOP
      
      SETBP3.5
      
      INCA;1秒計數值加1
      
      DAA;換算為10進制計數
      
      JBCTF1,CONT2;60秒到,轉清零
      
      CONT3:MOV20H,A;計數值送60秒計數單元20H
      
      ANLA,#0FH;屏蔽高4位
      
      MOV30H,A;秒表個位待顯示數據送顯示緩沖區
      
      MOVA,20H
      
      SWAPA;60秒計數單元高、低4位數據互換
      
      ANLA,#0FH;屏蔽高4位
      
      MOV31H,A;秒表十位待顯示數據送顯示緩沖區
      
      AJMPREN1
      
      CONT2:MOVA,#00H
      
      AJMPCONT3
      
      REN1:POPACC;恢復現場
      
      RET;中斷返回
      
      END
      
      3.總結與分析
      
      (1)實驗采用七段碼LED設計(數碼管),顯示直觀;采用定時器中斷,計時更準確;功能齊全,可隨時啟動、停止、清零,后者智能化程度更高。
      
      (2)設計、調試大型程序時,需先根據要求劃分模塊,優化結構;再根據各模塊特點確定何為主程序,何為子程序,何為中斷服務程序,相互間如何調用;再根據各模塊性質和功能將各模塊細化,設計出程序流程圖;zui后才根據各模塊流程圖編制具體程序。調試時應先調主程序,實現zui基本zui主要的功能,在此基礎上再將各模塊功能往主程序上堆砌,直至各模塊聯調、統調,實現全部功能。本例子將整個程序劃分為鍵盤程序,動態顯示程序,秒計時程序三大模塊,根據各自的特點確定鍵盤程序為主程序,動態顯示程序為子程序,秒計時程序為定時器中斷服務程序。主程序又細分為初始化程序,鍵盤查詢程序,鍵盤掃描程序,鍵盤處理程序四大部分。三大模塊之間的關系是:鍵盤程序在無鍵按下時,不斷調用動態顯示子程序;在有鍵按下時,先調用動態顯示子程序消抖,再進入鍵盤處理程序,控制中斷服務程序的運行;處理完畢后,再不斷調用動態顯示子程序。經上述處理后,三大模塊運行協調一致,既保持了動態顯示的穩定性,又保持了鍵盤的可靠性,還保持了秒計時的準確性,較好地實現了全部功能。
      
      (3)本例子只用到8位LED顯示中的兩位,只用到4×4鍵盤16個按鍵中的3個,因此,其功能還有較大的擴展空間。只要將上述程序稍加改動即可實現秒、分、時、日顯示,并可作修改的實時時鐘。如增加LED顯示位數或將顯示改為LCD顯示模塊,可實現年、月、周、日、時、分、秒顯示。

    免責聲明

    • 凡本網注明“來源:儀表網”的所有作品,均為浙江興旺寶明通網絡有限公司-儀表網合法擁有版權或有權使用的作品,未經本網授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明“來源:儀表網”。違反上述聲明者,本網將追究其相關法律責任。
    • 本網轉載并注明自其它來源(非儀表網)的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或和對其真實性負責,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品第一來源,并自負版權等法律責任。
    • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
    聯系我們

    客服熱線: 15267989561

    加盟熱線: 15267989561

    媒體合作: 0571-87759945

    投訴熱線: 0571-87759942

    關注我們
    • 下載儀表站APP

    • Ybzhan手機版

    • Ybzhan公眾號

    • Ybzhan小程序

    企業未開通此功能
    詳詢客服 : 0571-87759942
    主站蜘蛛池模板: 亚洲国产成人无码av在线影院| 成人久久久久久| 欧美成人免费全部观看在线看| 91成人高清在线播放| 韩国成人毛片aaa黄| 成人毛片在线视频| 亚洲欧美综合乱码精品成人网| 鲁大师成人一区二区三区| 成人免费毛片观看| 亚洲国产成人99精品激情在线 | 国产成人精品综合在线| 国产成人8X视频网站入口| 亚洲AV无码成人网站在线观看 | 成人免费夜片在线观看| 国产亚洲欧美成人久久片| 青青草成人免费| 国产成人免费片在线观看| 欧美日韩在线成人| 亚洲AV无码精品国产成人| 国产成人无码一区二区三区| 欧美成人一区二区三区在线电影 | 国产成人无码av| 成人国产在线不卡视频| 久久婷婷成人综合色| 国产成人精品曰本亚洲78| 成人国产在线24小时播放视频| 亚洲国产成人久久一区久久 | 久久久久免费看成人影片| 国产精品成人亚洲| 成人片黄网站色大片免费观看app| 国产成人一区二区三区视频免费 | 亚洲欧美成人完整版在线| 国产成人青青热久免费精品| 精品免费久久久久久成人影院| 四虎影视永久地址www成人 | 成人深夜视频在线观看| 37pao成人国产永久免费视频| 亚洲欧洲精品成人久久曰| 四虎成人精品国产永久免费无码| 国产成人免费手机在线观看视频 | 亚洲国产成人精品女人久久久|