單片機(jī)課程設(shè)計基于51單片機(jī)的電子鐘設(shè)計_第1頁
單片機(jī)課程設(shè)計基于51單片機(jī)的電子鐘設(shè)計_第2頁
單片機(jī)課程設(shè)計基于51單片機(jī)的電子鐘設(shè)計_第3頁
單片機(jī)課程設(shè)計基于51單片機(jī)的電子鐘設(shè)計_第4頁
單片機(jī)課程設(shè)計基于51單片機(jī)的電子鐘設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 微型計算機(jī)原理與應(yīng)用 課程設(shè)計報告書課題名稱:基于51單片機(jī)的電子鐘設(shè)計姓名:王棟學(xué)號:200900192037班級:09卓越一班指導(dǎo)教師:楊志堅 目錄:1、 任務(wù)書.22、 系統(tǒng)總體設(shè)計方案規(guī)劃與選定.23、 硬件設(shè)計.54、 軟件設(shè)計.65、 調(diào)試.86、 新增功能及實現(xiàn)方法.87、 小結(jié)與體會.98、 參考文獻(xiàn).99、 附錄.10一任務(wù)書:基于大三上學(xué)期我們所學(xué)過的清華大學(xué)出版社出版的單片機(jī)原理,接口與應(yīng)用這門課程以及軟件keilc51語言的學(xué)習(xí),在最后的課程設(shè)計間斷運用學(xué)過的基本理論知識,將理論聯(lián)系實際,在實際的設(shè)計過程中體會單片機(jī)的真實應(yīng)用以及用軟件進(jìn)行仿真所帶來的方便性。通過系統(tǒng)

2、構(gòu)造、流程設(shè)計、編程與調(diào)試的過程,掌握分析與解決實際問題的方法與手段,提高系統(tǒng)設(shè)計、程序編碼與調(diào)試方面的實際動手能力,做一次實際的系統(tǒng)設(shè)計訓(xùn)練,從中體會理論與實踐之間的聯(lián)系與差別。本次課程設(shè)計要完成硬件電路的設(shè)計和軟件的編程,使設(shè)計的數(shù)字電子時鐘可以完成以下幾點功能:1:六個led上實現(xiàn)正常的時間顯示,24小時制2:實現(xiàn)時間的正確調(diào)節(jié)3: 鬧鐘的定時及到時間之后的音樂響鈴4:矩陣鍵盤,0到9鍵,光標(biāo)的左移右移鍵,鬧鐘調(diào)節(jié)鍵,時 間調(diào)節(jié)鍵,走時鍵,復(fù)位鍵,停止鍵等,其中涉及到某些鍵的復(fù)用5:實現(xiàn)秒表功能在設(shè)計過程中還用到8255來擴(kuò)展并行接口,要注意8255的地址問題。同時在設(shè)計過程中還應(yīng)該注意

3、按鍵去抖問題,保證正確的讀入按鍵值。在鍵盤掃描時要正確的設(shè)置掃描頻率,使數(shù)碼管顯示正常,人眼可以清晰分辨二系統(tǒng)總體設(shè)計方案規(guī)劃與選定 針對要實現(xiàn)的功能,擬采用at89c51單片機(jī)進(jìn)行設(shè)計,at89c51 單片機(jī)是一款低功耗,高性能cmos8位單片機(jī),片內(nèi)含4kb在線可編程(isp)的可反復(fù)擦寫1000次的flash只讀程序存儲器,器件采用高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)mcs- 51指令系統(tǒng)及80c51引腳結(jié)構(gòu)7。這樣,既能做到經(jīng)濟(jì)合理又能實現(xiàn)預(yù)期的功能。在程序方面,采用分塊設(shè)計的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項功能。程序可分為鬧鐘的音樂程序、時間顯示程序、鬧

