《單片微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)報(bào)告 《可調(diào)數(shù)字時(shí)鐘設(shè)計(jì)》 目錄
一、選題意義 3
二、實(shí)現(xiàn)方案選擇 3
三、設(shè)計(jì)原理 4
四,時(shí)鐘的實(shí)現(xiàn) 6
A.電路設(shè)計(jì) 6
B 程序設(shè)計(jì) 11
五、程序調(diào)試及仿真 12
六、設(shè)計(jì)中遇到的問(wèn)題 14
七、設(shè)計(jì)中可以改進(jìn)的地方 14
八、心得體會(huì) 14
參考文獻(xiàn) 15
附錄 16
一、選題意義 從古至今,人類以各式各樣的方法來(lái)記錄時(shí)間,上至水滴計(jì)時(shí)、日冕觀測(cè),下至擺鐘,機(jī)械表。人類無(wú)時(shí)無(wú)刻都在關(guān)注著時(shí)間,以調(diào)節(jié)自身日常生活的安排與進(jìn)展。 1957年,Ventura發(fā)明了世界上第一個(gè)電子表,從而奠定了電子時(shí)鐘的基礎(chǔ),電子時(shí)鐘開(kāi)始迅速發(fā)展起來(lái)�,F(xiàn)代的電子時(shí)鐘是基于單片機(jī)的一種計(jì)時(shí)工具,采用延時(shí)程序產(chǎn)生一定的時(shí)間中斷,用于一秒的定義,通過(guò)計(jì)數(shù)方式進(jìn)行滿六十秒分鐘進(jìn)一,滿六十分小時(shí)進(jìn)一,滿二十四小時(shí)小時(shí)清零。從而達(dá)到計(jì)時(shí)的功能,是人民日常生活補(bǔ)課缺少的工具�,F(xiàn)在高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(shù),因此走時(shí)精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計(jì)時(shí)時(shí),譯碼代替機(jī)械式傳動(dòng),用LED顯示器代替指針顯示進(jìn)而顯示時(shí)間,減小了計(jì)時(shí)誤差,這種表具有時(shí)、分、秒顯示時(shí)間的功能,還可以進(jìn)行時(shí)和分的校對(duì),片選的靈活性好。 二、實(shí)現(xiàn)方案選擇 本文基于51單片機(jī)設(shè)計(jì)的可調(diào)數(shù)字時(shí)鐘,具有傳統(tǒng)意義上的鐘表的特點(diǎn),可以顯示當(dāng)前時(shí)間,并且還是以時(shí)-分-秒的形式來(lái)顯示當(dāng)前時(shí)間。再者通過(guò)相應(yīng)按鍵來(lái)實(shí)現(xiàn)分別對(duì)時(shí)、分、秒的調(diào)節(jié)。運(yùn)用單片微機(jī)原理與接口技術(shù)和C語(yǔ)言程序設(shè)計(jì)以及數(shù)字電子技術(shù),通過(guò)兩塊四位七段數(shù)碼管和鍵盤(pán)來(lái)顯示并調(diào)節(jié)時(shí)間。需要使用的電路分別是以下模塊:?jiǎn)纹瑱C(jī)最小系統(tǒng)、2塊四位七段數(shù)碼管以及鍵盤(pán)電路三部分組成。使用單 片機(jī)作為控制核心可以簡(jiǎn)化硬件電路采用軟件編程控制單片機(jī)實(shí)現(xiàn)硬件電路的功能降低能耗降低成本。軟件采用C語(yǔ)言編程方便靈活大大加快了軟件開(kāi)發(fā)速度縮短了開(kāi)發(fā)周期并且便于移植。為提高開(kāi)發(fā)效率和硬件穩(wěn)定性采用了功能強(qiáng)大的硬件 仿真軟件Proteus依托該軟件提供的仿真環(huán)境搭配Keil作為軟件開(kāi)發(fā)調(diào)試環(huán)境進(jìn)行仿 真調(diào)試成功。 三、設(shè)計(jì)原理 AT895S52單片機(jī)的內(nèi)部16位定時(shí)器/計(jì)數(shù)器是一個(gè)可編程定時(shí)/計(jì)數(shù)器,它既可以工作在13位定時(shí)方式,也可以工作在16位定時(shí)方式或8位定時(shí)方式,只要通過(guò)設(shè)置特殊功能寄存器TMOD即可完成。定時(shí)/計(jì)數(shù)器核實(shí)工作也可以通過(guò)TCON特殊功能寄存器來(lái)設(shè)置的。在此設(shè)計(jì)中,選擇16位定時(shí)工作方式。對(duì)于T0來(lái)說(shuō),系統(tǒng)時(shí)鐘位12MHz,最大定時(shí)也只有65536us,無(wú)法達(dá)到所需的1s的定時(shí),因此必須通過(guò)軟件來(lái)處理這個(gè)問(wèn)題,假設(shè)取T0的最大定時(shí)為50ms,即要定時(shí)1s需要經(jīng)過(guò)20次的50ms的定時(shí)。T0定時(shí)器/計(jì)數(shù)器的TH0、TL0的初值設(shè)定可以通過(guò)以下公式計(jì)算: TH0=(2^16-50000)/256 TL0=(2^16-50000)%256 為了將時(shí)間在LED數(shù)碼管上顯示,可采用靜態(tài)顯示法和動(dòng)態(tài)顯示法,由于靜態(tài)顯示法需要譯碼器,數(shù)據(jù)鎖存器等較多硬件,可采用動(dòng)態(tài)顯示法實(shí)現(xiàn)LED顯示,通過(guò)對(duì)每位數(shù)碼管的依次掃描,使對(duì)應(yīng)數(shù)碼管亮,同時(shí)向該數(shù)碼管送對(duì)應(yīng)的字碼,使其顯示數(shù)字。由于數(shù)碼管掃描周期很短,由于人眼的視覺(jué)暫留效應(yīng),使數(shù)碼管看起來(lái)總是亮的,從而實(shí)現(xiàn)了各種顯示。 針對(duì)要實(shí)現(xiàn)的功能,采用AT89S52單片機(jī)進(jìn)行設(shè)計(jì),AT89S52 單片機(jī)是一款低功耗,高性能CMOS8位單片機(jī),片內(nèi)含4KB在線可編程(ISP)的可反復(fù)擦寫(xiě)1000次的Flash只讀程序存儲(chǔ)器,器件采用高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS- 51指令系統(tǒng)及80C51引腳結(jié)構(gòu)。這樣,既能做到經(jīng)濟(jì)合理又能實(shí)現(xiàn)預(yù)期的功能。 在程序方面,采用分塊設(shè)計(jì)的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項(xiàng)功能。程序可分為鬧鐘的聲音程序、時(shí)間顯示程序、日期顯示程序,秒表顯示程序,時(shí)間調(diào)整程序、鬧鐘調(diào)整程序、定時(shí)調(diào)整程序,延時(shí)程序等。運(yùn)用這種方法,關(guān)鍵在于各模塊的兼容和配合,若各模塊不匹配會(huì)出現(xiàn)意想不到的錯(cuò)誤。 首先,在編程之前必須了解硬件結(jié)構(gòu)尤其是各引腳的用法,以及內(nèi)部寄存器、存儲(chǔ)單元的用法,否則,編程無(wú)從下手,電路也無(wú)法設(shè)計(jì)。這是前期準(zhǔn)備工作。第二部分是硬件部分:依據(jù)想要的功能分塊設(shè)計(jì)設(shè)計(jì),比如輸入需要開(kāi)關(guān)電路,輸出需要顯示驅(qū)動(dòng)電路和數(shù)碼管電路等。第三部分是軟件部分:先學(xué)習(xí)理解匯編語(yǔ)言的編程方法再根據(jù)設(shè)計(jì)的硬件電路進(jìn)行分塊的編程調(diào)試,最終完成程序設(shè)計(jì)。第四部分是軟件畫(huà)圖部分:設(shè)計(jì)好電路后進(jìn)行畫(huà)圖,包括電路圖和仿真圖的繪制。第五部分是軟件仿真部分:軟硬件設(shè)計(jì)好后將軟件載入芯片中進(jìn)行仿真,仿真無(wú)法完成時(shí)檢查軟件程序和硬件電路并進(jìn)行修改直到仿真成功。第六部分是硬件實(shí)現(xiàn)部分:連接電路并導(dǎo)入程序檢查電路,若與設(shè)計(jì)的完全一樣一般能實(shí)現(xiàn)想要的功能。最后進(jìn)行功能擴(kuò)展,在已經(jīng)正確的設(shè)計(jì)基礎(chǔ)上,添加額外的功能. 四,時(shí)鐘的實(shí)現(xiàn) A.電路設(shè)計(jì) 1. 整體設(shè)計(jì) 此次設(shè)計(jì)主要是應(yīng)用單片機(jī)來(lái)設(shè)計(jì)電子時(shí)鐘,硬件部分主要分以下電路模塊:顯示電路用2個(gè)四位共陰數(shù)碼管分別顯示時(shí)、分、秒,通過(guò)動(dòng)態(tài)掃描進(jìn)行顯示,從而避免了譯碼器的使用,同時(shí)節(jié)約了I/0端口,使電路更加簡(jiǎn)單。單片機(jī)采用AT89S52系列,這種單片機(jī)應(yīng)用簡(jiǎn)單,適合電子鐘設(shè)計(jì)。 電路的總體設(shè)計(jì)框架如下:  2. 分塊設(shè)計(jì) 模塊電路主要分為:?jiǎn)纹瑱C(jī)最小系統(tǒng)、2塊四位七段數(shù)碼管以及鍵盤(pán)電路三部分組成 2.1 單片機(jī)最小系統(tǒng)部分 對(duì)51系列單片機(jī)來(lái)說(shuō),最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、晶振電路、復(fù)位電路.分四個(gè)部分:
1.晶振,至于大小由所用單片機(jī)時(shí)鐘周期要求而決定(用于計(jì)時(shí),與兩個(gè)電容并聯(lián)使用,電容大小由所用晶振決定,一般用22pF)
2.復(fù)位電路(用于復(fù)位)
3.電源(用于供電,一般用電腦的USB口供電)
4.燒制程序的口(可用串口配合MAX232配合使用,也可以做個(gè)并口輸入,這個(gè)要根據(jù)所使用單片機(jī)的種類決定,比如ATC可用并口,STC一般只用串口輸入等等) 以下為輸入部分樣例: 
其中晶振與復(fù)位電路 本實(shí)驗(yàn)單片機(jī)時(shí)鐘用內(nèi)部時(shí)鐘,模塊如下: 
復(fù)位電路為手動(dòng)復(fù)位構(gòu)成,模塊如下: 
2.2 四位七段數(shù)碼管 本電路的輸出信號(hào)為7段數(shù)碼管的位選和段選信號(hào)(其中位選信號(hào)由P2口輸出,段選信號(hào)由P0口輸出),時(shí)間提醒指示燈(LED燈,由P3.2口輸出) 本實(shí)驗(yàn)的數(shù)碼管是共陰的,為了防止段選信號(hào)不能驅(qū)動(dòng)數(shù)碼管,故在P0口連接上拉電阻后,再送段選信號(hào),以提高驅(qū)動(dòng),位選信號(hào)直接從P2口接入,如下圖: 
時(shí)間提醒燈由P3.2端輸出,模塊如下: 
2.3 鍵盤(pán)電路 鍵盤(pán)電路采用4個(gè)四腳輕觸開(kāi)關(guān)來(lái)搭建鍵盤(pán)電路,分別用來(lái)對(duì)時(shí)、分、秒、復(fù)位時(shí)間的控制與調(diào)節(jié),以下是有關(guān)于四腳輕觸開(kāi)關(guān)的一些參數(shù)以及鍵盤(pán)電路的原理圖 四腳輕觸開(kāi)關(guān)參數(shù): 
鍵盤(pán)電路的原理圖 
分別由P1.0,P1.1,P1.2,P1.3讀取四個(gè)四腳開(kāi)關(guān)的值,并由單片機(jī)做出相應(yīng)的響應(yīng) 由于四腳輕觸開(kāi)關(guān)按動(dòng)時(shí)抖動(dòng)現(xiàn)象,由此可以通過(guò)編寫(xiě)延時(shí)程序來(lái)實(shí)現(xiàn)“消抖”。延時(shí)程序可參考如下程序段: 
各模塊拼接組合,電路總體設(shè)計(jì)圖如下: 
B 程序設(shè)計(jì) B.1 程序總體設(shè)計(jì) 本實(shí)驗(yàn)用匯編程序完成. 程序總的流程圖如下: 
B.2 程序主要模塊 B.2.1 延時(shí)模塊 數(shù)碼管顯示動(dòng)態(tài)掃描時(shí),用到延時(shí)程序,這里使用延遲1ms的程序,此程序需反復(fù)調(diào),除數(shù)碼管動(dòng)態(tài)掃描外. B.2.2中斷服務(wù)程序 本實(shí)驗(yàn)中,T0中斷為時(shí)鐘定時(shí)所用,T1中斷用于音樂(lè)播放。T0的定時(shí)長(zhǎng)度為0.01s,工作于方式0,計(jì)數(shù)1次,時(shí)長(zhǎng)1us,故計(jì)數(shù)器計(jì)數(shù)10000次,進(jìn)入中斷,計(jì)數(shù)初值為65536-10000=55536=#0D8F0,裝滿定時(shí)器需要0.01s的時(shí)間,從而100次中斷為一秒,一秒之后,判斷是否到60秒,若不到則秒加一,然后返回,若到,則秒賦值為0,分加一,依次類推。 B.2.3 顯示子程序 8個(gè)數(shù)碼管輪流進(jìn)行顯示,分別顯示50ms,依賴人的視覺(jué) 暫留效應(yīng),給人以數(shù)碼管持續(xù)高亮的錯(cuò)覺(jué)。 B.2.4掃描鍵盤(pán)程序 通過(guò)讀取P1口的P1.0,P1.2,P1.3的0或1值來(lái)判斷哪個(gè)按鍵被按下,同時(shí)添加“消抖”程序來(lái)防止單片機(jī)誤判。 B.2.5主程序 主程序只要是對(duì)定時(shí)/計(jì)數(shù)器裝載初值,初始化定時(shí)/計(jì)數(shù)器以及啟動(dòng)定時(shí)/計(jì)數(shù)器,同時(shí)調(diào)用以上子程序來(lái)完成要求和設(shè)計(jì)時(shí)間提醒燈程序來(lái)實(shí)現(xiàn)LED的亮滅。 五、程序調(diào)試及仿真 1、程序軟件編譯器使用uVision4。這里使用Proteus7進(jìn)行電路仿真。該軟件具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤(pán)和LED點(diǎn)陣系統(tǒng)仿真的功能,同時(shí)有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。 2、先在Proteus上繪制硬件電路,電路設(shè)計(jì)完成后就可以進(jìn)行仿真。先雙擊單片機(jī),把用keiluVision4編譯生成的HEX文件指定為下載文件,點(diǎn)擊PLAY鍵即可進(jìn)行仿真。當(dāng)出現(xiàn)ANALYSER ERRORS時(shí),表示電路有錯(cuò)誤,列表中說(shuō)明了具體的錯(cuò)誤,必須要先排錯(cuò)才可以進(jìn)行仿真。 軟件調(diào)試及Proteus仿真完成后就進(jìn)行硬件的安裝。本設(shè)計(jì)按照原先設(shè)計(jì)好的電路圖進(jìn)行總體上的布置,采用人工搭電路的方法進(jìn)行硬件的安裝。 
3、安裝時(shí)要考慮受熱、穩(wěn)固等多方面的影響使用電烙鐵時(shí)要控制好焊接的時(shí)間,電烙鐵停留的時(shí)間太短,焊錫不易完全熔化,形成“虛焊”,而焊接時(shí)間太長(zhǎng)又容易損壞元器件,每一兩秒內(nèi)要焊好一個(gè)焊點(diǎn),若沒(méi)完成,寧愿等一會(huì)兒再焊一次。其次芯片的擺置要方便連線,焊接時(shí)要先把芯片拔出,等線接好了再插上去。在焊接時(shí)要考慮電路的抗干擾能力同時(shí)要充分考慮電源對(duì)單片機(jī)的影響。每焊接完一個(gè)模塊,要用萬(wàn)能表根據(jù)電路圖檢查有沒(méi)有接錯(cuò)、短路等現(xiàn)象,確認(rèn)正確后再繼續(xù)下一個(gè)模塊。為了防止在焊接過(guò)程中由于過(guò)熱對(duì)AT89S52單片機(jī)芯片以及其他芯片造成損壞,建議先將相應(yīng)的芯片底座焊接在電路板上,然后在焊接完畢后在插進(jìn)芯片。在焊接的過(guò)程中,在安全可靠可正常工作的情況下,力保電路板接線簡(jiǎn)潔。防止被電烙鐵燙傷。 六、設(shè)計(jì)中遇到的問(wèn)題 1、 第一次上電時(shí),數(shù)碼管沒(méi)顯示,用萬(wàn)用表測(cè)得單片機(jī)VCC接口無(wú)電壓。 解決方法:將萬(wàn)用表打到直流電壓檔來(lái)測(cè)量USB電源口發(fā)現(xiàn)將USB口的正負(fù)極性弄反了。最后重新接線。 2、單片機(jī)正常工作時(shí),時(shí)間提醒燈沒(méi)有按照設(shè)定的時(shí)間區(qū)間來(lái)亮滅。 解決方法:由于采用C語(yǔ)言來(lái)編寫(xiě)程序時(shí),使用了if()指令來(lái)控制LED亮滅,并且在使用多條件時(shí)不注意if()格式,導(dǎo)致了實(shí)際運(yùn)行結(jié)果不符合期望結(jié)果。所以改寫(xiě)程序后,運(yùn)行正常,符合要求。 七、設(shè)計(jì)中可以改進(jìn)的地方 1、可以增設(shè)年份、月份以及星期的顯示 2、可以增設(shè)調(diào)節(jié)電路來(lái)實(shí)現(xiàn)可以任意時(shí)間提醒 八、心得體會(huì) 本文先從整體論述了設(shè)計(jì)電子鐘的大致思路,然后再采用劃分模塊的方法,將硬件電路劃分為開(kāi)關(guān)電路,顯示驅(qū)動(dòng)電路,以及數(shù)碼管電路等,而軟件部分,則依據(jù)要實(shí)現(xiàn)的功能,劃分為:秒表顯示程序,時(shí)間調(diào)整程序。最后將各模塊集成為一個(gè)整體,合成一個(gè)多功能的電子鐘。在程序編寫(xiě)的過(guò)程中,通過(guò)查閱不少的書(shū)籍以及參考一下網(wǎng)上一些可用的程序,我更加加深了對(duì)單片機(jī)定時(shí)/計(jì)數(shù)器的工作原理以及使用方法。同時(shí),通過(guò)對(duì)實(shí)際的單片機(jī)最小系統(tǒng)的搭建與焊接,我更加掌握了單片機(jī)最小系統(tǒng)的硬件要求和焊接技術(shù)。 再者,通過(guò)可調(diào)數(shù)字時(shí)鐘設(shè)計(jì)我使用學(xué)會(huì)了如何使用單片機(jī)做出自己想要做的產(chǎn)品同時(shí)也提高了我使用單片機(jī)方面的能力和經(jīng)驗(yàn)。同時(shí)使我能夠更加熟練的使用proteus 電路仿真軟件和keill程序編寫(xiě)軟件。 參考文獻(xiàn) 【1】宋躍,《單片微機(jī)原理與接口技術(shù)》,電子工業(yè)出版社 【2】周潤(rùn)景,劉曉霞,《單片機(jī)實(shí)用系統(tǒng)設(shè)計(jì)與仿真經(jīng)典實(shí)例》,電子工業(yè)出版社 附錄 附錄1:整體電路仿真圖 
附錄2:電路實(shí)物圖 

