久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機秒表課程設計

作者:佚名   來源:本站原創   點擊數:  更新時間:2007年06月28日   【字體:

一、實驗題目
秒表系統設計——用AT89C51設計一個2位LED數碼顯示“秒表”,顯示時間為00~99秒,每秒自動加一。另設計一個“開始”按鍵和一個“復位”按鍵。
二、增加功能
增加一個“暫停”按鍵和一個“快加”按鍵(每10ms快速加一)
三、實驗內容提要
    本實驗利用單片機的定時器/計數器定時和記數的原理,結合dvcc實驗箱上的集成電路芯片8032、LED數碼管以及實驗箱上的按鍵來設計計時器。將軟、硬件有機地結合起來,使得系統能夠正確地進行計時,數碼管能夠正確地顯示時間。其中本實驗設計了四個開關按鍵:其中一個按鍵按下去時以1秒加一開始計時,即秒表開始鍵(本實驗中當開關從1變為0時開始計時),另一個按鍵按下去時暫停計時,使秒表停留在原先的計時(本實驗中當相應開關從1變為0時即停止計時),第三個按鍵按下去時清0(本實驗中當相應開關從1變為0時即停止計時),第四按鍵按下去則是以每10ms秒快速加一計時(本實驗中當開關從1變為0時開始計時)。本實驗中開始時都要使各按鍵回到各初始位置,即都處于1狀態。
三、實驗目的
   1、 通過本次課程設計加深對單片機課程的全面認識復習和掌握,對單片機課程的應用進一步的了解。
   2、 掌握定時器、外部中斷的設置和編程原理。
   3、 通過此次課程設計能夠將單片機軟硬件結合起來,對程序進行編輯,校驗。
四、意義
   該實驗通過單片機的定時器/計數器定時和計數原理,設計簡單的計時器系統,擁有正確的計時、暫停、清零、快加功能,并同時可以用數碼管顯示,在現實生活中應用廣泛,具有現實意義。
五、本人所做工作
根據相關的單片機材料,利用所學的單片機知識,結合DVCC系列單片機微機仿真實驗系統中的軟件和硬件(集成電路芯片8032,七段數碼管,開關電路及時鐘信號電路,按鍵等),編寫能夠實現該項目的軟件程序,最后將軟、硬件有機的結合起來,進行有效的調試,達到完成該實驗課程設計的目的要求。
六、實驗內容
用AT89C51設計一個2位LED數碼顯示“秒表”,顯示時間為00~99秒,每秒自動加一。另設計一個“開始”按鍵和一個“復位”按鍵。再增加一個“暫停”按鍵和一個“快加”按鍵(每10ms快速加一)。
按鍵說明:按“開始”按鍵,開始計數,數碼管顯示從00開始每秒自動加一;按“復位”按鍵,系統清零,數碼管顯示00;按“暫停”按鍵,系統暫停計數,數碼管顯示當時的計數;按“快加”按鍵,系統每10ms快速加一,即數碼顯示管在原先的計數上快速加一。
七、設計思路及描述
該實驗要求進行計時并在數碼管上顯示時間,則可利用DVCC系列單片機微機仿真實驗系統中的芯片8032(芯片的功能類似于芯片AT89C51,其管腳功能也和AT89C51的管腳功能類似)中的P3.2管腳做為外部中斷0的入口地址,并實現“開始”按鍵的功能;將P3.3做為外部中斷1的入口地址,并實現“清零”按鍵的功能;將P3.0做為數據信號DATA輸入的入口地址;將P3.1做為時鐘信號CLK輸入的入口地址。定時器T0作為每秒加一的定時器;定時器T1作為“快加”鍵的定時器。其中“開始”按鍵當開關由1撥向0(由上向下撥)時開始計時;“清零”按鍵當開關由1撥向0(由上向下撥)時數碼管清零,此時若再撥“開始”按鍵則又可重新開始計時。
八、原理圖
 

 

 

 

 