4、鐘顯示程序、調(diào)時顯示、定時程序,走時程序,復(fù)位的模塊化的程序。硬件接線圖如圖所示:對于程序的設(shè)計,遵循分塊的原則,不同的子程序?qū)崿F(xiàn)不同的功能,通過函數(shù)的調(diào)用實現(xiàn)相應(yīng)的功能主程序:執(zhí)行主程序,按照得到的的10到15鍵值轉(zhuǎn)到相應(yīng)的子程序去執(zhí)行相應(yīng)的功能。模塊一:時間顯示模塊:用51單片機(jī)的6個led七段數(shù)碼管,依次分別顯示時,分,秒,中間用小數(shù)點分開。正常走時時秒數(shù)滿60進(jìn)位,分鐘加1,分鐘滿60小時加1,小時滿24清0模塊二:顯示時間調(diào)整模塊:當(dāng)按下鍵值為10的開關(guān)后,進(jìn)入時間調(diào)整程序,對六個數(shù)碼管相應(yīng)位的的控制按照我們生活中的正常邏輯進(jìn)行控制。進(jìn)行調(diào)整時間模塊三:鬧鐘音樂模塊:當(dāng)按下鍵值為11

5、的開關(guān)后,進(jìn)入鬧鐘時間設(shè)置狀態(tài),設(shè)定相應(yīng)的時間,當(dāng)?shù)搅嗽O(shè)定的時間之后,進(jìn)入產(chǎn)生中斷,進(jìn)入鬧鐘音樂程序模塊四:鍵盤掃描得到按鍵值函數(shù):4*4矩陣鍵盤,用8255的pa口得到行值,p1口得到列值,最后得到按下開關(guān)的鍵值,根據(jù)鍵值轉(zhuǎn)到相應(yīng)的模塊執(zhí)行相應(yīng)的功能。各個模塊程序設(shè)計好之后,要進(jìn)行最后的整合,函數(shù)的調(diào)用參數(shù)設(shè)置要正確,使程序能夠正常的運行,在keil上調(diào)試通過之后,檢查proteus中硬件連接有沒有錯誤,確定無誤后,在proteus中進(jìn)行模擬實驗,最后可以到實驗室進(jìn)行真實元器件的連接,看一看真實電路與模擬電路之間有什么異同之處,比較總結(jié),增加自己的編程與系統(tǒng)實驗仿真能力。三硬件設(shè)計用到的元器

6、件如下:at89c51:該單片機(jī)功能強(qiáng)大,不僅能滿足設(shè)計的需要,也可以在設(shè)計要求的基礎(chǔ)上進(jìn)行一些擴(kuò)展。單片機(jī)的結(jié)構(gòu)如下:主要應(yīng)用at89c51單片機(jī)的p1.0到p1.3得到鍵盤的列值,p1.7通過放大器進(jìn)行功率放大控制喇叭的響音樂。同時對單片機(jī)的并行接口擴(kuò)展了一個8255,用p0.0和p0.1作為其地址線,同時用到了89c51的兩個十六位定時計數(shù)器t0,t1,進(jìn)行顯示時間和鬧鐘響音樂的中斷控制。8255:結(jié)構(gòu)如下gfabeddpc87109612345abcdefg8255是一個可編程并行接口芯片,有一個控制口和三個8位數(shù)據(jù)口,外設(shè)通過數(shù)據(jù)口與單片機(jī)進(jìn)行數(shù)據(jù)通信,各數(shù)據(jù)口的工作方式和數(shù)據(jù)傳送方