單片機(jī)源程序如下: - #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit s_set=P1^0;
- sbit m_set=P1^1;
- sbit h_set=P1^2;
- sbit reset=P1^3;
- sbit led=P3^2;
- unsigned char second,minute,hour,tcnt,restar=0;
- uchar code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar code table[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39,0x00};
- uchar dispbuf[8];
-
- void delay(unsigned int us)
- {
- while(us--);
- }
- void scandisp()
- {
- unsigned char i,value;
- for(i=0;i<8;i++)
- {
- P2=0xff;
- value=table[dispbuf[i]];
- P0=value;
- P2=scan[i];
- delay(50);
- }
- }
-
- void Timer0(void)interrupt 1 using 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- tcnt++;
- if(tcnt==20)
- {
- second++;
- tcnt=0;
- if(second==60)
- {
- minute++;
- second=0;
- if(minute==60)
- {
- hour++;
- minute=0;
- if(hour==24)
- {
- hour=0;
- minute=0;
- second=0;
- tcnt=0;
- }
- }
- }
- }
- }
-
- void display()
- {
- scandisp();
- dispbuf[6]=second/10;
- dispbuf[7]=second%10;
- dispbuf[5]=10;
- dispbuf[3]=minute/10;
- dispbuf[4]=minute%10;
- dispbuf[2]=10;
- dispbuf[0]=hour/10;
- dispbuf[1]=hour%10;
- }
-
- void key_test()
- {
- display();
- P1=0xff;
- restar=0;
- if(s_set==0)
- {
- delay(100);
- if(s_set==0)
- {
- second++;
- if(second==60)
- {
- second=0;
- }
- while(s_set==0) display();
- }
- }
- if(m_set==0)
- {
- delay(100);
- if(m_set==0)
- {
- minute++;
- if(minute==60)
- {
- minute=0;
- }
- while(m_set==0) display();
- }
- }
- if(h_set==0)
- {
- delay(100);
- if(h_set==0)
- {
- hour++;
- if(hour==24)
- {
- hour=0;
- }
- while(h_set==0) display();
- }
- }
- if(reset==0)
- {
- delay(100);
- if(reset==0)
- {
- restar=1;
- }
- }
- }
-
- void main()
- {
- while(1)
- {
- P3=0x00;
- hour=0;
- minute=0;
- second=0;
- tcnt=0;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
單片機(jī)課程設(shè)計(jì)報(bào)告.docx
(1.37 MB, 下載次數(shù): 253)
2018-6-28 16:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|