1.1 設計要求:
(1)基本要求
① 具有年、月、日、星期、時、分、秒等功能;
② 時間與陰、陽歷能夠自動關聯;
③ 具備年、月、日、星期、時、分、秒校準功能;
( 2 ) 創新要求
① 具有mp3播放附屬功能;
② 可無線控制校時、切換歌曲的功能;
1.2 系統基本方案選擇和論證
1.2.1單片機芯片的選擇方案和論證:
方案一:
采用89C51芯片作為硬件核心,采用Flash ROM,內部具有4KB ROM 存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,但是運用于電路設計中時由于不具備ISP在線編程技術, 當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,對芯片的多次拔插會對芯片造成一定的損壞。
方案二:
采用AT89S52,片內ROM全都采用Flash ROM;能以3V的超底壓工作;同時也與MCS-51系列單片機完全該芯片內部存儲器為8KB ROM 存儲空間,同樣具有89C51的功能,且具有在線編程可擦除技術,當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,不需要對芯片多次拔插,所以不會對芯片造成損壞。
所以選擇采用AT89S52作為主控制系統.
1.2.2 顯示模塊選擇方案和論證:
方案一:
采用LCD液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見,但是價格昂貴,需要的接口線多,所以在此設計中不采用LCD液晶顯示屏.
方案二:
采用點陣式數碼管顯示,點陣式數碼管是由八行八列的發光二極管組成,對于顯示文字比較適合,如采用在顯示數字顯得太浪費,且價格也相對較高,所以也不用此種作為顯示.
方案三:
采用LED數碼管動態掃描,LED數碼管價格適中,對于顯示數字最合適,而且采用動態掃描法與單片機連接時,占用的單片機口線少。而且顯示效果鮮明,所以采用了LED數碼管作為顯示。
1.2.3時鐘芯片的選擇方案和論證:
方案一:
直接采用單片機定時計數器提供秒信號,使用程序實現年、月、日、星期、時、分、秒計數。采用此種方案雖然減少芯片的使用,節約成本,但是,實現的時間誤差較大。所以不采用此方案。
方案二:
采用DS1302時鐘芯片實現時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償的年進行計數,而且精度高,位的RAM做為數據暫存區,工作電壓2.5V~5.5V范圍內,2.5V時耗電小于300nA.
1.3 電路設計最終方案決定
綜上各方案所述,對此次作品的方案選定: 采用AT89S52作為主控制系統; DS1302提供時鐘;LED數碼管動態掃描作為顯示,TX2A/2B作為遙控電路。
二.系統的硬件設計與實現
2.1 電路設計框圖
擴展部分:
2.2 系統硬件概述
本電路是由AT89S52單片機為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發方式一次傳送多個字節的時鐘信號或RAM數據。DS1302內部有一個31*8的用于臨時性存放數據的RAM寄存器。可產生年、月、日、周日、時、分、秒,具有使用壽命長,精度高和低功耗等特點,同時具有掉電自動保存功能;顯示部份由19個數碼管,74ls164譯碼器構成。使用動態掃描顯示方式對數字的顯示。
2.3 主要單元電路的設計
2.3.1單片機主控制模塊的設計
AT89S52單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3, MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨立地作輸出或輸入。
單片機的最小系統如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調電容的一端,在片內它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調電容的另一端,在片內它是振蕩器倒相放大器的輸出.第9引腳為復位輸入端,接上電容,電阻及開關后夠上電復位電路,20引腳為接地端,40引腳為電源端. 如圖-1 所示
主控制系統
2.3.2時鐘電路模塊的設計
圖-2示出DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關閉的情況下,也能保持時鐘的連續運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節或多字節數據的傳送手段。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RSTS置為低電平,則會終止此次數據傳送,I/O引腳變為高阻態。上電動行時,在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK 為低電平時,才能將RST置為高電平,I/O為串行數據輸入端(雙向)。SCLK始終是輸入端。
圖-2 DS1302的引腳圖
2.3.3 電路原理及說明
(1) 時鐘芯片DS1302的工作原理:
DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖4所示。圖5為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進行讀寫數據。對于位6,若對程序進行讀/寫時RAM=1,對時間進行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作。控制字節總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時間寄存器內容:“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態;當該位為0時,時鐘開始運行。“WP”
是寫保護位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作。
(2) DS1302的控制字節
DS1302的控制字如表-1所示。控制字節的高有效位(位7)必須是邏輯1,如果它為0,則不能把數據寫入DS1302中,位6如果0,則表示存取日歷時鐘數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節總是從最低位開始輸出
RAM RD
1 A4 A3 A2 A1 A0
/ CK /WR
表-1 DS1302的控制字格式
(3) 數據輸入輸出(I/O)
在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7。如下圖-4所示
圖-4 DS1302讀/寫時序圖
(4) DS1302的寄存器
DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為BCD碼形式,其日歷、時間寄存器及其控制字見表-2。
表-2 DS1302的日歷、時間寄存器
此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器及與RAM相關的寄存器等。時鐘突發寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內容。 DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態為一個8位的字節,其命令控制字為C0H~FDH,其中奇數為讀操作,偶數為寫操作;另一類為突發方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節,命令控制字為FEH(寫)、FFH(讀)。
2.3.4顯示模塊的設計
l 如圖-5所示,顯示模塊的設計
如圖-5所示,采用動態掃描顯示,由19個數碼管,8位移位寄存器(串行輸入,并行輸出)74LS164接1K限流電阻,再用8550三極管接到共陽數碼管的COM端作為選通位碼,每位選擇相應的列。74LS164接1k限流電阻,再接每行的LED數碼管的斷碼。
圖-5 LED動態掃描顯示
三、系統的軟件設計
3.1圖-A主程序流程
3.1.1圖-B時間調整程序流程圖
3.1.2圖-C 陰歷程序流程圖
3.2 子程序的設計
3.2.1 讀、寫DS1302子程序
;寫1302程序WRITE:
CLR SCLK
NOP
SETB RST
NOP
MOV A,32H
MOV R4,#8
WRITE1:
RRC A ;送地址給1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,31H
MOV R4,#8
WRITE2:
RRC A
NOP ;送數據給1302
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
RET
;讀1302程序
READ:
CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,32H
MOV R4,#8
READ1:
RRC A ;送地址給1302
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2:
CLR SCLK
NOP ;從1302中讀出數據
NOP
NOP
MOV C,IO
NOP
NOP
NOP
NOP
NOP
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV 31H,A
CLR RST
RET
4.2硬件測試
電子萬年歷的電路系統較大,對于焊接方面更是不可輕視,龐大的電路系統中只要出于一處的錯誤,則會對檢測造成很大的不便,而且電路的交線較多,對于各種鋒利的引腳要特別注意處理,否則會刺被帶有包皮的導線,則會對電路造成短路,數碼管顯示不全等現象。
在本成電子萬年歷的設計調試中遇到了很多的問題。回想這些問題只要認真多思考都是可以避免的,以下為主要的問題:
(1)LED數碼管的斷碼錯亂,原因出于有數碼管引腳虛焊,搭焊。
解決:重新檢查數碼管引腳的焊接端排除搭焊,補焊問題管腳,即可解決出的斷碼或亂碼。
( 2)對萬年歷修改時間或日期時,有時LED數碼管被屏蔽掉,造成不亮現象。
解決:根據儀器的測試,發現電路的驅動能力不足,最后在DS1302時鐘芯片的/CS、SCLK、RET端接入5.1K的上拉電阻后,電路的驅動能力才能滿足,即可解決不亮現象。
4.3軟件測試
電子成年歷是多功能的數字型,可以看當前日期(陰、陽歷),時間,還有溫度的儀器。電子成年歷功能很多,所以對于它的程序也較為復雜,所以在編寫程序和調試時出現了相對較多的問題。最后經過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調試過程中主要遇到的問題如下:
1.燒入程序后,LED數碼管顯示閃動,而且亮度不均勻。
解決:首先對調用的延時進行逐漸修改,可以解決顯示閃動問題。其次,由于本作品使作動態掃描方式顯示的數字,動態掃描很快,人的肉眼是無法看出,但是調用的顯示程序時,如果不在反回時屏蔽掉最后的附值,則會出現很亮的現象,所以在顯示的后面加了屏蔽子程序,最后解決了此問題。
2.修改時間、日期時沒有農歷沒有自動對應上。
解決:把不相關的程序暫時屏蔽,地農歷的子程序獨立調試,發現在調用農歷自動更新時,對十進制和十六進制處理不好,所以會造成錯亂。最后把相應的十進制進行修改,使得可以與十六進制對應,最后解決了此問題.
4.4測試結果分析與結論
4.4.1 測試結果分析
(1).在測試中遇到發光二極管、LED數碼管為不顯示時,首先使用試測儀對電路進行測試,觀察是否存在漏焊,虛焊,或者元件損壞.
(2).LED 數碼管顯示不正常,還有亮度不夠,首先使用試測儀對電路進行測試,觀察電路是否存在短路現象。查看燒寫的程序是否正確無誤,對程序進行認真修改。
4.4.2 測試結論
經過多次的反復測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設計能力與及對電路的分析能力.同時在軟件的編程方面得到更到的提高,對編程能力得到加強.同時對所學的知識得到很大的提高與鞏固.
參 考 文 獻
1.樓然苗 李光飛· 單片機課程設計指導·北京:北京航空航天大學出版社2008
2.張立科·單片機通信技術與工程實踐·北京:人民郵電出版社,2005
3.張凱等編著·MCS-51單片機綜合系統及其設計開發·北京:科學出版社,1996
4.朱宇光編著·單片機應用新技術教程·北京:電子工業出版社,2000
5.余永權·89系列FLASH單片機原理與應用·北京:電子工業出版社,2000
6.樓然苗,李光飛·51系列單片機設計實例·北京:北京航空航天大學出版社,2003
7.李東生·PROTEL 99SE電路設計技術入門與應用·北京:電子工業出版社,2002
|