單片機課程設計--數字鐘(曾旻樞)_第1頁
單片機課程設計--數字鐘(曾旻樞)_第2頁
單片機課程設計--數字鐘(曾旻樞)_第3頁
單片機課程設計--數字鐘(曾旻樞)_第4頁
單片機課程設計--數字鐘(曾旻樞)_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 實驗課程:單片機課程設計 專業班級:2013級電信3班 學號: 130101031106 姓名: 徐硯林 指導教師: 盧鋼 同組設計者: 曾旻樞 2015年12月29日 電子數字鐘一、設計功能要求 要求利用實驗箱上的數碼管模擬電子數字鐘。顯示時、分、秒,并且隨時間跳變。在整點時,啟動蜂鳴器。設計要求:(1) 系統硬件設計:利用單片機實驗板完成設計要求; (2) 系統軟件設計:完成控制軟件的編寫與調試;(3) 功能要求:1) 6位數碼管顯示小時、分鐘,秒(例如:15:35:45);2) 具有整點提示功能(例如蜂鳴器鳴響半分鐘),具有整點報時功能(例如十點響十聲);二、設計方案1、原理依據電子鐘

2、是一種用數字電路技術實現時,分,秒計時的裝置,具有整點報時等功能。本設計主要采用C51單片機作為主控核心,動態數碼管作為顯示屏顯示,蜂鳴器作為整點報時,獨立按鍵K1作為消除鬧鈴。 數碼管共陽極數碼管的8個發光二極管的陽極連接在一起接高電平,其它管腳接各段驅動電路輸出端。當某段的輸出端為低電平時,則該段所連接的發光二極管導通并點亮,根據發光字段的不同組合可顯示出各種數字或字符。共陰極數碼管的8個發光二極管的陰極連接在一起接低電平,其它管腳接各段驅動電路輸出端。當某段的輸出端為高電平時,則該段所連接的發光二極管導通并點亮,根據發光字段的不同組合可顯示出各種數字或字符。因此我們在顯示數字的時候首先做

3、的就是給“0-9”十個數字編碼,在要它亮什么數字的時候直接把這個編碼送到它的陽極就行了。2、方案設計(1)、硬件方案 八位動態數碼管、蜂鳴器和獨立按鍵:硬件說明:八位動態數碼管為共陰極數碼,J16為位選碼接口排線,J12為字形碼接口排線,字形碼經鎖存器接到數碼管,鎖存器LE端經J21短路帽接VCC時,輸入數據直通至輸出端,當LE端經J21短路帽接JP10時,其輸入數據經JP10控制將其鎖存至輸出端。連接方法:(1)JP18和J16用8PIN排線連接起來。(2)JP10和J12用8PIN排線連接起來。(3)J21 短路帽使LE接VCC,短路帽JP165 斷開。利用P2.0作為獨立鍵盤輸入口,獨立

4、鍵盤選K1;P21控制蜂鳴器,蜂鳴器JP9接線排的第6引腳與JP15接線排座的一引腳(獨立按鍵K1)用杜邦線連接,使用獨立按鍵K1。 連接方法: JP11和JP1和LED燈的JP1用8PIN排線連接起來。硬件說明:使用單片機的P2口來驅動8個LED,發光二極管的陽極接高電平,故P2口為低電平時,就可以驅動其點亮(2)軟件方案利用內部中斷T0完成時間計數,時間調整,定時時間為125ms,當時間到達125ms*8,即1S時,秒計數器緩沖器增加1,達到1小時時,則時計數器緩沖器增加1,同時蜂鳴器響,并將時分秒分別放入動態數碼管。當分計數器緩沖器和時計數器緩沖器分別到達60min、24h時,對它們清零

5、。(3)同組設計人員及分工曾旻樞:編寫設計方案以及主程序、中斷設置、時間顯示及累計處理部分代碼,進行試驗結果分析徐硯林:查閱參考文獻,匯總整理所得資料,編寫延時、時間調整與設置、整點報時功能部分代碼三、系統代碼實現#include<reg51.h>sbit ksec=P30;/設置秒sbit kmin=P31;/設置分sbit khour=P32; /設置小時sbit fmq=P33;sbit key=P34;unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;unsigned int num=0,s

6、ec=0,min=0,hour=0;unsigned char code table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delay(unsigned int);void display(); void Adjust_clock();void Clock();/-/ 主程序/-void main()TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1)display();/時間顯示函數Adjust_clock();

7、 /時鐘調整與設置函數 Clock(); /整點報時函數/-/ 延時/-void delay(unsigned int z)unsigned int x,y;for(x=z;x>0;x-)for(y=80 ; y>0 ; y- );/-/ 時鐘調整與設置/-void Adjust_clock()if(ksec=0) sec+; if(sec>=60)min+;sec=0; while(ksec=0) display();if(kmin=0) min+; if(min>=60)hour+;min=0; while(kmin=0) display(); if(khour=0

8、) hour+;if(hour>=24)hour=0; while(khour=0) display();/*while表示每按下一次按鍵則刷新一下時間顯示*/-/ 整點報時功能/-void Clock() if(min=59 && sec=59) fmq=1; delay(1); fmq=0; /-/ 中斷設置/-void time0() interrupt 1 1num+; TH0=(65536-50000)/256; TL0=(65536-50000)%256; /-/ 時間顯示及累加處理/-void display()if(num=20) num=0; sec+;

9、 if( sec=60) sec=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; min=0; sec=0; /*通過動態數碼管顯示,實現顯示時間功能*/ secge=sec%10; secshi=sec/10; minge=min%10; minshi=min/10; hourge=hour%10; hourshi=hour/10; P2= 0x7f; P0=tablesecge; delay(2); /顯示分鐘個位 P2= 0xbf; P0=tablesecshi; delay(2); /顯示分鐘個位 P2= 0xfb; P0=

10、0x40; delay(2); /顯示符號“-” P2= 0xef; P0=tableminge; delay(2); /顯示分鐘個位 P2= 0xf7; P0=tableminshi; delay(2); /顯示分鐘個位 P2= 0xdf; P0= 0x40; delay(2); P2= 0xfd; P0=tablehourge; delay(2); /顯示分鐘個位 P2= 0xfe; P0=tablehourshi; delay(2); /顯示分鐘個位 四、系統調試及結果分析問題:時間顯示顛倒,第一位顯示秒數,最后一位顯示小時。 解決:源碼中最后一部分控制數碼管動態顯示的代碼順序顛倒,將其

11、數據重新調整后即正常顯示。問題:秒數到60后跳過分鐘直接小時進位1.解決:源碼中時間累加處理代碼中分鐘累加處理寫錯為if(min=60)變成了賦值語句,修改為if(min=60)后即解決。問題:整點報時功能蜂鳴器響起的時候會停止計時,時鐘無法正常運行。 解決:最初將蜂鳴器的整點報時功能寫在了時間顯示及累加模塊里面導致程序按照順序運行蜂鳴器時會停止時間計時。之后經過多次嘗試與調整,將整點報時功能單獨寫成一個模塊放入主程序中即可。問題:編寫時間調整模塊后,按下按鍵數碼管并無任何反應。 解決:按下按鍵后程序執行時間調整模塊,執行完后并沒有返回顯示模塊,顧在是在調整模塊后加入語句while(ksec=0) display() 后程序正常運行。五、心得體會這次課設看似功能簡單,但它包含了單片機設計中最核心、最重要的問題,很有深度。剛開始時我覺得這次實驗內容很簡單,但是上手之后發現并不想想象中那么容易,經過了一下午的嘗試與查詢相關資料才

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論