7、向是通過用戶對控制口寫控制字控制的。我們用到了pb,pc口進(jìn)行對數(shù)碼顯示管的片選和段選,pa口得到按鍵的行值。數(shù)碼管:數(shù)碼管結(jié)構(gòu) 使用共陰極數(shù)碼管時將6個數(shù)碼管按相同功能連接起來,3與8相連,當(dāng)選通端所接管腳為低電平時該數(shù)碼管選通。 單片機(jī)的p2口作為選通端,連接各數(shù)碼管的3、8引腳輪流顯示,連接時要加7407和上拉電阻。單片機(jī)的p1口作為功能段,通高電平的引腳會使相應(yīng)段亮起,同樣的也要與7407和電阻連接使用。四軟件設(shè)計關(guān)于電子鐘的功能,劃分出主要功能,次要功能。程序的主要功能是準(zhǔn)確的實現(xiàn)走時功能,我們用定時器來準(zhǔn)確的設(shè)定時間(定時器t0準(zhǔn)確設(shè)定中斷時間為20ms,終端中統(tǒng)計50次中斷即為一

8、秒)。而次要功能,則是修改時間,設(shè)定鬧鐘等。在實現(xiàn)程序的同時,盡量使顯示人性化,如led顯示時,光標(biāo)的顯示與移動可以方便的修改設(shè)定時間及鬧鐘。1) 主程序設(shè)計:主程序中完成對8255芯片和定時器設(shè)置的初始化,然后進(jìn)入無限循環(huán)的查詢模塊,動態(tài)掃描led顯示模塊,使顯示走時正常。同時在循環(huán)中完成對矩陣鍵盤的狀態(tài)(是否有鍵按下,如有是哪一個)進(jìn)行監(jiān)控,如果有鍵按下根據(jù)其鍵值跳轉(zhuǎn)到相應(yīng)的子程序中進(jìn)行執(zhí)行,完成相應(yīng)的功能后會自動跳轉(zhuǎn)回來。這樣整個程序就實現(xiàn)了連續(xù)有效的運行。2) 按鍵掃描子程序:首先根據(jù)端口狀態(tài)判斷是否有鍵按下,如果沒有就跳過讀鍵值這個階段。如果有鍵按下就通過行列掃描判斷出所按下鍵的位置

9、,并相應(yīng)的形成鍵值,保存在一個全局變量中等待被查詢。然后跳出子程序。3) 顯示子程序:該子程序在led掃描中被調(diào)用。首先根據(jù)參數(shù)判別是顯示時間還是顯示鬧鐘,然后針對六個位形成相應(yīng)的段碼值。通過參數(shù)值在相應(yīng)位輸出顯示。4) 時間及鬧鐘設(shè)定子程序:本程序完成時間的修改及鬧鐘的設(shè)置,對時間和鬧鐘的設(shè)置是通過修改時間值的全局變量或鬧鐘值的全局變量來完成的。在修改過程中正在修改位用光標(biāo)來顯示,按下數(shù)字后光標(biāo)自動轉(zhuǎn)移到下一位,可以通過左右移動光標(biāo)來實現(xiàn)正在修改位的調(diào)整。當(dāng)六位全部修改完畢,或者按下確定/退出鍵后自動跳出子程序。5) 響鈴子程序:當(dāng)設(shè)定的鬧鐘時間到時,轉(zhuǎn)入本程序執(zhí)行。本程序通過讀取頻率表來設(shè)

10、定t1定時中斷的設(shè)定,以在響鈴端口輸出頻率一定的脈沖波。同時通過讀取時間表控制每一頻率所響的時間,這樣就可以在揚聲器輸出音樂了。同時在程序中添加了鍵盤掃描環(huán)節(jié),一旦按下退出鍵,就關(guān)閉t1定時器,跳出程序,響鈴就可以終止。五調(diào)試 由于我們采用了“模塊化”的編程思路,程序的調(diào)試變得相對簡單。首先我們編制出主程序,使走時功能正常完成,顯示現(xiàn)在的時間,過程中出現(xiàn)的主要問題是動態(tài)掃面的相關(guān)參數(shù)設(shè)置不合理,顯示出現(xiàn)不正常的現(xiàn)象;然后我們開始編寫相關(guān)子程序,由于幾個主要的子程序之間沒有參數(shù)上的直接聯(lián)系,所以我們分別編寫各個子程序,調(diào)試功能無誤后添加到主干程序中來。由于程序編寫分工完成,這個階段碰到最大的問題

