版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第 1章 引 言隨著微電子技術(shù)的高速發(fā)展,單片機(jī)在國民經(jīng)濟(jì)的個人領(lǐng)域得到了廣泛的運用。單片機(jī)以體積小、功能全、性價比高等諸多優(yōu)點,在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測控領(lǐng)域的應(yīng)用中獨占鰲頭,單片機(jī)開發(fā)技術(shù)已成為電子信息、電氣、通信、自動化、機(jī)電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。而電子萬年歷作為電子類小設(shè)計不僅是市場上的寵兒,也是單片機(jī)實驗中一個很常用的題目。因為它有很好的開放性和可發(fā)揮性,因此對設(shè)計者的要求也比較高,不僅考察了對單片機(jī)的掌握能力,更加強(qiáng)調(diào)了對單片機(jī)擴(kuò)展的應(yīng)用。而且在操作的設(shè)計上要力求簡潔,功能上盡量齊全,顯示界面也要出色。數(shù)字顯示的日歷鐘已經(jīng)越來越流行,
2、特別是適合在家庭居室、辦公室、大廳、會議室、車站和廣場等使用。集溫度、 時間、 日歷、 星期于一體,采用液晶顯示,設(shè)計電路更加簡單直觀,省去了用數(shù)碼管顯示的電路復(fù)雜性。通過按鍵可以調(diào)整更改時間和日歷,并且還可以設(shè)置鬧鐘,這樣就組成了一個多功能的萬年歷。第 2 章 方案論證2.1 方案設(shè)計與論證2.1.1 控制部分的方案選擇用可編程邏輯器件設(shè)計,使用 FPGA勾造數(shù)字電子系統(tǒng),設(shè)計者可以不用考慮芯片部的具體結(jié)構(gòu),也不用顧慮與外部的電路連接。設(shè)計者只需依據(jù)電路所要完成的具體邏輯功能,然后設(shè)法用軟件描述出來即可。至于數(shù)據(jù)在芯片部的處理過程, 設(shè)計者不用考慮,但設(shè)計者可以通過仿真軟件觀察和驗證數(shù)據(jù)的處
3、理結(jié)果。這種設(shè)計方法,極降低了設(shè)計難度,提高了工作效率,但設(shè)計成本較高。用單片機(jī)來作為主控制部分,實現(xiàn)時間、溫度同步顯示的萬年歷,為了使用的方便性,還可以通過設(shè)置按鍵來更改時間和鬧鐘。這正是利用了51 單片機(jī)的多管腳功能性,4 個 8 位并行 I/O 口,定時計數(shù)端口,中斷端口,這使得操作起來更加方便,通過軟件可以隨時的調(diào)整和更改,使得更加精確。通過認(rèn)真的分析與討論,最終決定采用單片機(jī)來作為主控制部分,這樣制作也方便,價格也相對較低。2.1.2 顯示部分的方案選擇可以通過數(shù)碼管來顯示時鐘的日歷、時間、 溫度, 使用數(shù)碼管的優(yōu)點是直觀清楚,適合用在光線較暗的地方,但是數(shù)碼管的功耗大,顯示單一,并
4、且在電路 制作上布線復(fù)雜,難度較高。顯示電路還可以采用液晶1602 來實現(xiàn)。液晶顯示器具有微功耗、體積小、顯示容豐富、超薄輕巧等諸多優(yōu)點,在本題的制作中,用液晶來實現(xiàn)數(shù)字信息的顯示是比較合適的一種選擇。2.2 系統(tǒng)整體方案的設(shè)計與論證通過初步的選擇,我們最終決定采用單片機(jī)AT89C52作為時鐘的主控制部分,LCD1602乍為顯示部分,時鐘信號采用芯片 DS1302 DS18b20M度傳感器用 作溫度采集,通過設(shè)置4 個按鍵來實現(xiàn)時間的調(diào)整,鬧鐘的開關(guān)。這五個主要部分基本上就實現(xiàn)了集日歷、時間、星期、溫度、鬧鐘于一體的多功能萬年歷。精 確度高,顯示直觀,輕巧的優(yōu)越性具有很高的使用價值。第3章硬件
5、電路設(shè)計3.1 系統(tǒng)硬件設(shè)計框圖此系統(tǒng)的硬件部分主要由主控制器單片機(jī),顯示電路,時鐘電路,溫感電路構(gòu)成系統(tǒng)電路框圖如圖3-1所示。圖3-13.2 主控電路時鐘主控電路由單片機(jī) AT89C52E片控制,8位P0 口作為數(shù)據(jù)的輸出通道, 外接時鐘電路,復(fù)位電路,蜂鳴器,溫度傳感器。P3.4管腳接收時鐘芯片DS1302 發(fā)出的時鐘信號,P3.3管腳與時鐘芯片的數(shù)據(jù)傳輸口相連,收發(fā)讀寫信號,P3.2管腳用來驅(qū)動蜂鳴器,P2.4-P2.7管腳分別接按鍵,用來調(diào)整修改時間。P1.4管 腳與溫度傳感器DS18B201連,接收溫感信號。3.3 AT89C52主要性能介紹AT89C5是一種低功耗、高性能CMOS
6、8微控制器,具有8K在線系統(tǒng)可編程 Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī) 編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使AT89C5為 眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89C52I有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash, 256字節(jié)RAM,32位I/O 口線,看門狗定時器,2個數(shù)據(jù)指針, 三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工用行口,片晶振及時 鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可
7、選擇節(jié)電模式。 空閑模式下,CPU亭止工作,允許RAM定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉 電保護(hù)方式下,RAM&被彳存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中 斷或硬件復(fù)位為止。P0口是一個8位漏極開路的雙向I/O 口。作為輸出口 ,每位能驅(qū)動8個TT出輯 電平。對P謠口寫“1”時,引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲 器時,P0口也被彳為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0ft有部上拉電阻。 在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程 序校驗時,需要外部上拉電阻。P1 口是一個具有部上拉電阻的8位雙向I/O 口,pl輸出緩沖器
8、能驅(qū)動4個 TTL 邏輯電平。對P1 端口寫“ 1”時,部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL )。此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2) 和時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在flash編程和校 驗時,P1 口接收低8位地址字節(jié)。P2 口是一個具有部上拉電阻的8 位雙向 I/O 口, P2 輸出緩沖器能驅(qū)動4個TTL 邏輯電平。對P2 端口寫“ 1”時,部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于部電阻的原因,
9、將輸出電流( IIL )。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX DPTR時,P2 口送出高八位地址。在這種應(yīng)用中, P2 口使用很強(qiáng)的部上 拉發(fā)送1。在使用8位地址(如MOVX R)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2t® 存器的容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。P3 口是一個具有部上拉電阻的8 位雙向 I/O 口, p2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P3 端口寫“ 1”時,部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL )。P3口
10、亦彳為AT89C5特殊功能(第二功能)使用,如圖3-2所示。在flash編程和校驗時,P3口也接收一些控制信號。3-23.4 DS1302 芯片的介紹DS1302是DALLAS公司推出的涓流充電時鐘芯片含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM通過簡單的串行接口與單片機(jī)進(jìn)行通信實時時鐘 /日歷電路提 供秒分時日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動調(diào)整時鐘操作可通過AM/PM指示決定采用24或12小時格式DS1302與單片機(jī)之間能簡單地采用同 步串行的方式進(jìn)行通信僅需用到三個口線 1 RES復(fù)位2 I/O數(shù)據(jù)線3 SCL牌行時鐘時鐘/RAM 的讀/寫數(shù)據(jù)以一個字節(jié)或多達(dá)31 個字節(jié)的字符組
11、方式通信DS1302工作時功耗很低保持?jǐn)?shù)據(jù)和時鐘信息時功率小于1mW。DS1302是由DS1202改進(jìn)而來增加了以下的特性雙電源管腳用于主電源和備份電源供應(yīng)Vcc1 為可編程涓流充電電源附加七個字節(jié)存儲器它廣泛應(yīng)用于傳真便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域下面將主要的性能指標(biāo)作一綜合:1. 實時時鐘具有能計算2100 年之前的秒分時日日期星期月年的能力還有閏年調(diào)整的能力2. 31 X 8位暫存數(shù)據(jù)存儲RAM3. 串行 I/O 口方式使得管腳數(shù)量最少4. 寬圍工作電壓2.0-5.5V5. 工作電流2.0V 時 , 小于 300nA6. 讀/寫時鐘或RAM數(shù)據(jù)時有兩種傳送方式單字節(jié)傳送和多字
12、節(jié)傳送7. 8 腳 DIP 封裝或可選的8 腳 SOIC 封裝(根據(jù)表面裝配)8. 簡單3 線接口9. 與 TTL 兼容Vcc=5V10. 可選工業(yè)級溫度圍-40 +8511. .1 管腳說明管腳描述:管腳配置:圖 3-3圖 3-412. .2 DS1302 時鐘信號設(shè)置模式如圖3-5所示圖3-53.5 LCD1602液晶介紹模塊組件部主要由LCD顯示屏、控制器、列驅(qū)動器和偏壓產(chǎn)生電路構(gòu)成。LCD顯示屏為行和列交叉形成的點陣,以 5X8點陣的字符結(jié)構(gòu)模式和設(shè)置 的顯示字符數(shù)目,選擇適宜的行數(shù),分單屏、雙屏或者多屏顯示規(guī)定的字符。對 于雙屏或者多屏顯示結(jié)構(gòu)的LCD每一顯示屏結(jié)構(gòu)部分,均由各自獨立
13、的使能信 號E控制。列驅(qū)動器與控制器配套使用,它接收來自控制器的振蕩、幀同步輸出、用行 輸出的數(shù)據(jù)和移位及鎖存脈沖,產(chǎn)生列交流掃描驅(qū)動信號??刂破鹘邮軄碜訫PU的指令和數(shù)據(jù),控制著整個模塊的工作,由CGROMCGRAMDDRA疇字符存儲域、以及與 MPUffi列驅(qū)動器的I/O接口、指令寄存和 譯碼機(jī)構(gòu)、地址計數(shù)器等部分組成。在控制器的控制下,模塊通過數(shù)據(jù)總線 DB0DB和E、R/W RS三個輸入控制端與MPUR口。這三根控制線按照規(guī)定的時序相互協(xié)調(diào)作用,使控制器通過數(shù)據(jù)總線 DB接收MP3送來的指令和數(shù)據(jù), 從CGROM找到欲顯示字符的字符碼,送入 DDRAM在LCD顯示屏上與DDRA解 儲單
14、元對應(yīng)的規(guī)定位置顯示出該字符。 控制器還可以根據(jù)MPU勺指令,實現(xiàn)字符 的顯示、閃爍和移位等顯示效果。3.5.1 端口的定義:管腳號符號功能1Vss電源地(GND2Vdd電源電壓(+5V)3V0LCD驅(qū)動電壓(可調(diào))4RS寄存器選擇輸入端,輸入 MP3擇模塊部寄存器類型 心;RS=0當(dāng)MPU4行寫模塊操作,指向指令寄存器;當(dāng)MPU!行讀模塊操作,指向地址計數(shù)器;RS=1無論MPU實操作還是寫操作,均指向數(shù)據(jù)寄存 器5R/W讀寫控制輸入端,輸入 MP四擇讀/寫模塊操作信號;R/W=0讀操作;R/W=1寫操作6E使能信號輸入端,輸入MPUi?/寫模塊操作使能信號; 讀操作時,高電平有效;寫操作時,
15、下降沿有效7DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道8DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道9DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道10DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道11DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道12DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道13DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道14DB數(shù)據(jù)輸入/輸出口,MPUt模塊之間的數(shù)據(jù)傳送通道15A背光的正端+5V16K背光的負(fù)端0V3.5.2 操作時序圖寫操作時序如圖3-6圖3-6讀操作時序如圖3-7圖3-73.5.3 指令說明一般情況
16、下,部RAM勺數(shù)據(jù)傳送的功能使用最為頻繁,因此,RAW的地址指針 所具備的自動加一或減一功能,在一定程度上減輕了 MP編程負(fù)擔(dān)。止匕外,由于 數(shù)據(jù)移位指令與寫顯示數(shù)據(jù)可同時進(jìn)行, 這樣用戶就以最少系統(tǒng)開發(fā)時間, 達(dá)到 最高的編程效率。這里值得一提的是,在每次訪問模塊之前,MP四首先檢測忙標(biāo)志BF,確認(rèn)BF=0 后,訪問過程才能進(jìn)行。Clear display 清顯示指令碼:RSRWDB6 DBS DB4 DB3 DB2 DB1 DB00Q00000 J.001Return home歸位指令碼:RSRWDB6 DBS DB4 DBS DB2 DEI DR。001 000000*Entry mod
17、e set設(shè)置輸入模式指令碼:RS RW DBDB6 DB5 DB4 DBS DB2 DB1 DBO00000001LDsI/D=1 ,完成一個字符碼傳送后,AC自動加1;I/D=0,完成一個字符碼傳送后,AC自動減1;S=1,將全部顯示向右(I/D=0)或者向左(I/D=1)移位;S=0,顯示不發(fā)生移位;Display on/off control顯示開/關(guān)控制指令碼:RSRWDB7DB6DBSDB4DB3DB2DB1DBO0000001Dc_BD:顯示開/關(guān)控制標(biāo)志:D=1,開顯示;D=0,關(guān)顯示;C:光標(biāo)顯示控制標(biāo)志:C=1,光標(biāo)顯示;C=Q光標(biāo)不顯示;B:閃爍顯示;f$制標(biāo)志:B=1,
18、光標(biāo)所指位置上,交替顯示全黑點陣和顯示字符, 產(chǎn)生閃爍效果。Cursor or display shift光標(biāo)或顯示移位指令碼:RSR WDB7DB6DB5DB4DB3DB2DB1DBO000001S/CR/L*光標(biāo)或顯示移位指令可使光標(biāo)或顯示在沒有讀寫顯示數(shù)據(jù)的情況下, 向左或向右 移動;運用此指令可以實現(xiàn)顯示的查找或替換; 在雙行顯示方式下,第一行和第 二行會同時移位;當(dāng)移位越過第一行第四十位時,光標(biāo)從第一行跳到第二行, 但 顯示數(shù)據(jù)只在本行水平移位,第二行的顯示決不會移進(jìn)第一行;倘若僅執(zhí)行移位 操作,地址計數(shù)器AC的容不會發(fā)生改變。S/CR/L說明00光標(biāo)向左移動,AC自動減一01光標(biāo)向
19、右移動,AC自動加一10光標(biāo)和顯本,起向左移動11光標(biāo)和顯本,起向右移動第4章系統(tǒng)程序的設(shè)計多功能萬年歷系統(tǒng)的軟件設(shè)計主要由主程序、溫度子程序、時鐘程序、定時中斷子程序及液晶顯示子程序組成。由于C語言編寫的程序邏輯性強(qiáng),也方便移植。而匯編雖然效率高,但相對比較繁瑣,特別是遇到綜合性強(qiáng)的邏輯運算時, 執(zhí)行起來比較困難。下面主要對時鐘程序和鬧鐘子程序加以詳細(xì)介紹。4.1 高準(zhǔn)確度時鐘程序算法電子計時器通常以石英晶振為時鐘源。時鐘源的頻率通常為幾十khz 乃至幾十mhz,而所用時鐘的最小計單位一般在 0.01s1s。高頻的時鐘源脈沖通過分 頻器后產(chǎn)生基本定時脈沖。電子計時器的計時部分就是對基本定時脈
20、沖進(jìn)行累 加,產(chǎn)生秒、分、時等時間信息乃至日、月、年等日期信息。而常常一個電子時 鐘會出現(xiàn)走時誤差,一個常規(guī)電子計時器的計時準(zhǔn)確度,取決于晶振標(biāo)稱頻率 ( fs )與實際頻率(fo )的頻率偏差和晶振頻率的時漂、溫漂等離散參數(shù)。普通晶振的實際頻率與標(biāo)稱頻率有較大的偏差,可達(dá)萬分之五,折算到一天計時誤差就是 43.2s 。而減少計時誤差的最好方法就是用軟件控制,我們本實驗中用到的AT89C52的晶振頻率是12MHz實際長期平均振蕩頻率fo=12.0006mhz,量化精 度取1字節(jié),取tns=10ms,則分頻系數(shù)為:n0=fo/(12 Xtns)=12.0006/(12 X 10 6 X10 -2
21、)=10000.5 令 n=int(n0)=10000ni 為第 i 決定時值,可能是10000或10001,這取決于nti 的進(jìn)位;nti 為第 i次尾數(shù)暫存值。每次定時中斷服務(wù)程序均執(zhí)行上式,取得第i 次定時計數(shù)值,然后實時時鐘增加10ms完成時鐘功能。這樣進(jìn)彳T軟件計時校正后,每 10天的計 時誤差1s。所以這種基于軟件提高時鐘準(zhǔn)確度的算法,具有極高的實用價值。4.2 定時鬧鐘程序時鐘的鬧鐘主要是通過外部設(shè)置的按鍵來定時,當(dāng)時鐘的時間與設(shè)置的時間相同時, 將會觸發(fā)中斷源,進(jìn)入鬧鐘子程序,這時蜂鳴器將會被接通,發(fā)出聲音。當(dāng)中斷時間達(dá)到規(guī)定的時間后,鬧鐘程序講會自動退出,蜂鳴器停止響。鬧鐘工
22、作的程序框圖如圖3-8 所示設(shè)置鬧鐘時間圖3-8第 5 章 調(diào)試與結(jié)果分析經(jīng)過理論分析和仿真調(diào)試后,最后按照硬件電路制作出了成品多功能電子萬年歷,現(xiàn)在進(jìn)入了最后的調(diào)試階段。開始為整個系統(tǒng)接上電源后,液晶顯示器不亮,通過調(diào)節(jié)與液晶顯示器電源端相連的電位器,顯示屏點亮了。5.1 調(diào)試我們發(fā)現(xiàn)雖然顯示屏亮了,但是時鐘不走,復(fù)位也不起作用,4 個時間設(shè)置按鍵也沒有反應(yīng),通過認(rèn)真的分析后,軟件應(yīng)該是沒有問題的,因為在仿真的時候是能正常工作的,這只可能是在硬件上出現(xiàn)了問題,通過檢查電路的焊接,連線都沒有錯誤的情況下,最后確定應(yīng)該是某個模塊沒有正常工作,通過查資料,發(fā)現(xiàn)時鐘芯片DS1302的數(shù)據(jù)端口和時鐘信
23、號端口要接上拉電阻,這樣才能正常的工作,通過調(diào)試,最后時鐘開始走起來,達(dá)到了預(yù)期的效果。5.2 結(jié)果分析時鐘雖然是正常的走了,整個系統(tǒng)也運行順暢,但是時鐘精度不夠高。5.2.1 誤差分析一個常規(guī)的電子時鐘走時不準(zhǔn)的原因主要是時鐘標(biāo)稱頻率與實際頻率有誤差,這樣導(dǎo)致時鐘計數(shù)不準(zhǔn)確,另外是環(huán)境的溫度影響,也會導(dǎo)致走時有誤差,因為每個元器件都有一個正常工作溫度圍,但超出這個圍后,就會使元件不能正常工作,這樣也就導(dǎo)致了整個系統(tǒng)的誤差產(chǎn)生。第 6 章 總結(jié)多功能萬年歷是能同時顯示日歷、星期、時間、溫度的電子時鐘。這次的畢業(yè)設(shè)計從選題上也花了很多時間,板也做了一塊又一塊,在做的過程中還是出現(xiàn)了很多常見的錯誤
24、,比如在畫原理圖的時候,連線連錯,網(wǎng)絡(luò)標(biāo)號不對應(yīng),電源和地接反,這些都是很小的錯誤,但是小錯誤也能成大錯,導(dǎo)致最后做出來的板不能實現(xiàn)預(yù)期的功能。另外就是對一些芯片的運用不熟悉,導(dǎo)致顯示亂碼也是很正常的,比如時鐘芯片 DS1302的數(shù)據(jù)端口和信號端口必須接上拉電阻后再接電源端,否則芯片不能正常工作,軟件無常運行,整個系統(tǒng)也將癱瘓無常顯示。還有液晶顯示器的電源端也要接個電位器,一是方便調(diào)節(jié)明暗度,二是防止電流過大,燒壞顯示屏,這些都是很基本的知識,但必須要熟記和掌握,以致才能運用的更加熟練。另外對于這次的畢業(yè)設(shè)計,感覺自己的能力又得到了一定的提高,特別是對設(shè)計的整體流程有了更清晰的認(rèn)識,包括選題、
25、設(shè)計,制版,調(diào)試、寫報告。但是還有很多要彌補(bǔ)的地方,比如寫軟件程序,對于一個學(xué)單片機(jī)的人來說,不僅要懂硬件,更要懂軟件,只有都懂了,才能設(shè)計出更好的電路,要學(xué)好這些,只有不斷的去嘗試,嘗試中不斷的發(fā)現(xiàn)錯誤,不斷的改正錯誤,只有這樣能力才能得到一步步的提高。參考文獻(xiàn)1 權(quán)昌.興富單片機(jī)原理及應(yīng)用華南理工大學(xué),2007年8月2 正振 . 電子電路設(shè)計與制作廣西交通職業(yè)技術(shù)學(xué)院信息工程系2007 年3 科技.8051系列單片機(jī)C程序設(shè)計.:人民郵電,2006年4 譚浩強(qiáng) .C 程序設(shè)計. :清華大學(xué),1991 年附錄一電路原理圖附錄D1C322P(dU2丫232.768KJ1612345678910
26、 1112 1314 15161 GND2 VCC34 RS5 RW6 E7 D0一8 口廠9 D2一10 D3一11 D4一72 - D5-13 D614 D71516|S5| WR1r234DO35RS6RW7E8910 11 _至DO2 13DO1 14RST 15 1622PU1P1.0P1.1P1.2P1.3P1.4P1.5/MOSP1.6/IMSP1.7/SCRSTDS13021234Vcc- p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.O123487658DO1 VCC6 DO25 RSTVCC40939 D0 838 D137 D2636 D35
27、35D4434 D5 333D623r D7 1J9987654321SIP9DS182BSIP1622PC1二 Y112MHz1718192022PP3.0XDP3.1/TXDP3.2/INTOP3.3/INTIP3.4/T0P3.5/T1P3.6/WRP3.7DRXTAL2XTAL1GNDAT89SC1EA/Vpp-310 VCC30ALE/PROG 30PSEN-29P2.7T5251、24口P2.P2.P2.S33-<S4281272221P2.1P2.0S10S2附錄二電路PCB圖引口 1、附錄三元件清單元件個數(shù)電阻1K3排阻10K1晶振12M1晶振32.768K1電角單電容2
28、2u1瓷片電容22p4單片機(jī)AT89C521溫感器DS18B201三極管NPN1時鐘芯片DS13021電位器10K1蜂鳴器1源程序#include<reg51.H>#include<INTRINS.H> #define uchar unsigned char#define uint unsigned int#define TIME (0X10000-50000)#define FLAG 0XEF / 鬧鐘標(biāo)志sbit rst=P3A5;sbit clk=P3A4;sbit dat=P3A3;sbit rs=P1A5;sbit rw=P1A6;sbit e=P1A7;sb
29、it DQ=P1A4; / 溫度輸入口sbit P3_2=P3A2;sbit ACC_7=ACCA7;uchar i=20,j,time116;/ 全局變量及常量定義uchar alarm2,time215,time3;uchar code Day=31,28,31,30,31,30,31,31,30,31,30,31;/12日期 ( 非閏年 )/ 音律表uint code table1=64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178,65217;/ 發(fā)聲部分的延時時間uc
30、har code table2=0x82,1,0x81,0xf4,0xd4,0xb4,0xa4, 0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0;/LCD 自建字uchar code tab=0x18,0x1b,5,4,4,5,3,0, 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,/0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,/ 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00;/* 溫度小數(shù)部分用查表法*/個月的最大codeUchar ditab16=0x0
31、0,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x0 7,0x08,0x08,0x09,0x09;/ 鬧鐘中用的全局變量uchar temp_data2=0x00,0x00;/讀出溫度暫放bit flag;/*11/18b20 存在標(biāo)志位微秒延時函數(shù)*/uchar th1,tl1;delay(uint t)for(;t>0;t-);/*18B20 復(fù)位函數(shù)*/ow_reset(void)uchar i;DQ=1;_nop_();_nop_();DQ=0; / delay(50); / 550usDQ=1; / delay(6);
32、/ 66us for(i=0;i<0x30;i+) if(!DQ)goto d1;d1: flag=0; DQ=1; return; delay(45); flag=1; DQ=1;/ 清標(biāo)志位 , 表示 ds1820 不存在延時 500us置標(biāo)志位,表示ds1820存在/*18B20寫命令函數(shù)*/ 向 1-WIRE 總線上寫一個字節(jié)void write_byte(uchar val)uchar i;for (i=8; i>0; i-) /DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usDQ
33、=val&0x01;delay(6);val=val/2;DQ=1;delay(1);/ /66us /最低位移出右移一位/*18B20 讀 1 個字節(jié)函數(shù)*/ 從總線上讀取一個字節(jié)uchar read_byte(void)uchar i;uchar value=0;for (i=8;i>0;i-)DQ=1;_nop_();_nop_();/value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); /4us DQ=1;_nop_();_nop_();_nop_();_nop_(); /4us if(DQ)/66usvalue|=0
34、x80;delay(6);DQ=1;return(value);/* 讀出溫度函數(shù)*/read_temp()ow_reset();/ 總線復(fù)位if(!flag)/判斷ds1820是否存在?若ds18b20不存在則返回return;/write_byte(0xCC);/write_byte(0x44);/delay(70);write_byte(0xCC);write_byte(0xBE);temp_data0=read_byte();temp_data1=read_byte(); ow_reset();write_byte(0xCC);write_byte(0x44);/ Skip ROM/發(fā)
35、轉(zhuǎn)換命令/發(fā)Skip ROM命令發(fā)讀命令溫度低8 位溫度高8 位/ Skip ROM/ 發(fā)轉(zhuǎn)換命令/* 溫度數(shù)據(jù)處理函數(shù)*/work_temp()uchar n=0,m;if(temp_data1>127)/ 負(fù)溫度求補(bǔ)碼temp_data1=(256-temp_data1);temp_data0=(256-temp_data0); n=1;time213=ditabtemp_data0&0x0f+'0'time212='.'m=(temp_data0&0xf0)>>4)|(temp_data1&0x0f)<<
36、;4);/ if(n)m-=16;time29=m/100+'0'time211=m%100;time210=time211/10+'0'time211=time211%10+'0'if(time29='0')/ 最高位為0 時都不顯示time29=0x20;if(n)/ 負(fù)溫度時最高位顯示"-"time29='-'if(time210='0')if(n)time210='-'time29=0x20;elsetime210=0x20;if(time211='
37、;0'&&time213='0') time211=time212=0x20;delay1ms(uchar time) / 延時 1msuchar i,j;for(i=0;i<time;i+)for(j=0;j<250;j+);/LCD 驅(qū)動部分enable()rs=0;rw=0;e=0;delay1ms(3);e=1;write2(uchar i)P0=i;rs=1;rw=0;e=0;delay1ms(2);e=1;write1(uchar data *address,m)uchar i,j;for(i=0;i<m;i+,addres
38、s+)j=*address;write2(j);/LCD 顯示 lcdshow()P0=0XC;/ 顯示器開、光標(biāo)關(guān)enable();P0=0x80;/ 寫入顯示起始地址enable(); write1(time1,16);P0=0xc1;/ 寫入顯示起始地址enable(); write1(time2,15);/ 自建字 zijianzi()uchar i;P0=0x40;enable(); for(i=0;i<32;i+)write2(tabi);delay1ms(2);/DS1302 讀寫子程序write(uchar address)uchar i;clk=0;_nop_();rs
39、t=1;_nop_();for(i=0;i<8;i+)dat=address&1;_nop_();clk=1;address>>=1;clk=0;uchar read()uchar i,j=0;for(i=0;i<8;i+)j>>=1;_nop_();clk=0;_nop_();if(dat)j|=0x80;_nop_();clk=1;return(j);/ 部分顯示數(shù)據(jù)初始化timestart()time11=time113=time28=time29=time210=0x20,time214=0;time16=1,time19=2,time112
40、=3,time12='2',time13='0'time114='W',time22=time25=':'write(0xc1);alarm0=read();rst=0;write(0xc3);alarm1=read();rst=0;write(0xc5);time10=read();rst=0;/ 讀取時間 readtime()uchar i,m,n;write(0x8d);/ 讀取年份m=read();rst=0;time14=m/16+0x30;time15=m%16+0x30;write(0x8b);/ 讀取星期m=rea
41、d();rst=0;time115=m+0x30;for(i=7,n=0x89;i<11;i+=3,n-=2)/ 讀取月份和日期write(n);m=read();rst=0;time1i=m/16+0x30;time1i+1=m%16+0x30;for(m=0,i=0,n=0x85;i<7;i+=3,n-=2,m+)/ 讀取時 , 分 , 秒write(n);timem=read();rst=0;time2i=timem/16+0x30;time2i+1=timem%16+0x30;time0() interrupt 1 using 1i-;if(i=0)if(j!=0) j-;
42、i=20;TH0=TIME/256,TL0=TIME%256;/ 鬧鐘部分intime1() interrupt 3TH1=th1,TL1=tl1;P3_2=!P3_2;showalarm()uchar i,j,a,b,n;ET1=1;for(j=0;j<6;j+)i=0;while(1)a=table2i;if(a=0)break;b=a&0xf;a>>=4;if(a=0)TR1=0;goto D1;a=(-a)<<1)/2;TH1=th1=table1a/256,TL1=tl1=table1a%256;TR1=1;D1:dob-;for(n=0;n&l
43、t;3;n+)readtime();lcdshow();P2=0xf7;if(P2=0xe7) delay1ms(100);if(P2=0xe7) TR1=0;ET1=0; return;) ) )while(b!=O);i+;) TR1=0;) ET1=0;)/根據(jù)日期的變動自動調(diào)整星期uchar setweek()(uchar i=5j,n;j=(time14&0xf)*10+(time15&0xf);n=j/4;i=i+5*n;n=j%4;if(n=1)i+=2;else if(n=2)i+=3;else if(n=3)i+=4;j=(time17&0xf)*10
44、+(time18&0xf);if(j=2)i+=3;else if(j=3)i+=3;else if(j=4)i+=6;else if(j=5)i+=1;else if(j=6)i+=4;else if(j=7)i+=6;else if(j=8)i+=2;else if(j=9)i+=5;else if(j=11)i+=3;else if(j=12)i+=5;if(n=0)if(j>2)i+;j=(time110&0xf)*10+(time111&0xf);i+=j;i%=7;if(i=0)i=7; return(i);/ 設(shè)置時間 settime() uchar
45、 i=0x85,year,month,day,n;time26=time27=0x30,time114=time115=0x20; lcdshow();while(1)P0=0xe;/ 顯示器開、光標(biāo)開enable(); P0=i;/ 定光標(biāo)enable(); P2=0xf7; if(P2!=0XF7) delay1ms(100);/ 延時 0.1s 去抖動if(P2!=0XF7) j=7; if(P2=0X77) i+=3; if(i=0x8e) i=0xc2; else if(i>0xc5) i=0x85; else if(P2=0xb7) year=(time14&0xf)
46、*10+(time15&0xf); month=(time17&0xf)*10+(time18&0xf); day=(time110&0xf)*10+(time111&0xf); if(i=0x85)year+;if(year>99)year=0;if(year%4)!=0)if(month=2&&day=29) day=28;else if(i=0x88)month+;if(month>12)month=1;if(day>Daymonth-1)day=Daymonth-1;if(month=2&&(ye
47、ar%4)=0) day=29;else if(i=0x8b)day+;if(day>Daymonth-1)if(month=2&&(year%4)=0)if(day>29)day=1;if(month!=2)day=1;else if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n+;if(n>23)n=0;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time24&0xf);n+;if(n>59)n=0;time23=n
48、/10+0x30;time24=n%10+0x30;time14=year/10+0x30;time15=year%10+0x30;time17=month/10+0x30;time18=month%10+0x30;time110=day/10+0x30;time111=day%10+0x30;lcdshow();else if(P2=0xd7)write(0x8c);write(time14&0xf)*16+(time15&0xf);rst=0;write(0x8a);write(setweek();rst=0;for(i=7,n=0x88;i<11;i+=3,n-=2)write(n);write(time1i&0xf)*16+(time1i+1&0xf);rst=0;for(i=0;i<7;i+=3,n-=2)write(n);writ
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 描寫秋景的初一作文600字5篇
- 初中物理教學(xué)心得體會
- 大學(xué)畢業(yè)求職信合集五篇
- 對創(chuàng)業(yè)的認(rèn)識和理解范文五篇
- 七年級下冊歷史知識要點歸納總結(jié)
- 光電技術(shù)轉(zhuǎn)讓協(xié)議書(2篇)
- 租賃經(jīng)營合同范本
- 旅游汽車租賃合同樣書
- 2025電腦購銷合同合同范本
- 2025煤炭買賣合同
- 在建工程重大安全隱患局部停工整改令(格式)
- 《落花生》-完整版課件
- 2021年貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試試題及答案解析
- 安全文化培訓(xùn) (注冊安工再培訓(xùn))課件
- 色粉-MSDS物質(zhì)安全技術(shù)資料
- 骨科學(xué)研究生復(fù)試真題匯總版
- 石油化工鋼結(jié)構(gòu)工程施工及驗收規(guī)范
- 遼海版六年級音樂上冊第8單元《3. 演唱 姐妹們上場院》教學(xué)設(shè)計
- 形勢任務(wù)教育宣講材料第一講——講上情
- 物業(yè)安全員考核實施細(xì)則
- 中國地質(zhì)大學(xué)(武漢)教育發(fā)展基金會籌備成立情況報告
評論
0/150
提交評論