




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、-課程設(shè)計(jì)報(bào)告課程名稱: 專業(yè)綜合課程設(shè)計(jì) 專業(yè)班級: - 學(xué)生姓名: - 指導(dǎo)教師: - 完成時間: - 報(bào)告成績: 評閱意見: 評閱教師 日期 -制目 錄一、緒論11.1 設(shè)計(jì)目的與意義11.2 方案選擇與DIY電子萬年歷的研究情況11.2.1時鐘芯片選擇11.2.2鍵盤選擇21.2.3顯示模塊選擇31.2.4 DIY萬年歷的研究情況4二、主要硬件描述52.1 89C52模塊52.2 顯示模塊LCM1286452.2.1液晶模塊概述52.2.2液晶模塊特點(diǎn)52.3 芯片DS1302簡介6三、硬件設(shè)計(jì)與實(shí)現(xiàn)73.1單片機(jī)最小系統(tǒng)的設(shè)計(jì)73.2時鐘電路的設(shè)計(jì)83.3人機(jī)交互模塊設(shè)計(jì)8四、系統(tǒng)軟
2、件設(shè)計(jì)與實(shí)現(xiàn)94.1主要算法流程圖描述94.2 LCM16824子程序的實(shí)現(xiàn)134.3 DS1302子程序的實(shí)現(xiàn)144.5鍵盤子程序的實(shí)現(xiàn)154.6主程序的實(shí)現(xiàn)16五、測試結(jié)果分析與結(jié)果175.1測試結(jié)果分析175.2測試總結(jié)17結(jié)束語18致 謝19參考文獻(xiàn)20附錄一原理圖21附錄二 部分程序2230一、緒論1.1 設(shè)計(jì)目的與意義隨著電子技術(shù)的高速發(fā)展,對電子方面人才的要求越來越高,不僅要求其具備相關(guān)的專業(yè)理論知識,還要求其具有較強(qiáng)的設(shè)計(jì)、制作等實(shí)踐動手能力.此次學(xué)校舉行的電子設(shè)計(jì)無疑是對從事電子相關(guān)專業(yè)的人的一次很好的鍛煉和考驗(yàn),是培養(yǎng)信息人才的一次良好的機(jī)會,為其提供了一個理論知識與實(shí)踐相
3、結(jié)合的平臺。通過本次課程設(shè)計(jì),引導(dǎo)學(xué)生結(jié)合所學(xué)的電路理論和程序設(shè)計(jì)的知識,思考設(shè)計(jì)方案,以小組合作方式,分工完成各個部分,從而掌握相關(guān)的硬件結(jié)合軟件顯示電路的設(shè)計(jì)和調(diào)試技術(shù),一方面提高了學(xué)生的實(shí)踐動手和協(xié)作能力,另一方面培養(yǎng)了學(xué)生綜合運(yùn)用所學(xué)理論知識進(jìn)行工程設(shè)計(jì)的能力。1.2 方案選擇與DIY電子萬年歷的研究情況1.2.1時鐘芯片選擇方案一:不使用芯片,采用單片機(jī)的定時計(jì)數(shù)器這種方法原理是利用單片機(jī)芯片的定時器來產(chǎn)生固定的時間,模擬時鐘的時, 分,秒。如:利用AT80C52芯片,定時器用工作方式1,每50ms產(chǎn)生一個中斷,循環(huán)20次,即1s周期。每一個周期加1,那么1min為60個周期,1h就
4、是60*60=3600個周期,一天就是3600*24=86400個周期。此方法優(yōu)點(diǎn)是可以省去一些外圍的芯片,但這種方法只能適用于一些要求不是十分精確,不做長期保留的場合。方案二:并行接口時鐘芯片 DS12887特點(diǎn):采用單片機(jī)應(yīng)用系統(tǒng)并行總線(三總線)擴(kuò)展的接口電路,采用這種接口電路具有操作速度快,編程方便的優(yōu)點(diǎn)。對于80C52單片機(jī)來說,低位地址線要通過鎖存器輸出,還要地址譯碼器,而且并行口芯片的體積相對較大。 如圖1 圖1 DS12887管腳圖方案三: 串行接口時鐘芯片DS1302芯片主特性:(1)實(shí)時時鐘具有能計(jì)算2100年之前的秒分時日日期星期月年的能力,還有閏年調(diào)整的能力(2)8 位
5、暫存數(shù)據(jù)存儲RAM(3)串行 I/O 口使得管腳數(shù)量最少(4)工作電壓范圍2.0 5.5V(5)工作電流 2.0V 時,小于300nA(6)讀/寫時鐘或RAM 數(shù)據(jù)時有兩種傳送方式單字節(jié)傳送和多字節(jié)傳送字符組方式(7)8 腳DIP 封裝或可選的8 腳SOIC 封裝根據(jù)表面裝配(8)簡單 3 線接口(9)與 TTL 兼容VCC=5V(10)可選工業(yè)級溫度范圍-40 +85優(yōu)點(diǎn):串行接口的日歷時鐘芯片,使用簡單,接口容易,與微型計(jì)算機(jī)連線較少等特點(diǎn),在單片機(jī)系統(tǒng)尤其是手持式信息設(shè)備中己得到了廣泛的應(yīng)用。所以,最終選擇串行時鐘芯片DS1302,DS1302的管腳圖如圖2所示。圖2 DS1302管腳圖
6、1.2.2鍵盤選擇方案一: 矩陣式鍵盤矩陣式鍵盤電路圖如圖3所示。 圖3 矩陣式鍵盤行列式鍵盤的原理就是每一行線與每一列線的交叉地方不相通,而是接上一個按鍵,通過按鍵來接通。特點(diǎn): 以省出不少的I/O 口資源,程序編寫相對復(fù)雜點(diǎn),適用于鍵數(shù)比較多的情況。方案二: 獨(dú)立式鍵盤獨(dú)立式鍵盤電路圖如圖4所示。 圖4 獨(dú)立式鍵盤獨(dú)立式鍵盤是指各個按鍵相互獨(dú)立地連接到各自的單片機(jī)的I/O 口,I/O口只需要做輸入口就能讀到所有的按鍵。特點(diǎn): 電路簡單,程序容易寫,適用于按鍵數(shù)較少的情況。所以我們選擇獨(dú)立式鍵盤。1.2.3顯示模塊選擇方案一: LED數(shù)碼管顯示數(shù)碼管顯示比較常用的是采用CD4511和74LS
7、138實(shí)現(xiàn)數(shù)碼轉(zhuǎn)換,數(shù)碼顯示分動態(tài)顯示和靜態(tài)顯示,靜態(tài)顯示具有鎖存功能,可以使數(shù)據(jù)顯示得很清楚,但浪費(fèi)了一些資源。目前單片機(jī)數(shù)碼管普通采用動態(tài)顯示。編程簡單,但只能顯示數(shù)字,不能顯示中文。方案二: LCD1602能夠顯示英文和數(shù)字。 1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號。方案三: LCD12864作為一種輸出方式,液晶顯示最大的特點(diǎn)就是能夠?qū)崿F(xiàn)友好的人機(jī)界面,它己經(jīng)廣泛應(yīng)用于現(xiàn)代工業(yè)控制和智能化儀器儀表等領(lǐng)域,它己經(jīng)成為單片機(jī)就用開發(fā)領(lǐng)域典型模塊之一。能夠方便的顯示文字和數(shù)字。所以最終選擇L
8、CD12864。1.2.4 DIY萬年歷的研究情況目前電子愛好者,所設(shè)計(jì)的萬年歷大部分都采用LCD1602或數(shù)碼管顯示,只能顯示陽歷,不能顯示陰歷,而且沒有陰歷相對應(yīng)的的天干地支和生肖年,沒有達(dá)到多功能的效果。我們采用LCD12864顯示,通過算法實(shí)現(xiàn),能正確顯示陰歷,具有良好的界面,為了追求時間的準(zhǔn)確,我們采用芯片DS1302,通過單片機(jī)控制,讀出時間顯示在LCD上。我們除了用芯片DS18B20,通過程序控制,把溫度也顯示出來外還通過算法控制,把陰歷的天干地支和生肖年也顯示出來,達(dá)到多功能效果。二、主要硬件描述2.1 89C52模塊MCS-51單片機(jī)管腳圖圖如圖5所示。 圖5 單片機(jī)管腳圖
9、(1)一個8位的微處理器(CPU)(2)片內(nèi)數(shù)據(jù)存儲器RAM(128B/256B)(3)片內(nèi)程序存儲器ROM/EPROM(4kB/8kB)(4)4個8位并行I/O拉口P0-P3,每個口既可以作輸入也可以作輸出(5)2個16位定時器/計(jì)數(shù)器(6)5個中斷源的中斷控制系統(tǒng)(7)1個全雙工的串行I/O接口(8)片內(nèi)時鐘振蕩器2.2 顯示模塊LCM128642.2.1液晶模塊概述我們采用FG12864J顯示模塊,如圖6所示,它是一種圖形點(diǎn)陣液晶顯示器。它主要采用動態(tài)驅(qū)動原理由行驅(qū)動控制器和列驅(qū)動器兩部分組成了128(列)×64(行)的全點(diǎn)陣液晶顯示。2.2.2液晶模塊特點(diǎn)(1)工作電壓為+5
10、V±10% ,可自帶驅(qū)動 LCD 所需的負(fù)電壓(2)全屏幕點(diǎn)陣,點(diǎn)陣數(shù)為128(列)×64(行),可顯示8(/行)×4(行)個(16×16 點(diǎn)陣)漢字,也可完成圖形,字符的顯示(3)與 CPU 接口采用5 條位控制總線和8 位并行數(shù)據(jù)總線輸入輸出,適配M6800 系列時序(4)內(nèi)部有顯示數(shù)據(jù)鎖存器(5)簡單的操作指令 顯示開關(guān)設(shè)置,顯示起始行設(shè)置,地址指針設(shè)置和數(shù)據(jù)讀/寫等指令 圖6 FG12864J顯示模塊2.3 芯片DS1302簡介DS1302 是DALLAS 公司推出的涓流充電時鐘芯片內(nèi)含有一個實(shí)時時鐘/日歷和31 字節(jié)靜態(tài)RAM 通過簡單的串行接
11、口與單片機(jī)進(jìn)行通信實(shí)時時鐘/日歷電路提供秒分時日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動調(diào)整時鐘操作可通過AM/PM 指示決定采用24 或12 小時格式。DS1302 與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信僅需用到三個口線1 RES 復(fù)位2 I/O 數(shù)據(jù)線3 SCLK串行時鐘時鐘/RAM 的讀/寫數(shù)據(jù)以一個字節(jié)或多達(dá)31 個字節(jié)的字符組方式通信DS1302 工作時功耗很低保持?jǐn)?shù)據(jù)和時鐘信息時功率小于1mW。 DS1302的管腳描述如表1所示。表1 DS1302管腳X1 X232.758KHz晶振管腳GND地RST復(fù)位I/O數(shù)據(jù)輸入/輸出引腳SCLK串行時鐘Vcc1 Vcc2電源供電管
12、腳三、硬件設(shè)計(jì)與實(shí)現(xiàn)該萬年歷以89S52作為控制核心, DS1302時鐘芯片,顯示采用LCM12864,調(diào)表采用矩陣式鍵盤,整體硬件電路的框圖如圖7所示。 3.1單片機(jī)最小系統(tǒng)的設(shè)計(jì)AT89S52單片機(jī)為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3, MCS-51單片機(jī)共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨(dú)立地作輸出或輸入。圖8 單片機(jī)最小系統(tǒng)原理圖單片機(jī)的最小系統(tǒng)如圖8所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出
13、。第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端。3.2時鐘電路的設(shè)計(jì)本系統(tǒng)采用有DS1302串行時鐘芯片作為主時鐘電路,該電路使用單獨(dú)的32.768M的晶振和單獨(dú)的電源供電,減小主控的負(fù)擔(dān)。電路圖如圖9所示。圖9 時鐘電路3.3人機(jī)交互模塊設(shè)計(jì)該系統(tǒng)輸入模塊采用獨(dú)立式式鍵盤輸入,顯示模塊采用LCM12864,很好的實(shí)現(xiàn)了人機(jī)交互,液晶與主控制器的接口如圖10所示。圖10 液晶顯示電路 四、系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)4.1主要算法流程圖描述以80C52為核心,處理外轉(zhuǎn)電路傳進(jìn)來的信號,實(shí)現(xiàn)時鐘數(shù)據(jù)的讀取,保存,顯示其及鍵盤操作。流程圖如圖12所示。圖12
14、 主程序流程圖 陽歷和時分秒都是通過DS1302讀出來的,經(jīng)過主控的轉(zhuǎn)換和處理最終顯示在LCM12864上,該程序流程圖如圖13所示。 圖13 計(jì)算陽歷和時分秒流程圖陰歷是通過一種算法轉(zhuǎn)換過來,首先得到陽歷值,然后根據(jù)這種算法把陽歷轉(zhuǎn)換成陰歷,最終顯示在LCM12864模塊上,該程序流程圖如圖14所示。 圖14 計(jì)算陰歷程序流程圖時間調(diào)整是通過四個獨(dú)立按鍵來調(diào)整時間值,時間調(diào)整流程圖如圖15所示。 圖15 時間調(diào)整程序流程圖星期的計(jì)算方法如下:星期=(日期年份+所過閏年數(shù)+月校正數(shù))%7,如果是在閏年又不到3月份上述之和要減一天再除7,其1到12月的校正數(shù)據(jù)為 6 2 2 5 0 3 5 1
15、4 6 2 4,該程序中采用1個字節(jié)表示年份閏年數(shù)也只計(jì)算1900 年以后的閏年數(shù)。該程序的流程圖如圖16所示。 圖16 計(jì)算星期算法4.2 LCM16824子程序的實(shí)現(xiàn)LCM12864的讀寫時序如圖17所示。 圖17 LCM12864讀寫時序主要函數(shù)模塊:函數(shù):void lcd_init(void) 顯示初始化程序函數(shù):Void GUI_init() 該函數(shù)用于初始化顯示界面,把一些固定不需要刷新的文字固定下來函數(shù):void lw(uchar x, uchar y, uchar dd)用來寫數(shù)據(jù)的子程序函數(shù): void display(uchar xx, uchar yy, uchar n,
16、 uchar fb,uchar hz) 用于顯示漢字,每個漢字為16*16的點(diǎn)陣函數(shù): void shownum(uchar xx,uchar yy,uchar n,uchar fb,uchar num)用于顯示數(shù)字,每個數(shù)字為8*16的點(diǎn)陣4.3 DS1302子程序的實(shí)現(xiàn)DS1302的讀寫時序如圖18所示。 圖18 DS1302讀寫時序定義結(jié)構(gòu)體數(shù)組SYSTEMTIME的時間類型,結(jié)構(gòu)體數(shù)組如下:typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned ch
17、ar Week;unsigned char Day;unsigned char Month;unsigned char Year;SYSTEMTIME主要函數(shù)模塊:函數(shù): void Initial_DS1302(void)描述:時鐘芯片初始化函數(shù): void Write1302(unsigned char ucAddr, unsigned char ucDa)描述:把某個數(shù)據(jù)寫進(jìn)某個地址函數(shù): unsigned char Read1302(unsigned char ucAddr)描述:從芯片內(nèi)某地址讀取數(shù)據(jù)函數(shù): void DS1302_GetTime(SYSTEMTIME *Time)描述
18、: 獲取時鐘芯片的時鐘數(shù)據(jù)到自定義的結(jié)構(gòu)型數(shù)組函數(shù): void DS1302InputByte(unsigned char d)描述: 往時鐘寫入一字節(jié)函數(shù): unsigned char DS1302OutputByte(void)描述:從時間內(nèi)讀取一個字節(jié) 4.5鍵盤子程序的實(shí)現(xiàn)鍵盤示意圖如圖21所示。 圖21 按鍵示意圖主要函數(shù)模塊:函 數(shù) 名: void key_count()功能描述:設(shè)置狀態(tài)轉(zhuǎn)換函數(shù),根據(jù)變量count的不同值,對應(yīng)不同的設(shè)置狀態(tài)按下設(shè)置鍵,自動切換設(shè)置位函 數(shù) 名: void key_out()功能描述:跳出設(shè)置模式函 數(shù) 名: uchar key_up(int t
19、emp,int max,int min)功能描述: 按鍵加函數(shù),在最大值與最小值之間變化函 數(shù) 名: uchar key_down(int temp,int max,int min)功能描述: 按鍵減函數(shù),在最大值與最小值之間變化函 數(shù) 名:void set_year(); void set_month(); void set_day(); void set_hour();void set_minute(); 功能描述: 分別是用來設(shè)置 年 月 日 時 分 秒函 數(shù) 名: void key_al01()功能描述:設(shè)置定時報(bào)警功能4.6主程序的實(shí)現(xiàn)主要函數(shù)模塊:函 數(shù) 名: Init_GUI()
20、功能描述:進(jìn)行界面初始化,例如固定的年、星期、農(nóng)歷函 數(shù) 名: void Show_NL()功能描述:根據(jù)算法,得出陰歷, 包括天干地支月日函 數(shù) 名: void Show_YL()功能描述:根據(jù)算法,從時鐘芯片讀出陽歷數(shù)據(jù),顯示出來函 數(shù) 名: LCD_ShowWNL()功能描述: 根據(jù)算法,顯示電子萬年歷,其中時鐘的”秒”位為每次循環(huán)刷新一次,”分”為在普通模式時每分鐘刷新一次,在設(shè)置模式時每次循環(huán)刷新一次,”時”為在普通模式時每小時刷新一次,在設(shè)置模式時每次循環(huán)刷新一次,公歷農(nóng)歷的年、月、日、星期、溫度,設(shè)置模式每次循環(huán)刷新一次函數(shù)名:void LCD_showalarm()功能描述:
21、顯示定時報(bào)警的時間函 數(shù) 名: void mian()功能描述:.顯示萬年歷,循環(huán)讀取時間,并通過程序進(jìn)行鍵盤檢測五、測試結(jié)果分析與結(jié)果5.1測試結(jié)果分析(1)在測試中遇到LEDLCD16824不顯示分析:首先使用試測儀對電路進(jìn)行測試,觀察是否存在漏焊,虛焊,或者元件損壞。再接著研究程序的時序圖是否正確。最后發(fā)現(xiàn)程序時序方面出了點(diǎn)小錯。修改后就把問題解決了(2)測試中遇到調(diào)時間調(diào)到2079年后跳到2000年分析:認(rèn)真研究時鐘芯片的Datasheet發(fā)現(xiàn),對年的讀取,讀出后是BCD碼轉(zhuǎn)換成十制顯示時算法不正確(3)按鍵調(diào)整時,不是按單位遞增和遞減分析:在鍵盤程序中,按鍵一次,向芯片寫入一個新的數(shù)
22、字,在寫入數(shù)字后必須有一定延時才再寫入另一個數(shù)字 (4)燒寫程序進(jìn)單片機(jī)里面時,有時會在顯示屏上顯示亂碼.分析:用電壓表檢查.最后檢測出USB下載線的端口電壓不夠換條新線就可以把問題解決5.2測試總結(jié)經(jīng)過多次的反復(fù)測試與分析,掌握了硬件的設(shè)計(jì)與分析的能力, 學(xué)會看英文版的Datasheet,同時在軟件的編程方面得到更到的提高,對編程能力得到加強(qiáng)。對所學(xué)的知識得到很大的提高與鞏固。 最終實(shí)現(xiàn)功能:(1)能顯示陽歷年、月、日、星期、小時、分、秒(2)顯示模塊采用LCD液晶顯示,要求能用按鍵調(diào)整時間。(3)能顯示陰歷月、日,在顯示陰歷時間時能標(biāo)明是否為閏年。(4)具有定時報(bào)警功能,能夠進(jìn)行整點(diǎn)和半點(diǎn)
23、語音報(bào)時。(5)能夠準(zhǔn)確在LCD上顯示。(6)在顯示農(nóng)歷時通過算法能夠把天干地去也顯示出來。結(jié)束語通過對基于單片機(jī)的萬年歷的研究和設(shè)計(jì),完成了一種能夠顯示陽歷、陰歷、星期、時間、實(shí)時溫度、天干地支的多功能萬年歷,該萬年歷還可以定時報(bào)警和進(jìn)行進(jìn)行整點(diǎn)和半點(diǎn)報(bào)時。本系統(tǒng)設(shè)計(jì)從開始到完成包括文檔的編寫總共花了一個月左右的時間,設(shè)計(jì)的難點(diǎn)在于星期和天干地支的計(jì)算方法,還有單片機(jī)和各個芯片之間的通信協(xié)議,液晶的讀寫時序,按鍵的防抖。本系統(tǒng)基本完成了設(shè)計(jì)指標(biāo)的所有要求,所有的程序分塊編寫,通過main函數(shù)來調(diào)用,增加了程序的易修改性和易讀性,方便他人的使用和改進(jìn)。但是由于時間的局限性以及本人能力的有限性,
24、本系統(tǒng)還有許多需要改進(jìn)和完善的地方。其中主要的問題就是功耗和電源供電的問題,該處采用5V供電,最好采用3V供電。整個電路的功耗太大,沒讓單片機(jī)工作在空閑模式,這都是作品不實(shí)用,不能夠大批量生產(chǎn),這都有待改進(jìn),希望以后有機(jī)會對該系統(tǒng)做進(jìn)一步的完善。致 謝 這次課程設(shè)計(jì)所收獲的不僅僅是愈加豐厚的知識,更重要的是在閱讀、實(shí)踐中所培養(yǎng)的思維方式、表達(dá)能力和廣闊視野。在此要感謝的是老師。老師治學(xué)嚴(yán)謹(jǐn),學(xué)識淵博,為我營造了一種良好的研究氛圍。在跟隨老師學(xué)習(xí)的過程中,我不僅掌握了全新而實(shí)用的學(xué)術(shù)思想和研究方法,也領(lǐng)會了許多待人接物與為人處世的道理。參考文獻(xiàn)1石麗杰.單片機(jī)控制系統(tǒng)硬件
25、設(shè)計(jì)D.商品與質(zhì)量理論研究,2011,(5).2陸中宏.基于Proteus軟件的單片機(jī)控制系統(tǒng)設(shè)計(jì)與制作J.工業(yè)技術(shù)與職業(yè)教育,2011(1).3 祝詩平. Proteus和Keil軟件在單片機(jī)教學(xué)中的應(yīng)用J .西南農(nóng)業(yè)大學(xué)學(xué)報(bào)(社會科學(xué)版),2011(2).4王來志,王小平.基于單片機(jī)的萬年歷設(shè)計(jì)與Proteus仿真J .知識經(jīng)濟(jì),2011,(5).5王慶利.單片機(jī)設(shè)計(jì)案例實(shí)踐教程M.北京郵電大學(xué)出版社,2008.6 陳紅,李瑋.基于單片機(jī)和12864LCD模塊的萬年歷設(shè)計(jì)與仿真D.中小企業(yè)管理與科技,2011,(34).7賈極.單片機(jī)與PC機(jī)的串口通信J. 中小企業(yè)管理與科技,2011,(
26、16).8陳建平.液晶顯示器驅(qū)動方法及驅(qū)動電路探析J.數(shù)字技術(shù)與應(yīng)用,2011,(11).2011. 附錄一原理圖附錄二 部分程序主程序#include<reg51.h>#include<DS1302.c> /更改管腳#include<zimo.c>#include<lcd12864.c>#include<key.c>#include<beep.c>#include<lunar.c>#define uchar unsigned char#define uint unsigned intSYSTEMTIME sy
27、s;uchar c_sun,year_sun,month_sun,day_sun;uchar year_moon,month_moon,day_moon,week; uchar alarm=0,al_hour=0,al_min=0;Init_GUI()lcd_init();Initial_DS1302();delay(10);jiemian();/顯示初始化界面,例如固定的年、星期、農(nóng)歷放在12864.c里void Show_NL() DS1302_GetTime(&sys);year_sun=Read1302(DS1302_YEAR);month_sun=Read1302(DS130
28、2_MONTH);day_sun=Read1302(DS1302_DAY);Conversion(0,year_sun,month_sun,day_sun);/*day_moon=(day_moon&0x70)>>4)*10 + (day_moon&0x0F);month_moon=(month_moon&0x70)>>4)*10 + (month_moon&0x0F);year_moon=(year_moon&0xF0)>>4)*10 + (year_moon&0x0F);*/if(month_moon=1)
29、display(8,4,12,0,ch1616);/顯示“正”else display(8,4,month_moon-1,0,ch1616);/顯示當(dāng)前農(nóng)歷的月if(day_moon<11)display(12,4,13,0,ch1616);/顯示“初”if(day_moon<20&&day_moon>10)display(12,4,9,0,ch1616);/顯示“十”if(day_moon<30&&day_moon>19)display(12,4,14,0,ch1616);/顯示“廿”if(day_moon>29)displ
30、ay(12,4,2,0,ch1616);/顯示“三”display(14,4,(day_moon-1)%10,0,ch1616);/顯示農(nóng)歷個位display(14,2,year_moon%12,0,shengxiao);/顯示生肖display(9,2,year_moon%10,0,tiangan);/顯示天干display(11,2,year_moon%12,0,dizhi);/顯示地支Conver_week(0,year_sun,month_sun,day_sun);/星期if(week=0) display(5,4,17,0,ch1616);/顯示星期日else display(5,4
31、,week-1,0,ch1616); /顯示星期16 void Show_YL() /顯示陽歷 DS1302_GetTime(&sys);shownum(6,6,sys.Second/10,0,num);/顯示秒shownum(7,6,sys.Second%10,0,num); shownum(3,6,sys.Minute/10,0,num);/顯示分shownum(4,6,sys.Minute%10,0,num);shownum(0,6,sys.Hour/10,0,num);/顯示時shownum(1,6,sys.Hour%10,0,num);shownum(4,2,sys.Day/
32、10,0,num);/顯示日shownum(5,2,sys.Day%10,0,num);shownum(0,2,sys.Month/10,0,num);/顯示月shownum(1,2,sys.Month%10,0,num);shownum(3,0,sys.Year/10,0,num);/顯示年shownum(4,0,sys.Year%10,0,num);if( (!(sys.Year%4) && (sys.Year%100) | !(sys.Year%400) )display(8,0,24,0,ch1616);/顯示平閏年elsedisplay(8,0,23,0,ch1616
33、);/平閏年計(jì)算if(sys.Minute=30&&sys.Second=0)Beep_Half();/報(bào)時if(sys.Minute=0&&sys.Second=0)Beep_Hour(); void LCD_ShowWNL()DS1302_GetTime(&sys);shownum(6,6,sys.Second/10,0,num);shownum(7,6,sys.Second%10,0,num);/秒 每次循環(huán)鐘刷新一次if(!sys.Second)/分 在普通模式時每分鐘刷新一次,在設(shè)置模式時每次循環(huán)刷新一次shownum(3,6,sys.Minu
34、te/10,0,num);shownum(4,6,sys.Minute%10,0,num);if(!sys.Second&&!sys.Minute)/時 在普通模式時每小時刷新一次,在設(shè)置模式時每次循環(huán)刷新一次shownum(0,6,sys.Hour/10,0,num);shownum(1,6,sys.Hour%10,0,num);if(!sys.Second&&!sys.Minute&&!sys.Hour)/公歷農(nóng)歷的年、月、日、星期、溫度,設(shè)置模式每次循環(huán)刷新一次Show_YL();/顯示農(nóng)歷Show_NL();/顯示新歷if(sys.Min
35、ute=30&&sys.Second=0)Beep_Half();/報(bào)時if(sys.Minute=0&&sys.Second=0)Beep_Hour();void LCD_showalarm()display(8,6,21-alarm,0,ch1616);shownum(11,6,al_hour/10,0,num);/顯示鬧鈴時shownum(12,6,al_hour%10,0,num);/顯示鬧鈴時shownum(14,6,al_min/10,0,num);/顯示鬧鈴分shownum(15,6,al_min%10,0,num);/顯示鬧鈴分void main
36、()Init_GUI();diswendu();Show_YL();Show_NL();LCD_showalarm();while(1)LCD_ShowWNL();if(sys.Second%9=0)diswendu();key_count();if(count)key_set();/判斷set鍵按下,進(jìn)入設(shè)置界面 if(alarm && (al_hour=sys.Hour) && (al_min=sys.Minute)&& !sys.Second)/定時報(bào)警功能Beep_Half();DS1302_GetTime(&sys);shown
37、um(7,6,sys.Second%10,0,num);Beep_Hour();DS1302_GetTime(&sys);shownum(7,6,sys.Second%10,0,num);Beep_Half();DS1302_GetTime(&sys);shownum(7,6,sys.Second%10,0,num);Beep_Hour();DS1302_GetTime(&sys);shownum(7,6,sys.Second%10,0,num);Beep_Half();DS1302_GetTime(&sys);shownum(7,6,sys.Second%10
38、,0,num);Beep_Hour();DS1302_GetTime(&sys);shownum(7,6,sys.Second%10,0,num); DS1302程序#define uint unsigned int#define uchar unsigned char#include <intrins.h>sbit DS1302_CLK = P12; /實(shí)時時鐘時鐘線引腳 sbit DS1302_IO = P11; /實(shí)時時鐘數(shù)據(jù)線引腳 sbit DS1302_RST = P10; /實(shí)時時鐘復(fù)位線引腳sbit ACC0 = ACC0;sbit ACC7 = ACC7;t
39、ypedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;SYSTEMTIME;/定義的時間類型SYSTEMTIME sys;#define AM(X)X#define PM(X)(X+12) / 轉(zhuǎn)成24小時制#define DS1302_SECOND0x80/時鐘芯片的寄存器位置,存放時間#define DS1302_MINU
40、TE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C void DS1302InputByte(unsigned char d) /實(shí)時時鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; ACC = d; for(i=8; i>0; i-)DS1302_IO = ACC0;/相當(dāng)于匯編中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >&
41、gt; 1; unsigned char DS1302OutputByte(void)/實(shí)時時鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i;for(i=8; i>0; i-)ACC = ACC >>1;/相當(dāng)于匯編中的 RRC ACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù)DS1302_RST = 0; DS1302
42、_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr);/ 地址,命令 DS1302InputByte(ucDa); / 寫1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/讀取DS1302某地址的數(shù)據(jù)unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01);/ 地址,命令 ucData = D
43、S1302OutputByte();/ 讀1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) /獲取時鐘芯片的時鐘數(shù)據(jù)到自定義的結(jié)構(gòu)型數(shù)組unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_M
44、INUTE);Time->Minute = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadVa
45、lue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = (ReadValue&0xf0)>>4)*10 + (Rea
46、dValue&0x0F);void Initial_DS1302(void) /時鐘芯片初始化unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80)/判斷時鐘芯片是否關(guān)閉Write1302(0x8e,0x00);/寫入允許_nop_(); _nop_(); _nop_();Write1302(0x8c,0x09);/寫入年_nop_(); _nop_(); _nop_(); Write1302(0x88,0x05);/寫入月Write1302(0x86,0x05);/寫入日Write1302(0x8a,0x02)
47、;/星期Write1302(0x84,0x23);/時Write1302(0x82,0x59);/寫入分Write1302(0x80,0x30);/寫入秒Write1302(0x90,0xae);/開啟充電_nop_(); _nop_(); _nop_(); Write1302(0x8e,0x80);/禁止寫入LCD12864程序#include <REG51.H>#define uchar unsigned char#define uint unsigned intsbit CS1=P14;sbit CS2=P15;sbit RS=P05;sbit RW=P06;sbit EN=P07;sbit RST=P16;#define DataPort P3void delay(unsigned long v) while(v!=0)v-;void lcd_busy(void)RS=0;RW=1;Dat
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代銷意向合同范本
- 二手車線上交易合同范本
- 眾籌股東合同范本6
- 買賣帶表格合同范例
- 加工中心保養(yǎng)合同范本
- 兄弟共同承包土地合同范本
- 辦公電腦合同范本
- 代理執(zhí)行合同范本
- 共同買地皮合同范本
- pc吊裝合同范本
- Q∕SY 13006-2016 招標(biāo)項(xiàng)目標(biāo)段(包)劃分指南
- 《大學(xué)英語教學(xué)大綱詞匯表》(1~4級,5~6級)
- DB11-T1630-2019城市綜合管廊工程施工及質(zhì)量驗(yàn)收規(guī)范
- 醫(yī)院消毒供應(yīng)中心清洗、消毒、滅菌質(zhì)控評分表
- 27供應(yīng)室清洗消毒及滅菌效果監(jiān)測制度
- 金色大氣教師節(jié)頒獎典禮頒獎盛典PPT模板
- OECD Good laboratory practice (GLP)中英文對照版
- 生化工程,第七章反應(yīng)器放大與設(shè)計(jì)
- 1開學(xué)第一節(jié)班會課
- 手機(jī)開發(fā)流程圖
- 實(shí)木家具工藝標(biāo)準(zhǔn)(全流程)
評論
0/150
提交評論