第一篇:單片機課程設計說明書───秒 表 系 統 設 計
單片機課程設計說明書
───秒 表 系 統 設 計
時 間:2007.12.23-2008.1.1 院系:電氣與信息工程系 姓 名:*** 班 級:0000000 學 號:999999999999
目 錄
一 概 述┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2 二 設計要求┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2 三 設計思路及描述┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3 四 原理圖┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 4 五 設計流程圖┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 5 六 設計程序┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 8 七 硬件調試┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 12 八 課程設計心得體會┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 13
九 參考文獻┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 14
一 概 述
近年來隨著科技的飛速發展,單片機的應用正在不斷深入,同時帶動傳統控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬件結構軟硬件結合,加以完善。
隨著時代的進步和發展,單片機技術已經普及到我們生活,工作,科研,各個領域,已經成為一種比較成熟的技術,本文將介紹一種基于單片機控制的秒表,隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中秒表就是一個典型的例子,但人們對它的要求越來越高,要為現代人工作、科研、生活、提供更好的更方便的設施就需要從數單片機技術入手,一切向著數字化控制,智能化控制方向發展。
本設計所介紹的秒表系統設計——用AT89C51設計一個2位LED數碼顯示“秒表”,顯示時間為00~99秒,每秒自動加一。另設計一個“開始”按鍵和一個“復位”按鍵。增加一個“暫停”按鍵和一個“快加”按鍵(每10ms快速加一)
二 設計要求
用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(由上向下撥)時數碼管清零,此時若再撥“開始”按鍵則又可重新開始計時。
四 原理圖
五 設計流程圖
7
六 設計程序
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 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
個數碼管顯示子程序 位2進制數 循環左移 定時子程序 11 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 七 硬件調試
根據相關的單片機材料,利用所學的單片機知識,結合DVCC系列單片機微機仿真實驗系統中的軟件和硬件(集成電路芯片8032,七段數碼管,開關電路及時鐘信號電路,按鍵等),編寫能 夠實現該項目的軟件程序,最后將軟、硬件有機的結合起來,進行有效的調試,達到完成該實驗課程設計的目的要求。八 課程設計心得體會
經過將近三周的單片機課程設計,終于完成了我的秒表的設計,雖然沒有完全達到設計要求,但從心底里說,還是高興的,畢竟這次設計把實物都做了出來,高興之余不得不深思呀!在本次設計的過程中,我發現很多的問題,雖然以前還做過這樣的設計但這次設計真的讓我長進了很多,單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,有好多的東西,只有我們去試著做了,才能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握。
從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。
九 參考文獻
1、江力編著的《單片機原理及其接口技術》 清華大學出版社
2、蘇家健等編的《單片機原理及應用技術》 高等教育出版社
3、《單片機原理幾應用》課程設計指導書
第二篇:單片機課程設計秒表系統設計
單片機課程設計
學院:信息工程專業:
——秒表系統設計
一,設計目的:
1,熟悉51單片機的內部結構,計數器,中斷控制器等的用法,來實現簡單的控制應用系統。
2,通過簡單系統的設計了解單片機應用系統的設計與開發過程及其相應的調試程序過程。
二,設計任務:
實驗通過單片機的定時器/計數器定時和計數原理,設計簡單的計時器系統,擁有正確的計時、暫停、清零、快加功能,并同時可以用數碼管顯示,在現實生活中應用廣泛,具有現實意義。
三,設計題目:
秒表系統設計——用AT89C51設計一個2位LED數碼顯示“秒表”,顯示時間為00~99秒,每秒自動加一。另設計一個“開始”按鍵和一個“復位”按鍵。調用子程序:暫停鍵子程序,計時鍵子程序,清0鍵子程序,加一子程序,顯示子程序,定時子程序,所用特殊寄存器:寄存器A,寄存器C,所用中斷:外部中斷INT0、INT1,定時器T0、T1
四,設計的硬件接線圖:
五,設計思路及描述
要求進行計時并在數碼管上顯示時間,則可利用DVCC系列單片機微機仿真實驗系統中的芯片8032(芯片的功能類似于芯片AT89C51,其管腳功能也和AT89C51的管腳功能類似)中的P3.2管腳做為外部中斷0的入口地址,并實現“開始”按鍵的功能;將P3.3做為外部中斷1的入口地址,并實現“清零”按鍵的功能;將P3.0做為數據信號DATA輸入的入口地址;將P3.1做為時鐘信號CLK輸入的入口地址。定時器T0作為每秒加一的定時器;定時器T1作為“快加”鍵的定時器。其中“開始”按鍵當開關由1撥向0(由上向下撥)時開始計時;“清零”按鍵當開關由1撥向0(由上向下撥)時數碼管清零,此時若再撥“開始”按鍵則又可重新開始計時。
六,流程圖
七,程序 源程序: ORG
0000H AJMP
MIAN;主程序入口地址 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
HERE 3JNB
P1.2,HERE 3 AJMP
HERE;***********************************************************;外部中斷INT0子程序-----計時按鍵K1子程序
;***********************************************************
ZHONGDUAN 0:
SETB TR0;計時按鍵 RETI;***********************************************************;外部中斷INT1子程序----復位按鍵K2子程序
;***********************************************************
ZHONGDUAN 1: 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:TETI;*********************************************************** TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END
八,內容提要
利用單片機的定時器/計數器定時和記數的原理,結合dvcc實驗箱上的集成電路芯片8032、LED數碼管以及實驗箱上的按鍵來設計計時器。將軟、硬件有機地結合起來,使得系統能夠正確地進行計時,數碼管能夠正確地顯示時間。其中本設計了四個開關按鍵:其中一個按鍵按下去時以1秒加一開始計時,即秒表開始鍵(本實驗中當開關從1變為0時開始計時),另一個按鍵按下去時暫停計時,使秒表停留在原先的計時(本實驗中當相應開關從1變為0時即停止計時),第三個按鍵按下去時清0(本實驗中當相應開關從1變為0時即停止計時),第四按鍵按下去則是以每10ms秒快速加一計時(本實驗中當開關從1變為0時開始計時)。本設計中開始時都要使各按鍵回到各初始位置,即都處于1狀態。
九,課程設計心得體會
選擇適當的課題,不益太簡單或者太難。做到既能把課題完成又能鍛煉自己的能力!根據課題要求,復習相關的知識,查詢相關的資料。根據實驗條件,找到適合的方案,找到需要的元器件及工具,準備實驗。根據課程設計的要求和自己所要增加的功能寫好程序流程圖,在程序流程圖的基礎上,根據芯片的功能寫出相應的程序。然后再進行程序調試和相應的修改,以達到能夠實現所要求的功能的目的。還要根據實驗的實際情況,添加些額外程序來使系統更加的穩定,如開關的消震蕩(采用延遲)。程序要盡量做到由各個子程序組成,在有些程序后面最好加注釋,這樣在程序出錯的檢查過程中可以更容易查找的到,也更簡潔,更明白易懂。該設計的程序可以參考DVCC系列單片機微機仿真實驗系統實驗指導書中的串并轉換實驗,也可自己根據自己熟悉的方法來編程。在設計控制開關時,注意2個中斷的打開和關閉的先后順序,否則就會出錯。這次的單片機課程設計重點是理論與實際的相結合。不再只讀書了。該設計從頭到尾都要自己參與,熟悉了對整個設計的過程,更系統的鍛煉了自己。
十、參考文獻
蘇家健等編的《單片機原理及應用技術》 高等教育出版社 2004年11月 余錫存等,《單片機原理及接口技術》 西安電子科技大學出版社 2004
孫涵芳等 《單片機原理及應用》 北京航空航天大學出版社 1990
吳金戌等 《8051電片機的實踐與應用》 清華大學出版社
第三篇:單片機課程設計報告多功能秒表
青島理工大學琴島學院
課程設計報告
課題名稱:單片機原理課程設計 學院:機電工程系
專業班級:電氣工程及其自動化103班 學號:201002
學生:
指導老師:
青島理工大學琴島學院教務處2012年 12月21 日
第四篇:基于89C51單片機的秒表課程設計
摘要
隨著電子技術的發展,電子技術在各個領域的運用也越來越廣泛,人對它的認識也逐步加深。秒表計時器秒表計時器常常用于體育競賽及各種其他要求有較精確時間的各領域中。其中啟/停開關的使用方法與傳統的機械計時器相同,即按一下啟/停開關,啟動計時器開始計時,再按一下啟/停開關計時終止。而復位開關可以在任何情況下使用,即使在計時過程中,只要按一下復位開關,計時應立即終止,并對計時器清零。本設計就是利用所學到的電子元器件將脈沖源用數碼管顯示出來,以制承諾簡易的秒表。
以單片機為核心,設計一個秒表,具有計時功能,按鍵有啟動計時、數據清零、停止、時間顯示。
采用3個LED數碼管顯示時間,計時范圍設置為0~99.9秒,即精確到0.1秒,用按鍵控制秒表的“開始”、“暫停”、“復位”,按“開始”按鍵,開始計時;按“暫停”按鍵,系統暫停計時;再按“開始”鍵,系統繼續計時;數碼管顯示當前計時值;按“復位”按鍵,系統清零。
目錄
一、設計任務.................................................................................................................3
二、設計題目.................................................................................................................3
三、功能分析.................................................................................................................3
四、總體設計.................................................................................................................3
4.1硬件設計...............................................................................................................4
4.1.1 89C51單片機...........................................................................................4
4.1.2晶體振蕩電路...........................................................................................5
4.1.3復位電路...................................................................................................6
4.1.4按鍵電路...................................................................................................7
4.1.5顯示電路.................................................................................................8
4.2引腳控制...............................................................................................................9
五、電路原理圖...........................................................................................................10
六、程序流程圖及程序設計......................................................................................11
6.1程序流程圖.........................................................................................................11
6.2程序設計.............................................................................................................12
七、程序仿真...............................................................................................................21
八、心得體會...............................................................................................................22
九、致謝.......................................................................................................................23
十、參考文獻...............................................................................................................24
一、設計任務
以單片機為核心,設計一個秒表,具有計時功能,按鍵有啟動計時、數據清零、停止、時間顯示。
二、設計題目
秒表的設計
三、功能分析
采用3個LED數碼管顯示時間,計時范圍設置為0~99.9秒,即精確到0.1秒,用按鍵控制秒表的“開始”、“暫停”、“復位”,按“開始”按鍵,開始計時;按“暫停”按鍵,系統暫停計時;再按“開始”鍵,系統繼續計時;數碼管顯示當前計時值;按“復位”按鍵,系統清零。
四、總體設計
本實驗利用單片機的定時器/計數器定時和計數的原理,通過采用Proteus仿真軟件來模擬實現。模擬AT89C51單片機、LED數碼管以及控件來控制秒表的計數以及計時的開啟、暫停、繼續、與復位。其中有三個數碼管來顯示數據,兩個數碼管顯示秒(兩位),另一個數碼管顯示十分之一秒,十分之一秒的數碼管計數從0~9,滿十進一后顯示秒得數碼管的個位加一,并且十分之一秒顯示清零
重新從零計數。同理當個位滿十進一后個位也清零重新計數,當計時超過范圍(即超過99.9秒)后,所有數碼管全部清零從新計數
4.1硬件設計
4.1.1 89C51單片機
MCS-51系列單片機是8位單片機產品,89C51是其中的典型代表,基本模塊包括以下幾個部分:
(1)CPU:89C51的CPU是8位的,另外89C51內部有1個位處理器
(2)R0M:4KB的片內程序存儲器,存放開發調試完成的應用程序
(3)RAM:256B的片內數據存儲器,容量小,但作用大
(4)I/O口:P0-P3,共4個口32條雙向且可位尋址的I/O口線
(5)中斷系統:共5個中斷源,3個內部中斷,2個外部中斷
(6)定時器/計數器:2個16位的可編程定時器/計數器
(7)通用串行口:全雙工通用異步接收器/發送器
(8)振蕩器:89C51的外接晶振與內部時鐘振蕩器為CPU提供時鐘信號
(9)總線控制:89C51對外提供若干控制總線,便于系統擴展
89C51單片機引腳如下圖:
4.1.2晶體振蕩電路
89C51單片機內部的振蕩電路是一個高增益反相放大器,引線XTAL1和XTAL2分別為反相振蕩放大器的輸入及內部時鐘工作電路的輸入和來自反相
振蕩器的輸出,該反相放大器可以配置為片內振蕩器。
這里選用51單片機12MHZ的內部振蕩方式,電路如下:C2、C3起穩定振蕩頻率、快速起振的作用。
晶振電路
4.1.3復位電路
采用上電復位,上電后,由于電容充電,使RST持續一段時間的高電平,從而實現上電復位操作。這不僅能使單片機復位,還能是單片機的外圍設備同時復位,當程序出現錯誤時,可以隨時使電路復位。
電路圖如下:
復位電路
4.1.4按鍵電路
當按鍵被按下時,相應的引腳被拉低,經掃描后,獲得鍵值,并執行鍵功能程序,因此按下不同的按鍵,將執行不同的功能程序。
電路圖如下:
按鍵電路
4.1.5顯示電路
采用3個LED數碼管,LED是七段顯示器,內部有7個條形發光二極管和1個小圓點發光二極管,根據各管的亮暗組成字符。
在用數碼管顯示時,有靜態和動態兩種選擇,這里采用LED動態顯示,用P0、P1、P2口驅動顯示,由于P0口沒有上拉電阻,因此P0口需要外接上拉
電阻才能輸出高電平,這里使用8個4.7k的電阻作為上拉電阻。
電路圖如下:
顯示電路
4.2引腳控制
P0.0—P0.7、P2.0—P2.7、P1.0—P1.7對應三個數碼管的a、b、c、d、e、f、g段和小數點位;P0控制數碼管十位的顯示,P2控制數碼管個位的現實,P1控制小數點后一問的顯示,P3.2、P3.3、P3.4分別接。
五、電路原理圖
用Proteus軟件畫出主電路圖如下:
六、程序流程圖及程序設計
6.1程序流程圖
6.2程序設計
程序的各個組成模塊及工作流程描述:
(1)秒表的初始化
根據程序流程圖,先進行秒表的初始化,即:①將I/O口P3全寫一,為秒表的控制輸入做好準備;②將數碼管全部置零,使其處于秒表計時的初始狀態;③將工作寄存器R0~R2以及30H初始化,留待后面的計時程序備用;④將定時器0置于工作方式1,并為其裝入計時預置數D8FE(因為程序運行過程中占用的時間會導致一定誤差,此為經實物測試之后的修正值),即將定時器定為每10ms溢出;⑤開總中斷允許和定時器0中斷允許。初始化完成后,即進入之后的按鍵掃描程序。
(2)按鍵檢測程序
輪流檢測開始計時(P3.2)、暫停計時(P3.3)、秒表清零(P3.4)三個按鍵。若發現有一個按鍵出現低電平(可能被按下),則延時10ms(調用延時子程序DELAY),延時完成后,若發現低電平消失,則說明該按鍵實際上未被按下,此時轉回按鍵檢測處繼續檢測;若發現仍然是低電平,則說明此鍵確實被按下了,此時就跳轉至相應的程序標號處,執行相應的功能。
(3)開始計時
若確認“開始計時”鍵被按下,則跳轉至程序標號“RUN”處,將定時器0計時允許控制位TR0置位,則定時器開始運行。此動作完成后,返回按鍵檢測程序,等待操作者的下一次指令。
(4)計時程序
定時器0計時至10ms,溢出,引發中斷,程序跳轉至定時器0中斷服務程序入口000BH處執行。程序跳轉至中斷服務程序TIME0。由于秒表的最小計時單位是0.1s,即100ms,因此需加入軟件計時,使定時器0溢出10次之后才改變數碼管的顯示狀態。因此每來一次中斷就將30H中的數加1,若30H中的數沒有到10,則給定時器0重新裝入預置數,之后中斷返回并繼續等待中斷;到10了,才進入顯示程序,改變數碼管的顯示狀態,執行完畢之后中斷返回并繼續等待中斷。
(5)顯示程序
將數碼管的段選碼放在數表TAB中。每次100ms計時完成后,將R0中的值(初值為0)送入A,然后自加1。.若R0中的值沒到10,則使用累加器A查表,并將查得的數碼管段選碼送入毫秒位數碼管。之后將30H中的數置零,中斷返回。若發現R0中的數到10了,則將R0置零,并轉入秒位進位子程序SECOND,向秒位進位,之后,繼續照常向毫秒位送數。
在秒位進位子程序SECOND中,由于要用到累加器A,因此先將其推入堆棧保護。將R1中的值(初值為10)送入A,然后自加1。.若R1中的值沒到20,則使用累加器A查表,并將查得的數碼管段選碼送入秒位數碼管。若發現R1中的數到20了,則將R1重置為10,并轉入十秒位進位子程序SECOND1,向十秒位進位,之后,繼續照常向秒位送數。完成后,彈出ACC和PSW,子程序返回。
十秒位進位子程序與秒位進位子程序相似,只是沒有向下一位進位的功能。
(6)暫停計時
若確認“暫停計時”鍵被按下,則跳轉至程序標號“PAUSE”處,將定時器0計時允許控制位TR0置零,則定時器暫停運行。此動作完成后,返回按鍵檢測程序,等待操作者的下一次指令。
(7)秒表清零
若確認“秒表清零”鍵被按下,則跳轉至程序標號“STOP”處,將TR0置零,關閉定時器0運行。并且將數碼管、工作寄存器、定時器0預置數全部重置,使其處于秒表計時的初始狀態。此動作完成后,返回按鍵檢測程序,等待操作者的下一次指令。
(8)延時程序
用于按鍵延時防抖,延時10ms。
程序清單如下:
ORG 0000H;程序開始
AJMP START;跳轉到主程序START ORG 000BH;定時器0中斷的地址入口
AJMP TIME0;定時器0溢出,跳轉到中斷程序TIME0 START:;主程序
MOV P3,#0FFH;輸入端口P3全寫1 MOV P0,#3FH;MOV P1,#3FH;
MOV P2,#0BFH;數碼管初始化
MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;MOV TMOD,#01H;MOV TH0,#0D8H;MOV TL0,#0FEH;SETB EA;SETB ET0;READ:;L1:JB P3.2,L2;LCALL DELAY;JB P3.2,L1;AJMP RUN;L2:JB P3.3,L3;
工作寄存器初始化
定時器0工作于方式1
定時器0預置數(D8FEH=55550D)
開總中斷允許
開定時器0中斷允許
讀鍵程序
按鍵延時防抖
確認計時鍵被按下,開始/繼續計時15
LCALL DELAY;按鍵延時防抖
JB P3.3,L2;AJMP PAUSE;確認暫停鍵被按下,暫停計時
L3:JB P3.4,L1;LCALL DELAY;JB P3.4,L3;AJMP STOP;RUN:;SETB TR0;AJMP READ;PAUSE:;CLR TR0;AJMP READ;TIME0:;INC 30H;MOV A,30H;
按鍵延時防抖
確認清零鍵被按下,秒表重置
計時鍵按下,跳轉至此
定時器0開始/繼續運行
暫停鍵按下,跳轉至此
定時器0溢出,中斷,跳轉至此16
CJNE A,#0AH,TIME1;30H單元中的值到10了嗎?(計時到10毫秒了嗎,也就是說,該向毫秒位送數了嗎?)MOV DPTR,#TAB;30H中的值到10了,順序執行
MOV A,R0;INC R0;CJNE R0,#0AH,GET;R0MOV R0,#00H;LCALL SECOND;進位
GET:;MOVC A,@A+DPTR;MOV P1,A;MOV 30H,#00H;TIME1:;MOV TH0,#0D8H;MOV TL0,#0FEH;RETI;中的值到10了嗎?(該向秒位進位了嗎?)
到了,R0清零,調用進位子程序SECOND,向秒位沒到,跳過進位子程序
查表并向數碼管毫秒位送數
重置30H單元
給定時器0重新預置數
中斷返回
SECOND:;秒位進位子程序
PUSH ACC;PUSH PSW;將ACC和PSW推入堆棧保護
MOV A,R1;INC R1;CJNE R1,#14H,GET1;R1了嗎?
MOV R1,#0AH;LCALL SECOND1;位進位
GET1:;MOVC A,@A+DPTR;MOV P2,A;POP PSW;POP ACC;PSW,ACCRET;SECOND1:;中的值到20了嗎,也就是說,該向十秒位進位到了。R1重置,調用進位子程序SECOND1,向十秒沒到,跳過進位子程序
查表并向數碼管秒位送數
出棧
子程序返回
十秒位進位子程序
PUSH ACC;PUSH PSW;將ACC和PSW推入堆棧保護
MOV A,R2;INC R2;CJNE R2,#0AH,GET2;R2
MOV R2,#00H;GET2:;MOVC A,@A+DPTR;MOV P0,A;POP PSW;POP ACC;PSWRET;STOP:;MOV P3,#0FFH;MOV P0,#3FH;MOV P1,#3FH;
中的值到10了嗎,也就是說,該將此位歸零了到了,R2清零
沒到,跳過清零程序
查表并向數碼管十秒位送數,ACC出棧
子程序返回
清零鍵按下,跳轉至此 嗎?
MOV P2,#0BFH;數碼管清零
MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;CLR TR0;MOV TH0,#0D8H;MOV TL0,#0FEH;AJMP READ;DELAY:;MOV R3,#50D;D1:MOV R4,#100D;D2:DJNZ R4,D2;DJNZ R3,D1;RET;工作寄存器初始化計時器0停止計時定時器0預置數
延時10ms子程序
子程序返回
TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;數碼管段選碼數表
END;程序結束
七、程序仿真
將以上程序清單導入先前做好的Proteus仿真電路,匯編之后,按 鍵開始進行仿真。
仿真結果如下:
仿真結果描述:
按“開始”鍵,秒表開始計時;按“暫停”鍵,秒表暫停計時;再按“開始”鍵,秒表繼續計時;按“清零”鍵,秒表清零。
八、心得體會
雖然秒表是一個非常簡單的功能,但要在單片機中使用匯編語言來實現這個功能,仍然花了我不少心思。
首先是計時的問題,由于單片機計時器最大只能計時65.5ms,因此要實現毫秒位的變化,我采用了軟件計時的方法,單片機只需計時10ms,然后用軟件重復10次,即可達到計時100ms的目的。
顯示方面,為了使編程簡單,我使用了靜態顯示。不過這使得占用I/O口線過多,而且連線復雜繁瑣,為實物的制作帶來了不便。在以后的學習和應用中我會努力加深動態掃描顯示的理解,爭取熟練運用。
根據書本知識,我們一開始只給P0口加上了上拉電阻,但是實物做成后我們發現P1和P2口得輸出顯示非常暗,初步確定是驅動能力不足的問題后,我們給二者也加上了上拉電阻,結果使得顯示正常了。由此我們了解到,實踐才是檢驗真理的唯一標準,有時候書本上的知識需要經過實踐的改進,才能運用到實際中。
此次課程設計鞏固了我的基礎知識,提高了我的應用水平,鍛煉了我的動手能力,使我受益匪淺。然而,在吸取經驗的同時,我也吃了不少教訓。在編程、仿真、焊接方面都走了不少彎路。但是,學則要有所收獲,經過此次的鍛煉,我在很多方面都已經有所提高,知識也掌握得更加扎實了。
在今后的學習和實踐中,我將繼續努力鉆研,提高自己,爭取在學術和記憶上獲得更大的進步。
九、致謝
本設計是在李芳老師的悉心指導下完成的,李老師淵博的知識,嚴謹的治學態度,一絲不茍的工作作風,平易近人的性格都是我學習的楷模。在論文的研究及整理期間,李老師給了我很大的支持和鼓勵,才使得論文得以順利的完成,在此謹向導師表示忠心的感謝和崇高的敬意。
同時還要感謝同學們,他們也給了我很大的支持和幫助。
十、參考文獻
1)《微控制器與接口技術》.虞滄.電子工業出版社.2012.10 2)李朝青.單片機原理及接口技術[M].北京:北京航空航天大學出版社.2005.10 3)夏繼強.單片機實驗北京:北京航空航天大學出版社.2001.4)孫德輝,鄭士富.微型計算機控制系統.北京:冶金工業出版社.2002
5)肖洪兵.跟我學用單片機.北京:北京航空航天大學出版社.2002.8 6)陳汝全.實用微機與單片機控制技術.電子科技大學出版社.1995.7 7)王涌.單片機與嵌入式系統應用[J],2002(3):58-61 8)羅亞非.凌陽16位單片機應用基礎[M].北京:北京航空航天大學出版社.2003.5 9)李慶.Keil C51 使用詳解 V3.0[M].北京:北京理工大學出版
10)李華.MCS-51系列單片機實用接口技術.北京航空航天大學出版社.1993,162-229 11)溫鋼云,黃道平.計算機控制技術.廣州:華南理工大學出版社.2002 12)肖洪兵.單片機應用技術.自編教材
13)孫德輝,鄭士富.微型計算機控制系統.北京:冶金工業出版社.2002 14)韓來吉.用 89C51實現急救車優先的交通燈控制系統[J] 15)陳志強,芮延年,城市路口交通燈多級智能控制方法的研究J.2007 16)李廣弟.單片機基礎.北京:北京航空航天大學出版社.2001,56 17)馬忠梅等.單片機的C語言應用程序設計.北京航空航天出版社.1999
18)劉瑞新,單片機原理及應用教程,北京機械工業出版社,2003 19)李傳軍,單片機原理及應用,河南科技出版社,2006 20)饒慶,89C51單片機課程設計實訓教材,北京人民郵電出版社,2003
第五篇:單片機課程設計之秒表
單片機課程設計報告
題目:基于stc89c52rc的秒表設計
學生:唐偉軒 11071339
指導老師:
日期:2013年12月8日
基于stc89c52rc的秒表設計
此設計中硬件部分由王華杲完成,軟件由唐偉軒完成一、設計要求
使用STC89C52RC單片機設計一個2位LED數碼管顯示的秒表,顯示時間為00—99秒,每秒自動加1,設計開始、停止、復位鍵。
二、設計思路
為了功能拓展,本設計硬件部分采用了四位一體共陽數碼管作為顯示單元,采用三極管進行陽極位選驅動,陰極直接接限流電阻接單片機P0口;采用“4+1”按鍵,分別為“系統復位”、“計數停止”、“復位秒表”、“翻頁”、“預留”功能,“系統復位”為系統總復位按鍵;“計數停止”和“復位秒表”按鍵接到單片機中斷口(即INT0引腳與INT1引腳)。單片機的時鐘晶振為12M。
軟件部分設計采用“動態刷新”和“定時器精確計時”的方式實現秒表功能,時間最小刻度為0.01s,同時采用外部按鍵中斷的方式實現“計數停止”、“復位秒表”功能,采用按鍵掃描實現“翻頁”功能。
本設計秒表可在一次計時鐘保存最多十次計時值。
三、硬件設計與分析
1.單片機最小系統
51單片機最小系統由復位電路和時鐘電路組成。
51單片機的Reset引腳為單片機的復位引腳,在該引腳上保持兩個機器周期的高電平,單片機復位,PC值復位至0000H,并在Reset引腳恢復至低電平時重新開始執行ROM中的程序,由此可設計典型單片機上電復位與手動復位一體的復位電路,該自動復位電路能在上電后在單片機Reset引腳上保持ms級的高電平時間,滿足設計要求,電路如圖3.1所示。
51單片機的時鐘系統可選擇使用外部時鐘或內部RC時鐘(不準確),xtal1與xtal2引腳為單片機外部時鐘引腳,51單片機的機器周期為12個時鐘周期,采用12M晶體振蕩器時,機器周期為1us,外部晶振電路如圖3.2所示。
圖3.1圖3.22.數碼管顯示電路設計
本設計中采用4位一體共陽數碼管,4個共陽極使用三極管s9012進行控電平的電流放大,8個共陰極接限流電阻接到單片機P0口;51單片機P0屬于漏極開路結構,在老式51單片機中作為外部數據總線使用,可在較高輸入輸出頻率下使用,在本設計中,使用了P0的該特點,作為數碼管的段碼數據控制。
3.中斷按鍵與按鍵掃描
51單片機支持兩路外部中斷,分別為INT0引腳和INT1引腳,恰當使用外部中斷功能可極大地提高外部觸發信號的響應速度。本設計中,共使用了4個按鍵,其中兩個接在兩個外部中斷引腳上以提高其響應速度實現高級功能,另外兩個按鍵接普通IO實現一般功能。
4.電路圖
圖3.3四、軟件設計與分析
1.刷新顯示程序
數碼管顯示部分由于其公共端共接結構,需采用刷新顯示的方式驅動,驅動部分C語言程序如下:
P1=0xFE;//四位數碼管掃描
P0=codetab[one];
delay(3);
P1=0xFD;
P0=codetab[two];
delay(3);
P1=0xFB;
P0=0X7F;//顯示小數點
delay(3);
P0=codetab[three];
delay(3);
P1=0xF7;
P0=codetab[four];
delay(3);
2.定時器的應用
51單片機中含有兩個定時器,分別為T0和T1,共有13位計數定時、16位計數定時、8位自動重裝計數定時三種工作模式,每個定時器可產生獨立的中斷信號。51單片機定時器采用“向上計數”的方式,即加滿溢出后產生中斷,定時時鐘源為系統時鐘,每1個機器周期加1,本設計中采用12M外部時鐘,對應定時器時鐘為1us,要實現0.01s精度顯示,即定時最大為10ms,這里采用定時20us,C語言程序設計如下:
void time0()
{//定時器初始化,定時20us
TMOD=0X01;
TH0 =0XF8;
TL0 =0X30;
//TR0 =1;
EA=1;
ET0 =1;
}
3.程序流程圖
圖4.1五、數據測試
1.秒表計時誤差:小于0.1% 2.各按鍵觸發功能是否正常:正常 3.最大單次計時記錄次數:10次
六、參考文獻
【1】劉煥成.《工程背景下的單片機原理及系統設計(第2版)》.清華大學出版社.2011年10月