11、之一就是程序中對變量的復(fù)雜定義極大的浪費了資源,甚至有些重名的非法定義。然后我們通過設(shè)置幾個統(tǒng)一的全局變量,在各個子程序中分別對全局變量做出不同的修改已完成不同的功能。最后這個問題得到了比較好的解決。程序調(diào)試中還出現(xiàn)了種種命令的錯誤使用,以及不注意所造成的錯誤,而更重要的是邏輯錯誤。很多時候程序執(zhí)行出來的結(jié)果和所設(shè)想的有很大差距,這就靠著不斷的修正邏輯錯誤來調(diào)試。六新增功能及實現(xiàn)方法 在原先的電子時鐘基礎(chǔ)上添加秒表功能,基本要求如下:應(yīng)具有開始,暫停,繼續(xù),清零的基本功能,并且要求在秒表模式下,不再對所定的鬧鐘有反應(yīng),即要求鬧鐘模式與時鐘模式完全分離。 實現(xiàn)方法如下:將鍵12,13,14復(fù)用,

12、分別作為開始鍵,暫停(繼續(xù))鍵和清零鍵。在鍵盤掃描過程中,如果掃描到14鍵按下,則轉(zhuǎn)到清零函數(shù),開始進(jìn)入秒表模式。由于在清零函數(shù)中,將變量pp置零,取消了鬧鐘模式,因此在秒表模式下不會出現(xiàn)鬧鈴響的情況。按下鍵12,啟動定時器t0工作,開始計時,當(dāng)鍵盤掃描檢測到13鍵按下時,令tr0取反,計時器t0停止工作,再按一下13鍵時,tr0再取反,t0又繼續(xù)工作,這樣就實現(xiàn)了暫停和繼續(xù)的功能 。注意,在鍵盤掃描值得到以后因為要轉(zhuǎn)向不同的處理程序,在處理程序中要將鍵值先修改,避免因鍵值不變,而重復(fù)進(jìn)入子程序。此處說明12,13鍵的復(fù)用原理:12,13鍵作為時間模式下的光標(biāo)左右移動鍵,是在先按下調(diào)時鍵(10

13、鍵)或定時鍵(11鍵)后轉(zhuǎn)向修改時間函數(shù)后才起作用的,而直接按下12,13鍵會自動轉(zhuǎn)向秒表模式,不會進(jìn)入時間模式,因此也就不會與此鍵的其他復(fù)用功能產(chǎn)生沖突。七小結(jié) 項目進(jìn)行中遇到了各種各樣的問題,有些問題是預(yù)想中沒有過的。項目的開始主要問題是keil所編寫的程序如何導(dǎo)入到proteus中,然后在proteus中進(jìn)行仿真。程序正常編寫過程中遇到的主要問題是邏輯的錯誤,往往很多程序的運行并不像預(yù)想的那樣,所以往往要一遍遍重復(fù)的修改,這個工作量是相當(dāng)大的。其次,就是課本知識掌握并不是特別扎實,有些命令的使用出現(xiàn)了些許的小問題??傊?,這次的項目鍛煉了我的能力,真正的把學(xué)到的知識運用到了實際當(dāng)中去,做出

14、的東西也很讓人振奮。八參考文獻(xiàn)【1】單片機(jī)原理、接口及應(yīng)用單片機(jī)嵌入式系統(tǒng)技術(shù)基礎(chǔ)(第2版),肖看、李群芳,清華大學(xué)出版社【2】51單片機(jī)開發(fā)與應(yīng)用技術(shù)詳解,趙建領(lǐng)、薛圓圓,電子工業(yè)出版社附錄:源程序代碼#include absacc.h#include reg51.h/8255端口地址定義#define c8255_a xbyte0x7f00#define c8255_b xbyte0x7f01#define c8255_c xbyte0x7f02#define c8255_con xbyte0x7f03/鍵盤及數(shù)碼管顯示變量組unsigned char data timer=0,secon

15、d=0,minute=0,hour=0;unsigned char data second_bell=59,minute_bell=59,hour_bell=23; unsigned code tab_high10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; unsigned code tab_low10=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; unsigned code tab_position6=0x3e,0x3d,0x3b,0x37,0x2f,0x1f; unsigne