十、實驗程序
;******************************************************************
; 設計選題:實驗五-----秒表系統設計
; 描述:    2位LED數碼顯示"秒表",顯示時間為00~99秒,每秒自動加1,
;         一個"開始"鍵,一個"復位"鍵,一個"暫停"鍵,一個“快加”鍵。
; 調用子程序:暫停鍵子程序,計時鍵子程序,清0鍵子程序,加一子程序
;            顯示子程序,定時子程序
;所用特殊寄存器:寄存器A,寄存器C
;所用中斷:外部中斷INT0、INT1,定時器T0、T1
; 實驗作者:  吳呤--2號,方曉瑛--10號
;***************************************************************************
    org 0000h
    ajmp main          ;主程序入口地址
    org 0003h
    ajmp zhongduan0    ;中斷0入口地址
    org 000bh
    ajmp yanshi        ;定時器T0入口地址
    org 0013h
    ajmp zhongduan1    ;中斷1入口地址
    org 001bh
   ajmp dingshi1       ;定時器T1入口地址
    org 0030h
;***********************************************************
;   主程序
;***********************************************************
main: mov tcon,#05h     ;主程序開始 外部中斷跳變模式
       mov tmod,#11h     ;定時器0,1模式1
       mov ie,#8fh       ;開總中斷,中斷0,1,定時器0,1
       mov dptr,#tab
       mov r1,#00h
       mov r2,#00h
       mov r3,#40          ;循環次數40
       mov tl0,#2Ch         ;置初值,定時25MS
       mov th0,#0CFh
       mov tl1,#78h         ;置初值,定時10MS
       mov th1,#0ech
       clr tr0              ;關定時器
       clr tr1
;***********************************************************
;    暫停鍵K3,快加鍵K4程序
;***********************************************************
here:jb p1.0,here
show:clr tr1
     clr tr0
     acall xianshi
kuaijia:jb p1.2,kuaijia  ;等待P1.2為0 快加
        clr tr0
        setb tr1
here3:jnb p1.2,here3
     ajmp  here
;***********************************************************
;   外部中斷INT0子程序-----計時按鍵K1子程序
;***********************************************************
zhongduan0: setb tr0        ;計時按鍵
      reti
;***********************************************************
;   外部中斷INT1子程序----復位按鍵K2子程序
;***********************************************************
zhongduan1:clr tr0          ;復位按鍵
      clr tr1
      mov 12h,#00h
      mov 11h,#00h
      acall xianshi          ;調用顯示子程序
      mov r1,#00h
      mov r2,#00h
      reti
;***********************************************************
;   加一子程序
;***********************************************************
jia1: inc  r1                ;加1子程序
      cjne r1,#0ah ,loop     ;判斷是否到表尾
      mov  r1,#00h
      inc  r2
      cjne r2,#0ah,loop
      mov  r2,#00h
loop: mov 12h,r1             ;重新賦值
      mov 11h,r2
      ret
;***********************************************************
;   顯示子程序
;***********************************************************
xianshi:mov r7,#02h          ;2個數碼管顯示子程序
     mov r0,#12h
loop5: mov r6,#08h            ;8位2進制數
       mov a,@r0
       movc a,@a+dptr
loop6:rlc a                   ;循環左移
       clr p3.1
      mov p3.0,c
      setb p3.1
      djnz r6,loop6
      dec r0
      djnz r7,loop5
      ret
;***********************************************************
;   定時器T0子程序
;***********************************************************
yanshi: mov tl0,#2Ch           ;定時子程序
       mov th0,#0CFh
       djnz r3,loop7
       acall jia1              ;調用加1子程序
       acall xianshi           ;調用顯示子程序
       mov r3,#40
loop7: reti
;***********************************************************
;定時器T1子程序
;***********************************************************
 dingshi1:mov tl1,#78h         ;置初值,定時10MS
     mov th1,#0ech
     clr tr0
     setb tr1
     mov 12h,r1
     mov 11h,r2
     jnb p1.0,show
     acall jia1
     acall xianshi
lop7:reti
;***********************************************************
tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
   end
 
