本帖最后由 snow_f 于 2017-12-14 16:14 編輯
一個課程設計,兩位秒表,用的AT89C51,附件有仿真,原理,源碼還有用Protel DXP畫的一部分。
0.png (14.05 KB, 下載次數: 111)
下載附件
2017-12-14 15:58 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.jpg (72.49 KB, 下載次數: 107)
下載附件
2017-12-14 16:04 上傳
秒表設計
摘 要: 本設計以 AT89C51 單片機為主控模塊,利用 C 語言編寫兩位數碼管循環掃描動態顯示的專用程序來實現兩位數碼管動態顯示系統,系統主要由按鍵模塊、復位模塊、外部時鐘電路模塊、數碼管顯示模塊構成。按鍵電路通過兩個獨立的開關控制數碼管計數的開始、停止和復位。復位電路由電容與按鍵的并聯來實現。時鐘通過外部 12M 的晶振來控制。兩位數碼管顯示由兩個共陽極的三極管進行驅動。 將 C 語言編寫的兩位數碼管動態顯示程序寫入單片機來控制 P0 口,使數碼管相應段點亮,同時利用人眼視覺暫留的特性和數碼管的余輝效應,在掃描頻率足夠高時,人眼無法感覺數碼管的變化,從而實現數碼的動態顯示。
目錄
1 設計背景 ........................................................................................................ 1
2 硬件系統設計方案........................................................................................ 1
2.1 硬件電路方案........................................................................................ 1
3 硬件電路設計 ................................................................................................ 2
3.1 單片機選型............................................................................................ 2
3.2 按鍵電路................................................................................................ 4
3.3 復位及振蕩電路.................................................................................... 4
3.4 顯示電路的選擇.................................................................................... 5
3.41 共陽極數碼管的顯示方法............................................................. 5
3.3.2 共陽極數碼管的驅動設計............................................................ 5
3.4 連接方式.............................................................................................. 6
4 軟件設計 ....................................................................................................... 7
4.1 匯編程序................................................................................................ 7
4.2 C 語言程序............................................................................................. 8
5 系統仿真結果 ............................................................................................. 12
6 致謝 .................................................................................錯誤!未定義書簽。
參考文獻 .............................................................................錯誤!未定義書簽。
1 設計背景
目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網絡通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能 IC 卡,民用豪華轎車的安全保障系統,錄像機、攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫療器械了。因此,單片機的學習、開發與應用將造就一批計算機應用與智能化控制的科學家、工程師。
2 硬件系統設計方案
2.1 硬件電路方案
硬件原理框圖如下:
0.jpg (16.08 KB, 下載次數: 104)
下載附件
2017-12-14 15:59 上傳
圖 2-1 硬件組成框圖
該電路的工作原理:單片機從穩壓電路中獲得穩定的+5V 電壓,接到+5V
端,提供穩定的電壓; 單片機口通過電阻接到顯示電路的端口上; 單片機接復位
按鍵電路
復位電路
單片機 顯示電路
時鐘電路
電路,實現電路的復位; 以及單片機需要接晶振電路;整個電路實現循環動態顯
示數字 00~99.
3 硬件電路設計
3.1 單片機選型
MCS51 是指由美國 INTEL 公司生產的一系列單片機的總稱,這一系列單片機包括了很多品種,如 8031, 8051, 8751, 8032, 8052, 8752 等,其中 8051是最早最典型的產品,該系列其它單片機都是在 8051 的基礎上進行功能的增、減、改變而來的,所以人們習慣于用 8051 來稱呼 MCS51 系列單片機,而 8051是目前在我國最流行的單片機,所以很多場合會看到 8051 的名稱。本課題中用到的芯片就是 AT 系列中的 AT89C51 單片機芯片。AT89C51 是一個低電壓,高性能 CMOS 8 位單片機,片內含 4k bytes 的可反復擦寫的 Flash 只讀程序存儲器和 128 bytes 的隨機存取數據存儲器(RAM),器件采用 ATMEL 公司的高密度、非易失性存儲技術生產,兼容標準 MCS-51 指令系統,內置功能強大的微型計算機的 AT89C51 提供了高性價比的解決方案。AT89C51 具有 PDIP、 PQFP/TQFP 及 PLCC 等三種封裝形式,以適應不同產品的需求。它是一個低功耗高性能單片機, 40 個引腳, 32 個外部雙向輸入/輸出(I/O)端口,同時內含 2 個外中斷口, 2 個 16 位可編程定時計數器,2 個全雙工串行通信口, AT89C51 可以按照常規方法進行編程,也可以在線編程。其將通用的微處理器和 Flash 存儲器結合在一起,特別是可反復擦寫的 Flash 存儲器可有效地降低開發成本。
如圖所示,圖 3-1 為 AT89C51 單片機基本構造,其基本性能介紹如下:
圖 3-1 AT89C51 引腳圖
AT89C51 本身內含 40 個引腳, 32 個外部雙向輸入/輸出(I/O)端口,同時內含 2 個外中端口, 2 個 16 位可編程定時計數器,2 個全雙工串行通信口,AT89C51 可以按照常規方法進行編程,也可以在線編程。其將通用的微處理器和 Flash 存儲器結合在一起,特別是可反復擦寫的 Flash 存儲器可有效地降低開發成本。
3.2 按鍵電路
圖 3-2 按鍵電路
按鍵 S1 和按鍵 S2 是控制位,分別接單片機的 P3.4 和 P3.7I/O 口。當按下
按鍵 S1 時數碼管計數開始,再次按下 S1 時數碼管停止計數并停留下當前結果;
當按下按鍵 S2 時清空數碼管顯示結果,重新計數。
3.3 復位及振蕩電路
圖 3-3 復位電路和振蕩電路
單片機復位是使 CPU 和系統中的其他功能部件都處在一個確定的初始狀
態,并從這個狀態開始工作,在復位期間(即 RST 為高電平期間), P0 口為高組態, P1-P3 口輸出高電平;外部程序存儲器讀選通信號 PSEN 無效。地址鎖存信號 ALE 也為高電平。根據實際情況選擇如圖 3-3 所示的復位電路。該電路在最簡單的復位電路下增加了手動復位按鍵,在接通電源瞬間,電容 C1 和 C2取 3pF。 加手動復位按鍵是為了避免死機時無法可靠復位。AT89C51 引腳 XTAL1 和 XTAL2 與晶體振蕩器及電容 C1、 C2 按圖 3-3 所示方式連接。晶振、電容 C1/C2 及片內與非門(作為反饋、放大元件)構成了電容三點式振蕩器,電容 C1、 C2 取值 30pF。 復位電路用電容與按鍵的并聯來實現,將它們并在一起,一端接高電平,另一端接地,從而實現高電平復位的功能。
3.4 顯示電路的選擇
秒表設計顯示電路可以考慮數碼管或 LCD 屏,由于秒表只要求顯示數字,
因此對顯示要求較為簡單, 如果選用 LCD 則較為復雜, 數碼管足以滿足要求。
3.41 共陽極數碼管的顯示方法
LED 數碼管是單片機控制系統中最常見的顯示器件之一,一般用來顯示處理結果或輸入輸出信號的狀態。數碼管顯示是一個系統工程中必不可少的人機交互環節,因此關于數碼管的驅動也就是系統工程中的一個重要的環節。數碼管的驅動分為動態驅動和靜態驅動兩種。所謂靜態驅動,就是指無論多少位 LED 數碼管,同時處于顯示狀態。動態顯示驅動是指無論在任何時刻只有一個 LED 數碼管處于顯示狀態,及單片機采用“掃描”方式控制各個數碼管輪流顯示。
3.3.2 共陽極數碼管的驅動設計
將數碼管每個 LED 燈對應單片機的一個 I/O 口。通過單片機的 P 口來控制LED 燈的亮和滅。 I/O 口之間互相獨立,需要用 I/O 口直接控制 LED。動態顯示將數碼管的每個引腳一對一連接在一起接單片機的數據,而將各個數碼管的公共端單獨送至單片機的 I/O 口進行片選。此外,在此基礎上,用單片機與 74LS04
反向器來驅動數碼管,從而實現數碼管的動態顯示。
圖 3-4 數碼管顯示電路
如圖 3-3 所示,兩位數碼管分別由兩個 PNP 型三極管驅動,三極管的基極通過限流電阻接在單片機 P1.0、 P1.1,其中 P1.0 控制數碼管的個位, P1.1 控制數碼管的十位。數碼管各段除小數點段外其余七段(a-g)通過限流電阻接在單片機 P0 口(P0.0-P0.6),兩位數碼管顯示由單片機內部程序控制相應接口為低電平,從而實現從 00—99 動態循環顯示。例如:十位和個位顯示原理相同,謹以個位說明。當個位數碼管顯示 5 時, 5 在程序中查表對應的十六進制數為 92H,對應二進制為 10010010B,其中 P0.7、 P0.4、 P0.1 為高電平, DP、 e、 b 段熄滅,P0.6、 P0.5、 P0.3、 P0.2、 P0.0 為低電平, g、 f、 d、 c、 a 段點亮,則此時數碼管上顯示數字 5。
3.4 連接方式
單片機采用 P2 口的 I/O 來控制數碼管的各個引腳。復位鍵接到引腳 9 上,數碼管的位選通過三極管和電阻分別與單片機的引腳 1 和 39 相連,晶振與單片機的引腳 18 和 19 連接,高電平與 40 引腳連接供電, 20 引腳直接接地。
0.jpg (36.34 KB, 下載次數: 100)
下載附件
2017-12-14 15:59 上傳
圖 3-5 硬件設計圖
4 軟件設計
4.1 匯編程序
匯編語言的優點是可以表達非常底層的東西
l.可以直接存取寄存器和 I/O
2.編寫的代碼可以非常精確的被執行
3.可以編寫出比一般編譯系統高效的代碼
4.可以作為不同語言或不同標準的接口缺點在于匯編語言是一個比較低級的語言
1.非常冗長單調,在 DOS 下編程時就可以體會到
2.易出 BUG,且調試困難
3.代碼不易維護
4.兼容性不好,與硬件關系非常緊密
8 / 14
與 C 語言相比沒有 C 語言簡單易用,且 C 語言的可讀性更高,因此此程序選
用 C 語言編程。
4.2 C 語言程序
采用 C 語言用編寫了兩位數碼管循環掃描動態顯示的專用程序。通過軟件的控制使兩位數碼管能從 00 計數到 99,再回到 00,依次進行循環。若在計數期間有復位高電平出現時,便重新從 00 開始計數。并有電源開關控制讓電路是否工作,且有指示燈指示電源是否正常。
程序流程圖如下:
0.jpg (15.67 KB, 下載次數: 103)
下載附件
2017-12-14 16:00 上傳
圖 4-1 程序流程圖
程序如下:
5 系統仿真結果
經過對不同方案的分析、比較、取舍,然后進行原理圖的設計與仿真, 再經過軟件的調試等環節的操作,最終實現了讓數碼管在單片機的控制下循環顯示兩位數 00-99。并且在正常的計數過程中,若按下復位鍵后, 計數又重新從 00 開始計數, 終現實的結果與預想的結果一致。
0.jpg (48.32 KB, 下載次數: 111)
下載附件
2017-12-14 16:01 上傳
圖 5-2 仿真結果圖
單片機源程序如下:
- //制作:機械工程學院*****機械設計制造及其自動化專業//
- //作者:*****//
- //學號:************//
- //設計內容:基于51單片機控制的數碼管顯示0~99的秒表//
- //********************我是分割線********************//
- //借口配置說明//
- /*
- 開始按鍵位P2.0
- 復位按鍵P2.1
- */
- /*
- 數碼管位選驅動端口位P1.0和P2.0
- */
- //以下是程序正文//
- #include <reg52.h>
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- /*引腳定義*/
- sbit START=P2^0; //開始、停止鍵 低電平有效
- sbit RST=P2^1; //復位鍵
- /*定義全局變量*/
- uint time; //時間變量
- /*數碼管字模,對應 0-9*/
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};
- /*延時函數*/
- void Delay(uint ms) //毫秒級延時函數
- {
- uint i, j;
- for(i =ms; i>0; i--)
- for(j =110; j>0; j--);
- }
- /*中斷*/
- void time0() interrupt 1
- {
- uchar tt;
- TH0 = 0x4c; //晶振11.0592Mhz
- TL0 = 0x00;
- tt++;
- if(tt == 20)
- {
- time++;
- if(time==99) //到99后在從00開始
- time = 0;
- tt = 0;
- }
- }
- /*顯示函數*/
- void Display(uchar sum)
- {
- uchar shi, ge;
- P0 = 0x00; //消影
- P1 = 0x00;
- shi = table[sum/10];
- P0 = shi;
- P1 = 0xfd;
- Delay(5);
- P0 = 0x00; //消影
- P1 = 0x00;
- ge = table[sum%10];
- P0 = ge;
- P1 = 0xfe;
- Delay(5);
- }
- /*按鍵掃描*/
- void keyscan()
- {
- if(START==0) //開始、停止
- {
- Delay(10); //消抖
- if(START==0)
- {
- TR0 =!TR0;
- while(!START) Display(time);
- }
- }
- if(RST==0) //復位
- {
- Delay(10); //消抖
- if(RST==0)
- {
- time=0;
- TR0=0;
- while(!RST)Display(time);
- }
- }
- }
- //主函數
- void main()
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
秒表設計.zip
(1.34 MB, 下載次數: 429)
2017-12-14 13:43 上傳
點擊文件名下載附件
源碼 下載積分: 黑幣 -5
|