16、d char tab26=0x00,0x00,0x00,0x00,0x00,0x00; unsigned char key_down; unsigned char key_value; unsigned char flag,tab,pp=1;unsigned char data position=0;unsigned int val; unsigned char i;unsigned char number=100;/響鈴函數(shù)變量組#define clk 0x070000sbit p17 = p17;/揚聲器控制引腳unsigned char data val_h;/計數(shù)器高字節(jié)unsigne

17、d char data val_l;/計數(shù)器低字節(jié)/響鈴音樂頻率表unsigned int code freq_list = 371,495,495,495,624,556,495,556,624, 495,495,624,742,833,833,833,742,624, 624,495,556,495,556,624,495,416,416, 371,495,833,742,624,624,495,556,495, 556,833,742,624,624,742,833,990,742, 624,624,495,556,495,556,624,495,416, 416,371,495,0;/

18、響鈴音樂頻率對應(yīng)時間表unsigned char code time_list= 4, 6, 2, 4, 4, 6, 2, 4, 4, 6, 2, 4, 4,12, 1, 3, 6, 2, 4, 4, 6, 2, 4, 4, 6, 2, 4, 4,12, 4, 6, 2, 4, 4, 6, 2, 4, 4, 6, 2, 4, 4,12, 4, 6, 2, 4, 4, 6, 2, 4, 4, 6, 2, 4, 4,12; /延時函數(shù) void delay_short(void) int i=0; for(i=0;i=255;i+)/清除函數(shù) void clear()timer=0;second=

19、0;minute=0;hour=0;pp=0;/*/鍵盤函數(shù)組(包括按鍵掃描函數(shù)、得到按鍵值函數(shù)和鍵盤情況函數(shù)) /按鍵掃描函數(shù) void keyscan()unsigned char cc;p1= 0x00;cc = c8255_c;key_down = (cc) & 0x0f; /得到按鍵值函數(shù) void getkey()unsigned char value;unsigned char i, j = 0x0e;for(i=0; i4; i+)p1 = j;value = c8255_c & 0x0f;if(!(value & 0x01)key_value = i + 0;return;i

20、f(!(value & 0x02)key_value = i + 4;return;if(!(value & 0x04)key_value = i + 8;return;if(!(value & 0x08)key_value = i + 12;return;j 8)&0xff;val_l = val&0xff;th1 = val_h;tl1 = val_l;for(m=0;mtime_listi;m+) for(k=0;k0x26;k+) if(position=5) display(position,0) ;position+=1; else position=0; i+; /*/調(diào)整時間函

21、數(shù) void modify_time(unsigned char d)unsigned char a,b,c; key_value=100; for(flag=0 ; flag=5 ; ) if(position=100) keycondition(); if(number0) flag=flag-1; key_value=100;delay_short();number=0;if(key_value=13)&(flag5) flag=flag+1; key_value=100; delay_short(); number=0;if(key_value=15) flag=6; if(0=key

22、_value)&(key_value=9) delay_short(); if(flag=0)&(key_value3) a=a%10+key_value*10; key_value=100; flag=flag+1; delay_short(); number=0; if(flag=1)&(key_value!=100)&(key_value10) a=a/10*10+key_value; key_value=100; flag=flag+1; delay_short(); number=0; if(flag=1)&(key_value!=100)&(key_value4) a=a/10*1

23、0+key_value; key_value=100; flag=flag+1; delay_short(); number=0; if(flag=2)&(key_value!=100)&(key_value6) b=b%10+key_value*10; key_value=100; flag=flag+1; delay_short(); number=0; if(flag=3)&(key_value!=100)&(key_value10) b=b/10*10+key_value; key_value=100; flag=flag+1; delay_short(); number=0; if(flag=4)&(key_value!=100)&(key_value6) c=c%10+key

溫馨提示

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

評論

0/150

提交評論