十一、課程設計心得體會
1、 認真審題,看懂題目的要求!選擇適當的課題,不益太簡單或者太難。做到既能把課題完成又能鍛煉自己的能力!
2、 根據課題要求,復習相關的知識,查詢相關的資料。
3、 根據實驗條件,找到適合的方案,找到需要的元器件及工具,準備實驗。
4、 根據課程設計的要求和自己所要增加的功能寫好程序流程圖,在程序流程圖的基礎上,根據芯片的功能寫出相應的程序。然后再進行程序調試和相應的修改,以達到能夠實現所要求的功能的目的。
5、 還要根據實驗的實際情況,添加些額外程序來使系統更加的穩定,如開關的消震蕩(采用延遲)。
6、 程序要盡量做到由各個子程序組成,在有些程序后面最好加注釋,這樣在程序出錯的檢查過程中可以更容易查找的到,也更簡潔,更明白易懂。
7、 該實驗的程序可以參考DVCC系列單片機微機仿真實驗系統實驗指導書中的串并轉換實驗,也可自己根據自己熟悉的方法來編程。
8、 在設計控制開關時,注意2個中斷的打開和關閉的先后順序,否則就會出錯。
9、 這次的單片機課程設計重點是理論與實際的相結合。不再只讀書了。
10、 該設計從頭到尾都要自己參與,熟悉了對整個設計的過程,更系統的鍛煉了自己。

此設計完畢!!

-------------------------------------------------------
下面提供一個程序(供參考的)
;開機初始化
      MOV P3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入
      MOV P0,#0FFH;使顯示時間數碼管熄滅
      CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表啟始地址
;等待按鍵輸入
;根據按鍵的輸入判斷執行什么功能

;按鍵1按下則執行功能1
MOV P3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入
        MOV P0,#0FFH;使顯示時間數碼管熄滅
START:JB P3.6,START1;循環判斷開始按鈕K1是否按下?
      ACALL DELAY10;延時10毫秒觸點消抖
      JB P3.6,START;如果是干擾就返回
      JNB P3.6,$;等待按鍵松開
      LJMP GN1     

;按鍵2按下則執行功能2

START1: JB P3.7,START;循環判斷開始按鈕K2是否按下? 
        ACALL DELAY10;延時10毫秒觸點消抖
        JB P3.7,START1;如果是干擾就返回
        JNB P3.7,$
        LJMP GN2

;數碼管顯示秒表時間的程序
GN1:    ;先初始化
    S1:MOV A,#0
        MOV TEMP,A 
GOON1:  MOV R2,#2
JS1:     MOV R3,#250
TIME1:  MOV A,TEMP ;將TEMP中的十六進制數轉換成10進制
        MOV B,#10 ;10進制/10=10進制
        DIV AB
        MOV B_BIT,A ;十位在A
        MOV A_BIT,B ;個位在B

       LCALL DPLOP1

        ;插入一段判斷定時過程中是否有按鍵輸入的程序段
C1:     JB P3.6,B1
        ACALL DELAY10;延時10毫秒消抖
        JB P3.6,C1
        JNB P3.6,$;等待按鍵松開
        CPL F0
ZT1:   ; MOV P3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入
        JB P3.6,$;循環判斷開始按鈕K1是否按下?
        ACALL DELAY10;延時10毫秒觸點消抖
        JB P3.6,ZT1;如果是干擾就返回
        JNB P3.6,$;等待按鍵松開
        LCALL DPLOP1
             
B1:     JB P3.7,LOOP1
ACALL DELAY10;延時10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVER

LOOP1:   DJNZ R3,TIME1 ;2毫秒循環執行250次,時間約0.5秒
DJNZ R2,JS1       ;循環執行2次,時間為1 秒鐘

INC TEMP;滿一秒鐘對時間加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判斷TEMP的數值是否為60?不為60循環
ACALL OVER
RET


GN2:     MOV A,#14H ; 設定倒計時的時間20S
         MOV TEMP,A

;數碼管顯示倒計時時間的程序
  ;初始化
        MOV P3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入
        MOV P0,#14H;使顯示時間為設定的倒計時時間

GOON2:  MOV R2,#2
JS2:      MOV R3,#250
TIME2:   MOV A,TEMP ;將TEMP中的十六進制數轉換成10進制
         MOV B,#10 ;10進制/10=10進制
         DIV AB
         MOV B_BIT,A ;十位在A
         MOV A_BIT,B ;個位在B

        MOV DPTR,#NUMTAB ;指定查表啟始地址
