單片機課程設(shè)計報告 電子時鐘
《單片機課程設(shè)計報告 電子時鐘》由會員分享,可在線閱讀,更多相關(guān)《單片機課程設(shè)計報告 電子時鐘(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、荊楚理工學(xué)院 課程設(shè)計成果 學(xué)院: 電子信息工程學(xué)院 班 級: 學(xué)生姓名: 學(xué) 號: 設(shè)計地點(單位) 設(shè)計題目: 電子時鐘 完成日期: 2014 年 6 月 19 日
2、 指導(dǎo)教師評語: _________________________________
3、 成績(五級記分制): 教師簽名: 目 錄 1 摘要……………………………………………………………………1 2 系統(tǒng)簡介………………………………………………………………1 2.1 總體設(shè)計方案說明……………………………………………2 2.2 單片機系統(tǒng)組成方框圖………………………………………2 3 系統(tǒng)設(shè)計………………………………………………………………7 3.1 系統(tǒng)總體設(shè)計………………………………………………
4、…7 3.2 硬件電路設(shè)計………………………………………………8 3.3 軟件設(shè)計……………………………………………………11 4 實驗結(jié)果與討論……………………………………………………15 5 結(jié)論 …………………………………………………………………16 6 參考文獻 ……………………………………………………………17 7附錄…………………………………………………………………18 基于單片機的電子時鐘設(shè)計 1.摘要 20世紀末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動
5、了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 現(xiàn)代生活的人們越來越重視起了時間觀念,可以說是時間和金錢劃上了等號。對于那些對時間把握非常嚴格和準確的人或事來說,時間的不準確會帶來非常大的麻煩,所以以數(shù)碼管為顯示器的時鐘比指針式的時鐘表現(xiàn)出了很大的優(yōu)勢。數(shù)碼管顯示的時間簡單明了而且讀數(shù)快、時間準確顯示到秒。而機械式的依賴于晶體震蕩器,可能會導(dǎo)致誤差。 數(shù)字鐘是采用數(shù)字電路實現(xiàn)對“時”、“分”、“秒”數(shù)字顯示的計時裝置。數(shù)字鐘的精度、穩(wěn)定度遠遠超過老式機械鐘。在這次設(shè)計中,我們采用LED數(shù)碼管顯示時、分、秒,以24小時計時方式,根
6、據(jù)數(shù)碼管動態(tài)顯示原理來進行顯示,用12MHz的晶振產(chǎn)生振蕩脈沖,定時器計數(shù)。在此次設(shè)計中,電路具有顯示時間的其本功能,還可以實現(xiàn)對時間的調(diào)整。數(shù)字鐘是其小巧,價格低廉,走時精度高,使用方便,功能多,便于集成化而受廣大消費的喜愛,因此得到了廣泛的使用。 關(guān)鍵字:數(shù)字電子鐘 單片機 2系統(tǒng)簡介 數(shù)字鐘是采用數(shù)字電路實現(xiàn)對.時,分,秒.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠遠超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先
7、的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。 數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學(xué)習、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù),使數(shù)字鐘具有走時準確、性能穩(wěn)定、攜帶方便等優(yōu)點,它還用于計時、自動報時及自動控制等各個領(lǐng)域。 2.1 總體設(shè)計方案說明
8、 單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領(lǐng)域,故又稱為微控制器。 通常,單片機由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個單片機控制系統(tǒng)。單片機經(jīng)過1、2、3、3代的發(fā)展,正朝著多功能、高性能、低電壓、低功耗、低價格、大存儲容量、強I/O功能及較好的結(jié)構(gòu)兼容性方向發(fā)展。 目前,我國生產(chǎn)很多型號的單片機,在此,我們采用型號為STC89C52的單片機。因為:?STC89C52是一個低電壓,高性能CMOS 8位單片
9、機,片內(nèi)含4k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-52指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,內(nèi)置功能強大的微型計算機的AT89C52提供了高性價比的解決方案。 ?? ?STC89C52是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,STC89C52可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特
10、別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。 2.2 單片機的基本結(jié)構(gòu) MCS-52單片機內(nèi)部結(jié)構(gòu) ?? 8052單片機包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明: 中央處理器: ???中央處理器(CPU)是整個單片機的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進制數(shù)據(jù)或代碼,CPU負責控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。 數(shù)據(jù)存儲器(RAM) ????8052內(nèi)部有128個8位用戶數(shù)據(jù)存
11、儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個,可存放讀寫的數(shù)據(jù),運算的中間結(jié)果或用戶定義的字型表。 單片機8052的內(nèi)部結(jié)構(gòu) 程序存儲器(ROM): 8052共有4096個8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。 定時/計數(shù)器(ROM): 8052有兩個16位的可編程定時/計數(shù)器,以實現(xiàn)定時或計數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。 并行輸入輸出(I/O)口: 8052共有4組8位I/O口(P0、 P1、P2或P3),用于對外部數(shù)據(jù)的傳輸。 全雙工串行口:
12、 8052內(nèi)置一個全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當同步移位器使用。 中斷系統(tǒng): 8052具備較完善的中斷功能,有兩個外中斷、兩個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并具有2級的優(yōu)先級別選擇。 時鐘電路: 8052內(nèi)置最高頻率達12MHz的時鐘電路,用于產(chǎn)生整個單片機運行的脈沖時序,但8052單片機需外置振蕩電容。 單片機的結(jié)構(gòu)有兩種類型,一種是程序存儲器和數(shù)據(jù)存儲器分開的形式,即哈佛(Harvard)結(jié)構(gòu),另一種是采用通用計算機廣泛使用的程序存儲器與數(shù)據(jù)存儲器合二為一的結(jié)構(gòu),即林斯頓(Princeton)
13、結(jié)構(gòu)。INTEL的MCS-52系列單片機采用的是哈佛結(jié)構(gòu)的形式,而后續(xù)產(chǎn)品16位的MCS-96系列單片機則采用普林斯頓結(jié)構(gòu)。 下圖是MCS-52系列單片機的內(nèi)部結(jié)構(gòu)示意圖。 MCS-52系列單片機的內(nèi)部結(jié)構(gòu) MCS-52的引腳說明: MCS-52系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復(fù)用?,F(xiàn)在我們對這些引腳的功能加以說明: MCS-51的引腳說明: MCS-52系列單片機中的8031、8051及8751均采
14、用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復(fù)用?,F(xiàn)在我們對這些引腳的功能加以說明: 單片機的引腳圖 Pin9:RESET/Vpd復(fù)位信號復(fù)用腳,當8052通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全
15、部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),8052的初始態(tài)。 8051的復(fù)位方式可以是自動復(fù)位,也可以是手動復(fù)位,見下圖4。此外,RESET/Vpd還是一復(fù)用腳,Vcc掉電其間,此腳可接上備用電源,以保證單片機內(nèi)部RAM的數(shù)據(jù)不丟失。 Pin30:ALE/當訪問外部程序器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問內(nèi)部程序存儲器時,ALE端將有一個1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機是否工作,也可以當作一個時鐘向
16、外輸出。更有一個特點,當訪問外部程序存儲器,ALE會跳過一個脈沖。 如果單片機是EPROM,在編程其間,將用于輸入編程脈沖。 Pin29:當訪問外部程序存儲器時,此腳輸出負脈沖選通信號,PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上,外部程序存儲器則把指令數(shù)據(jù)放到P0口上,由CPU讀入并執(zhí)行。 上電自動和手動復(fù)位電路圖 內(nèi)部和外部時鐘方式圖 Pin31
17、:EA/Vpp程序存儲器的內(nèi)外部選通線,8051和8751單片機,內(nèi)置有4kB的程序存儲器,當EA為高電平并且程序地址小于4kB時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過4kB地址則讀取外部指令數(shù)據(jù)。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。顯然,對內(nèi)部無程序存儲器的8031,EA端必須接地。 3系統(tǒng)設(shè)計 3.1系統(tǒng)總體設(shè)計原理圖 3.2硬件電路設(shè)計 單片機最小系統(tǒng)的結(jié)構(gòu)圖 單片機的最小系統(tǒng)是由電源、復(fù)位、晶振、/EA=1組成,下面介紹一下每一個組成部分。
18、 1.電源引腳 Vcc 40 電源端 GND 20 接地端 工作電壓為5V,另有AT89LV51工作電壓則是2.7-6V, 引腳功能一樣。 2.外接晶體引腳 晶振連接的內(nèi)部、外部方式圖 XTAL1 19 XTAL2 18 XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時,時鐘發(fā)生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF左右。系統(tǒng)的時鐘電路設(shè)計是采用的內(nèi)部方式,即利用芯片內(nèi)部的
19、振蕩電路。AT89單片機內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。外接晶體諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12MHz,電容應(yīng)盡可能的選擇陶瓷電容,電容值約為22μF。在焊接刷電路板時,晶體振蕩器和電容應(yīng)盡可能安裝得與單片機芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。 3. 復(fù)
20、位 RST 9 在振蕩器運行時,有兩個機器周期(24個振蕩周期)以上的高電平出現(xiàn)在此引腿時,將使單片機復(fù)位,只要這個腳保持高電平,51芯片便循環(huán)復(fù)位。復(fù)位后P0-P3口均置1引腳表現(xiàn)為高電平,程序計數(shù)器和特殊功能寄存器SFR全部清零。當復(fù)位腳由高電平變?yōu)榈碗娖綍r,芯片為ROM的00H處開始運行程序。復(fù)位是由外部的復(fù)位電路來實現(xiàn)的。片內(nèi)復(fù)位電路是復(fù)位引腳RST通過一個斯密特觸發(fā)器與復(fù)位電路相連,斯密特觸發(fā)器用來抑制噪聲,它的輸出在每個機器周期的S5P2,由復(fù)位電路采樣一次。復(fù)位電路通常采用上電自動復(fù)位和按鈕復(fù)位兩種方式,此電路系統(tǒng)采用的是上電與按鈕復(fù)位電路。當時鐘頻率選用6MHz時,C取22μ
21、F,Rs約為200Ω,Rk約為1K。復(fù)位操作不會對內(nèi)部RAM有所影響。 4.輸入輸出引腳 (1) P0端口[P0.0-P0.7] P0是一個8位漏極開路型雙向I/O端口,端口置1(對端口寫1)時作高阻抗輸入端。作為輸出口時能驅(qū)動8個TTL。 對內(nèi)部Flash程序存儲器編程時,接收指令字節(jié);校驗程序時輸出指令字節(jié),要求外接上拉電阻。 在訪問外部程序和外部數(shù)據(jù)存儲器時,P0口是分時轉(zhuǎn)換的地址(低8位)/數(shù)據(jù)總線,訪問期間內(nèi)部的上拉電阻起作用。 (2) P1端口[P1.0-P1.7] P1是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將端口拉到
22、高電平,作輸入用。 對內(nèi)部Flash程序存儲器編程時,接收低8位地址信息。 (3) P2端口[P2.0-P2.7] P2是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對內(nèi)部Flash程序存儲器編程時,接收高8位地址和控制信息。 在訪問外部程序和16位外部數(shù)據(jù)存儲器時,P2口送出高8位地址。而在訪問8位地址的外部數(shù)據(jù)存儲器時其引腳上的內(nèi)容在此期間不會改變。 (4) P3端口[P3.0-P3.7] P2是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將端口拉到高電平,作輸入
23、用。 對內(nèi)部Flash程序存儲器編程時,接控制信息。除此之外P3端口還用于一些專門功能,具體請看下表。 P3引腳 兼用功能 P3.0 串行通訊輸入(RXD) P3.1 串行通訊輸出(TXD) P3.2 外部中斷0( INT0) P3.3 外部中斷1(INT1) P3.4 定時器0輸入(T0) P3.5 定時器1輸入(T1) P3.6 外部數(shù)據(jù)存儲器寫選通WR P3.7 外部數(shù)據(jù)存儲器寫選通RD P3端口引腳兼用功能表 發(fā)光二極管(LED)由特殊的半導(dǎo)體材料砷化鎵、磷砷化鎵等制成,可以單獨使用,也可以組裝成
24、分段式或點陣式LED顯示器件(半導(dǎo)體顯示器)。分段式顯示器(LED數(shù)碼管)由7條線段圍成8字型,每一段包含一個發(fā)光二極管。外加正向電壓時二極管導(dǎo)通,發(fā)出清晰的光。只要按規(guī)律控制各發(fā)光段亮、滅,就可以顯示各種字形或符號。LED數(shù)碼管有共陽、共陰之分。 .顯示電路顯示模塊需要實時顯示當前的時間,即時、分、秒,因此需要6個數(shù)碼管,另需兩個數(shù)碼管來顯示橫。采用動態(tài)顯示方式顯示時間,硬件連接如下圖所示,時的十位和個位分別顯示在第一個和第二個數(shù)碼管,分的十位和個位分別顯示在第四個和第五個數(shù)碼管,秒的十位和個位分別顯示在第七個和第八個數(shù)碼管,其余數(shù)碼管顯示橫線。LED顯示器的顯示控制方式按驅(qū)動方式可分成靜
25、態(tài)顯示方式和動態(tài)顯示方式兩種。對于多位LED顯示器,通常都是采用動態(tài)掃描的方法進行顯示。 3.3軟件設(shè)計 這次的數(shù)字電子鐘設(shè)計用到很多子程序,它們的流程圖如下所示。 開始 啟動定時器 按鍵檢測 時間顯示 主程序是先開始,然后啟動定時器,定時器啟動后在進行按鍵檢測,檢測完后,就可以顯示時間。 主程序流程圖 按鍵處理是先檢測秒按鍵是否按下,秒按鍵如果按下,秒就加1;如果沒有按下,就檢測分按鍵是否按下,分按
26、鍵如果按下,分就加1;如果沒有按下,就檢測時按鍵是否按下,時按鍵如果按下,時就加1;如果沒有按下,就把時間顯示出來。 N Y N Y N Y 時加1 顯示時間 結(jié)束 開始 秒按鍵按下? 秒加1 分按鍵按下? 分加1 時按鍵按下? 按鍵處理流程圖 定時器中斷時是先檢測1秒是否到,1秒如果到,秒單元就加1;如果沒到,就檢測1分鐘是否到,1分鐘如果到,分單元就加1;如果沒到,就檢測1小時是否
27、到,1小時如果到,時單元就加1,如果沒到,就顯示時間。 N 24小時到? 分單元清零,時單元加1 N N N Y Y 時單元清零 時間顯示 中斷返回 開始 一秒時間到? 60秒時間到? 60分鐘到? 秒單元加1 秒單元清零,分單元加1 Y Y 定時器中斷流程圖 時間顯示是先秒個位計算顯示,然后是秒十位計算顯示,
28、再是分個位計算顯示,再然后是分十位顯示,再就是時個位計算顯示,最后是時十位顯示。 時十位計算顯示 結(jié)束 開始 秒個位計算顯示 秒十位計算顯示 分個位計算顯示 分十位計算顯示 時個位計算顯示 時間顯示流程圖 4實驗結(jié)果與討論 單片機應(yīng)用系統(tǒng)的調(diào)試包括硬件和軟件兩部分,但是他們并不能完全分開。一般的方法是排除明顯的硬件故障,再進行綜合調(diào)試,排除可能的軟/硬件故障。 4.1 硬盤調(diào)試
29、拿到電路板后,首先要檢查加工質(zhì)量,并確保沒有任何方面的錯誤,如短路和斷路,尤其要避免電源短路;元器件在安裝前要逐一檢查,用萬用表測其數(shù)值,看是否與所用相同;完成焊接后,應(yīng)先空載上電(芯片座上不插芯片),并檢查各引腳的電位是否正確。若一切正常,方可在斷電的情況下將芯片插入,再次檢查各引腳的電位及其邏輯關(guān)系。將萬用表的探針放到單片機接電源的引腳上檢測一下,看是否符合要求。 4.2 系統(tǒng)性能測試與功能說明 (1).本設(shè)計以STC89C51為主控芯片. (2).顯示部分主要器件為三個2位共陽紅色數(shù)碼管,驅(qū)動采用 PNP 型8550三極管驅(qū)動,各端口配有限流電阻。 (3).冒號部分采用4個3mm
30、的紅色發(fā)光二極管。 (4).按鍵 S1~S3 占用 P3.2、P3.3、P3.4 口。 S1:功能選擇鍵,按一下調(diào)節(jié)小時,按兩下調(diào)節(jié)分鐘,按三下調(diào)節(jié)鬧鐘小時,按四下調(diào)節(jié)鬧鐘分鐘,按五下時鐘開始工作。 S2:數(shù)值加一按鍵(調(diào)節(jié)時間時相應(yīng)光標閃爍) S3:數(shù)值減一按鍵(調(diào)節(jié)時間時相應(yīng)光標閃爍)初始化鐘表時間為12:00:00。 (5).鬧鈴電路由有源蜂鳴器和 PNP 型三極管組成,初始化鬧鐘時間為06:30:00鬧鈴時間到時蜂鳴器鳴叫1分鐘,按任意鍵可關(guān)閉鈴聲。 4.3系統(tǒng)時鐘誤差分析 時間是一個基本物理量,具有連續(xù)、自動流逝、不重復(fù)等特性。我國時間基準來自國家授時中心,人們?nèi)粘J褂玫臅r
31、鐘就是以一定的精度與該基準保持同步的。結(jié)合時間概念和誤差理論,可以定義電子鐘的走時誤差S=S1-S2,S1表示程序?qū)嶋H運行計算所得的秒;S2表示客觀時間的標準秒。本次設(shè)計的單片機電子鐘系統(tǒng)中,其誤差主要來源包括晶體頻率誤差,定時器溢出誤差,延遲誤差。晶體頻率產(chǎn)生震蕩,容易產(chǎn)生走時誤差;定時器溢出的時間誤差,本應(yīng)這一秒溢出但卻在下一秒溢出,造成走時誤差;延遲時間過長或過短,都會造成與基準時間產(chǎn)生偏差,造成走時誤差。 4.4 軟件調(diào)試問題及解決 軟件程序的調(diào)試一般可以將重點放在分模塊調(diào)試上,統(tǒng)調(diào)是最后一環(huán)。軟件調(diào)試可以采取離線調(diào)試和在線調(diào)試兩種方式。前者不需要硬件仿真器,可借助于軟件仿真器即可
32、;后者一般需要仿真系統(tǒng)的支持。本次課題,Keil軟件來調(diào)試程序,通過各個模塊程序的單步或跟蹤調(diào)試,使程序逐漸趨于正確,最后統(tǒng)調(diào)程序。仿真部分采用protus 6 professional軟件,此軟件功能強大且操作較為簡單,可以很容易的實現(xiàn)各種系統(tǒng)的仿真。首先打開protus 6 professional軟件,在元件庫中找到要選用的所有元件,然后進行原理圖的繪制;繪制好后再選擇wave6000已經(jīng)編譯好的*.hex文件,選擇運行,觀察顯示結(jié)果,根據(jù)顯示的結(jié)果和課題的要求再修改程序,再運行查,直到滿足要求。 5結(jié)論 通過這次課程設(shè)計,我學(xué)到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前
33、學(xué)過的零散的知識串到一起。首先硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作?;菊莆樟薖ROTUES原理圖的方法,并設(shè)計了一個單片機最小系統(tǒng)。通過開發(fā)板的設(shè)計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法。并且我學(xué)會了分析問題解決問題的能力,加深了對所學(xué)理論知識的理解和運用。我的動手能力得到了很大的提高,創(chuàng)新意識得到了鍛煉。通過硬件電路的調(diào)試,實現(xiàn)了預(yù)先設(shè)定的功能,設(shè)計主要用到的原件不多,最主要的是程序比較繁瑣尤其是校時模塊。顯示模塊以前都有學(xué)過,所以想對來說較為簡單。這次設(shè)計就是讓我們學(xué)以致用,將書本上學(xué)到的知識應(yīng)用于實踐。
34、雖然在設(shè)計中遇到了不少困難,在我們通過自己的各種方式解決問題的同時,也提升了自己的專業(yè)水平。 這次課程設(shè)計,我收獲了很多,在設(shè)計過程中遇到了不少困難,都在同學(xué)老師的幫助下一步步得到解決。我深深體會到團結(jié)合作,互相幫助是何等重要。還加深了對51單片機系列知識及其系統(tǒng)的認識。這個設(shè)計題目并不怎么新穎,但從中體現(xiàn)到了個系統(tǒng)開發(fā)設(shè)計的過程,讓我們受益匪淺.在這次的設(shè)計中,讓我更進一步的提高了動手能力,也重新復(fù)習了一次單片機的程序編程能力,加強了對編程能力的理解和對相應(yīng)資料的查閱。 6參考文獻 [1]劉樂喜. 微機計算機接口技術(shù)及應(yīng)用[M].華中科技大學(xué)出版社. [2]石東海. 單片機數(shù)據(jù)通信技術(shù)
35、從入門到精通.[M].西安電子科技大學(xué)出版社. [3]謝自美. 電子線路設(shè)計、實驗、測試.[M].華中科技大學(xué)出版社. [4]李華,李東. MC51/98系列單片機原理與應(yīng)用。[M].機械工業(yè)出版社. [5]馬忠梅. ARM&Linux嵌入式系統(tǒng)教程.北京:北京航空航天大學(xué)出版社. [6]李建忠.單片機原理及應(yīng)用.西安:西安電子科技大學(xué). [7]韓志軍. 單片機應(yīng)用系統(tǒng)設(shè)計[M].機械工業(yè)出版社. [8]周潤景. Proteus在MCS-51&ARM7系統(tǒng)中的應(yīng)用百例[M].電子工業(yè)出版社. [9]馬忠梅. 單片機的C語言應(yīng)用程序設(shè)計[M].北京航空航天大學(xué)出版社. [1
36、0]劉樹中. 單片機和液晶顯示驅(qū)動器串行接口的實現(xiàn)[J].
附錄
仿真圖
程序
硬件連接:
數(shù)碼管:段碼為:P1
位碼分別為:P2.5~P2.0
蜂鳴器:P2.7
功能鍵k1:P3.4
加建k2:P3.5
減鍵k3:P3.6
***************************************/
#include
37、2^4;//位碼2聲明 sbit smg3=P2^3;//位碼3聲明 sbit smg4=P2^2;//位碼4聲明 sbit smg5=P2^1;//位碼5聲明 sbit smg6=P2^0;//位碼6聲明 sbit k1=P3^4; //按鍵k1的聲明 sbit k2=P3^5; //按鍵k2的聲明 sbit k3=P3^6; //按鍵k3的聲明 sbit beep=P2^7; //蜂鳴器聲明 /*定義一些變量*/ char d=0,e=0,a=0,b=0,n=0,shi=12,fen=0,miao=0,b_shi=6,b_fen=30,b_miao=0;
38、 char code table[]={//共陽級數(shù)碼管碼表0-9 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void init();//初始化函數(shù)聲明 void delay(int z); //帶參數(shù)延時函數(shù)聲明 void display(char s,f,m);//帶參數(shù)顯示函數(shù)聲明 void key();//按鍵控制函數(shù)聲明 void main()//主函數(shù) { init(); //調(diào)用初始化函數(shù) while(1)//主函數(shù)內(nèi)大循環(huán) { if(d==0) key(); //如果d=0則
39、掃描按鍵函數(shù) if(shi==b_shi&&fen==b_fen)//如果鬧鈴時間到 就蜂鳴器響 { if(d==1&&!(k1&k2&k3))// 任意按鍵按下關(guān)閉鈴聲 { e=1; //關(guān)閉鬧鈴標志位e d=0; //屏蔽按鍵函數(shù)標志位d } if(e==0)//關(guān)閉鈴聲 { d=1; //屏蔽按鍵函數(shù) beep=0;//蜂鳴器鳴叫 delay(10); //延時一會 beep=1;//關(guān)閉蜂鳴器 } } if(n==0||n==1||n==2)
40、//如果處在功能鍵的0、1、2三個中的某個狀態(tài) display(shi,fen,miao);//調(diào)用顯示時鐘 if(n==3||n==4)//如果處在功能鍵的3、4中的某個狀態(tài) display(b_shi,b_fen,b_miao);//調(diào)用顯示鬧鈴時間 } } void init() //初始化函數(shù) { IE=0X8a;//1000 1010 TMOD=0X01; //0001 0001選擇定時器0的工作方式1 選擇定時器1的工作方式1 TH0=(65536-50000)/256;//初值15536 TL0=(65536-50000)%256
41、; TR0=1; //開啟定時器0 TH1=(65536-50000)/256;//初值15536 TL1=(65536-50000)%256; TR1=1; //開啟定時器1 } void timer0() interrupt 1 //定時器0中斷服務(wù)程序 { TH0=(65536-50000)/256;//進入中斷重新賦初值15536 TL0=(65536-50000)%256;//計數(shù)5萬次(50毫秒) a++;//每進一次中斷a加一 if(a==20) //如果進入20次中斷,正好一秒 { a=0; //a到20 就清零 mi
42、ao++;//a每計20次,秒加一 if(miao==60) { //秒到達60秒后清零,分加一 miao=0; fen++; e=0;//鬧鈴標志位清零 if(fen==60) {//分到達60后清零,時加一 fen=0; shi++; if(shi==24) { //時到達24后清零 shi=0; } } } } } void timer1() interrupt 3 //定時器1中斷服務(wù)程序,用來設(shè)置光標閃爍頻率 { TH1=(65536-
43、50000)/256;//進入中斷重新賦初值15536 TL1=(65536-50000)%256;//計數(shù)5萬次(50毫秒) b++; //標志位b,用來確定光標閃爍頻率 if(b==20) b=0;//b=20 時被清零 } void display(char s,f,m)//帶參數(shù)的顯示函數(shù),參數(shù)為s f m { smg1=0; //打開數(shù)碼管1位選 P1=table[s/10];//給數(shù)碼管1賦值,值為小時的十位 delay(1); //延時 smg1=1; //關(guān)閉數(shù)碼管1位選 P1=0Xff; //關(guān)閉數(shù)碼管1段選
44、if(b<10&&(n==1||n==3)) {//在1,3狀態(tài)下,b<10時,關(guān)閉數(shù)碼管2 smg2=1; P1=0Xff; } else //其他狀態(tài)下,數(shù)碼管2正常顯示 { smg2=0;//打開數(shù)碼管2位選 P1=table[s%10];//給數(shù)碼管2賦值,值為小時的個位 delay(1);//延時 smg2=1; //關(guān)閉數(shù)碼管2位選 P1=0Xff; //關(guān)閉數(shù)碼管2段選 } smg3=0; //打開數(shù)碼管3位選 P1=table[f/10]; //給數(shù)碼管3賦值,值為分鐘的十位 delay(1);
45、//延時 smg3=1; //關(guān)閉數(shù)碼管3位選 P1=0Xff;//關(guān)閉數(shù)碼管3段選 if(b<10&&(n==2||n==4)) { //在2,4狀態(tài)下,b<10時,關(guān)閉數(shù)碼管4 smg4=1; P1=0Xff; } else { //其他狀態(tài)下,數(shù)碼管4正常顯示 smg4=0;//打開數(shù)碼管4位選 P1=table[f%10];//給數(shù)碼管4賦值,值為分鐘的個位 delay(1); //延時 smg4=1; //關(guān)閉數(shù)碼管4位選 P1=0Xff; //關(guān)閉數(shù)碼管4段選 } smg5=0;//打開數(shù)
46、碼管5位選 P1=table[m/10];//給數(shù)碼管5賦值,值為秒鐘的十位 delay(1); //延時 smg5=1; //關(guān)閉數(shù)碼管5位選 P1=0Xff; //關(guān)閉數(shù)碼管5段選 smg6=0; //打開數(shù)碼管6位選 P1=table[m%10]; //給數(shù)碼管6賦值,值為秒鐘的個位 delay(1);//延時 smg6=1; //關(guān)閉數(shù)碼管6位選 P1=0Xff;//關(guān)閉數(shù)碼管6段選 } void delay(int z)//帶參數(shù)延時函數(shù),參數(shù)Z { //每次大約延時1毫秒 int x,y; for(x=z;x>0
47、;x--) //循環(huán)110*z次空函數(shù) for(y=110;y>0;y--) ; } void key() //按鍵控制函數(shù) { if(k1==0) { //功能鍵k1被按下 delay(5);//消抖延時 if(k1==0) { n++;//n記錄功能鍵狀態(tài) if(n>4) n=0; //n清零 while(k1==0);//等待松手 } } if(n==0)//狀態(tài)0, { TR0=1;//定時器打開狀態(tài) } if(n==1)//狀態(tài)1 { TR0=0;//關(guān)閉定
48、時器0 if(k2==0) { //k2被按下 delay(5);//消抖延時 if(k2==0) { shi++;//小時加一 if(shi==24) shi=0;//達到24清零 while(k2==0);//等待松手 } } if(k3==0) { //k3被按下 delay(5); //消抖延時 if(k3==0) { shi--; //小時減一 if(shi<0) shi=23;//小于0,重新復(fù)制 whil
49、e(k3==0);//等待松手 } } } if(n==2)//狀態(tài)2 { TR0=0; //關(guān)閉定時器0 if(k2==0) { //k2被按下 delay(5);//消抖延時 if(k2==0) { fen++;//分加一 if(fen==60) fen=0;//分到達60 分清零 while(k2==0);//等待松手 } } if(k3==0) { //k3被按下 delay(5);//消抖延時 if(k3==0)
50、 { fen--;//分減一 if(fen<0) fen=59;//分小于0,分重新賦值59 while(k3==0);//等待松手 } } } if(n==3)//狀態(tài)三 { TR0=1;//開啟定時器 if(k2==0) { //k2被按下 delay(5);//消抖延時 if(k2==0) { b_shi++;//鬧鈴時間加一 if(b_shi==24) b_shi=0;//鬧鈴時間清零 while(k2==0);//等
51、待松手 } } if(k3==0) { //k3被按下 delay(5);//消抖延時 if(k3==0) { b_shi--;//鬧鈴時間減一 if(b_shi<0) b_shi=23;//鬧鈴時間 while(k3==0);//等待松手 } } } if(n==4)//狀態(tài)四 { TR0=1;//關(guān)閉定時器0 if(k2==0) { //k2被按下 delay(5);//消抖延時 if(k2==0) {
52、 b_fen++;//鬧鈴時間分加一 if(b_fen==60) b_fen=0;//鬧鈴分到達60 清零 while(k2==0);//等待松手 } } if(k3==0) { //k3被按下 delay(5);//消抖延時 if(k3==0) { b_fen--;//鬧鈴時間分減一 if(b_fen<0) b_fen=59;//鬧鈴時間分重新賦值 while(k3==0);//等待松手 } } } } 元件清單 1、9*7萬用板 一張 2、ATC89C52 一片 3、按鍵 3個 4、DIP40插座 一個 5、數(shù)碼管 3個 6、3mmLED 4個 7、蜂鳴器 1個 8、三極管 7個 9、電阻4.7 7個 10、電阻470 8個 11、電阻10K 1個 12、晶體 1個 13、30PF電容 2個 14、10uf電容 1個 15、自鎖開關(guān) 1個 16、USb母口 一個 17、導(dǎo)線 20cm 18、銅柱 4套 - 33 -
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復(fù)習題含答案
- 1 各種煤礦安全考試試題含答案