DPLOP2: MOV A,A_BIT ;取個位數
        MOVC A,@A+DPTR ;查個位數的7段代碼
        MOV P0,A ;送出個位的7段代碼
        
        CLR P2.5 ;開個位顯示
        ACALL   DELY1;顯示1毫秒
        SETB P2.5;關閉個位顯示,防止鬼影
        MOV A,B_BIT ;取十位數
        MOVC A,@A+DPTR ;查十位數的7段代碼                                       
        MOV P0,A ;送出十位的7段代碼                                                                                                                                                             
        CLR P2.6 ;開十位顯示
        ACALL DELY1;顯示1毫秒
        SETB P2.6;關閉十位顯示,防止鬼影

        ;插入一段判斷定時過程中是否有按鍵輸入的程序段
C2:     JB P3.6,B2
        ACALL DELAY10;延時10毫秒消抖
        JB P3.6,C2
        JNB P3.6,$;等待按鍵松開
       
ZT2:    MOV P3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入
        JB P3.6,$;循環判斷開始按鈕K1是否按下?
        ACALL DELAY10;延時10毫秒觸點消抖
        JB P3.6,ZT2;如果是干擾就返回
        JNB P3.6,$;等待按鍵松開
             
B2:     JB P3.7,LOOP2
ACALL DELAY10;延時10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVER

LOOP2:   DJNZ R3,TIME2 ;2毫秒循環執行250次,時間約0.5秒
DJNZ R2,JS2      ;循環執行2次,時間為1 秒鐘

DEC TEMP;滿一秒鐘對時間減1
MOV A,TEMP
JNZ GOON2;判斷TEMP的數值是否為0?不為0循環
ACALL OVER
RET
       

;結束定時
OVER:  AJMP START;退到開機初始化狀態

;1毫秒延時子程序
DELY1:  MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET

;10毫秒延時子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET

;實驗板上的兩位一體的數碼管0~9各數字的顯示代碼
NUMTAB:  DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1:  MOV A,A_BIT ;取個位數
        MOVC A,@A+DPTR ;查個位數的7段代碼
        MOV P0,A ;送出個位的7段代碼
       
        CLR P2.5 ;開個位顯示
        ACALL   DELY1;顯示1毫秒
        SETB P2.5;關閉個位顯示,防止鬼影
        MOV A,B_BIT ;取十位數
        MOVC A,@A+DPTR ;查十位數的7段代碼
        MOV P0,A ;送出十位的7段代碼
        CLR P2.6 ;開十位顯示
        ACALL DELY1;顯示1毫秒
        SETB P2.6;關閉十位顯示,防止鬼影
RET
END

關閉窗口
主站蜘蛛池模板: 亚洲精品视频免费 | 天天操天天干天天爽 | 国产毛片久久久久久久久春天 | 亚洲啊v| 欧美国产一区二区 | 精品二 | 成人午夜电影在线观看 | 91麻豆精品国产91久久久久久久久 | 999久久久久久久久6666 | 日本视频一区二区三区 | 久久精品中文字幕 | 欧美在线视频网 | 玖玖视频网| 国产9久| 国产成人综合在线 | 99精品电影| 久久国产精品免费 | 亚洲精品欧美 | 日韩成人在线观看 | 久久99这里只有精品 | 日本午夜精品一区二区三区 | 91麻豆精品国产91久久久久久 | 酒色成人网 | 亚洲精品在线免费播放 | 狠狠干天天干 | 免费在线观看黄网站 | 欧美日韩精品一区 | 婷婷丁香在线视频 | 久久网站黄 | 中文字幕一区二区三区乱码在线 | 韩国电影久久 | 国产精品久久久久久久久久久久冷 | 久久精品久久久久久 | 狠狠干天天干 | 成人av高清 | 久久久九九九九 | 久久另类 | 婷婷色在线播放 | 欧美视频在线播放 | 搞黄网站在线观看 | 国产午夜精品理论片a大结局 |