版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 課程名稱(chēng): 萬(wàn)年歷 </p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 班 級(jí):
2、 </p><p> 目 錄</p><p> 前言--------------------------------------------------------------------------2</p><p> 課程設(shè)計(jì)的目的和要求----------------------------------
3、--------------------2</p><p> 課程設(shè)計(jì)的目的-----------------------------------------------------2</p><p> 課程設(shè)計(jì)的基本要求-------------------------------------------------2</p><p> 系統(tǒng)設(shè)計(jì)------
4、------------------------------------------------------------2</p><p> 2.1基本工作原理-----------------------------------------------------------2</p><p> 2.2系統(tǒng)設(shè)計(jì)-------------------------------------
5、----------------------2</p><p> 2.2.1系統(tǒng)組成方案---------------------------------------------------3</p><p> 2.2.2 正常工作時(shí)按鍵、顯示功能的定義----------------------------------3</p><p> 2.2.3定時(shí)系統(tǒng)
6、的功能及按鍵的定義------------------------------------3</p><p> 2.3 軟件總體設(shè)計(jì)-----------------------------------------------------3 2.3.1主程序框圖及清單--------------------------
7、---------------------3</p><p> 硬件設(shè)計(jì)------------------------------------------------------------------4</p><p> 3.1主控制器---------------------------------------------------------------4</p>
8、<p> 3.1.1STC89C52引腳封裝與功能表-----------------------------------4</p><p> 3.1.2振蕩電路及復(fù)位電路----------------------------------------------5</p><p> 3.2 DS1302原理及引腳介紹--------------------------
9、------------------------6</p><p> 3.3 LCD顯示驅(qū)動(dòng)電路-------------------------------------------------------9</p><p> 4 軟件設(shè)計(jì)------------------------------------------------------------------11</
10、p><p> 4.1DS1302時(shí)間產(chǎn)生軟件設(shè)計(jì)------------------------------------------------11</p><p> 4.2數(shù)據(jù)處理顯示程序設(shè)計(jì)--------------------------------------------------13</p><p> 5 系統(tǒng)操作說(shuō)明---------------
11、----------------------------------------------15</p><p> 6 結(jié)束語(yǔ)-------------------------------------------------------------------15</p><p> 7 參考文獻(xiàn)--------------------------------------------
12、---------------------15</p><p> 8 系統(tǒng)原理圖---------------------------------------------------------------16</p><p> 附錄1-----------------------------------------------------------------------16&l
13、t;/p><p><b> 前言</b></p><p> 萬(wàn)年歷是大學(xué)本科階段經(jīng)典的課程設(shè)計(jì)題目,題目更加貼近實(shí)際生活,課程設(shè)計(jì)本身就使我們對(duì)單片機(jī)的軟硬件結(jié)合有更深的理解,所以本次課程設(shè)計(jì)會(huì)讓我們更加熟練的使用單片機(jī)</p><p> 1 課程設(shè)計(jì)的目的和要求</p><p> 1.1 課程設(shè)計(jì)的目的</
14、p><p> 通過(guò)顯示年日歷程序的設(shè)計(jì),培養(yǎng)學(xué)生綜合利用C語(yǔ)言或匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力,加強(qiáng)學(xué)生對(duì)軟件工程方法的初步認(rèn)識(shí),提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。 </p><p> 通過(guò)本項(xiàng)課程設(shè)計(jì),可以培養(yǎng)獨(dú)立思考、 綜合運(yùn)用所學(xué)有關(guān)相應(yīng)知識(shí)的能力,能更好的鞏固《單片機(jī)程序設(shè)計(jì)》課程學(xué)習(xí)的內(nèi)容,掌握 工程軟件設(shè)計(jì)的基本方法,強(qiáng)化上機(jī)動(dòng)手編程能力,闖過(guò)理論與實(shí)踐相結(jié)
15、合的難關(guān)!同時(shí)增加了同學(xué)之間的團(tuán)隊(duì)合作精神!更加也體會(huì)到以后在工作中團(tuán)隊(duì)合作的重要性和必要性!</p><p> 通過(guò)本次課程設(shè)計(jì),可以使同學(xué)們更熟練的使用單片機(jī)的軟件仿真,如使用protues,keilC,wave等軟件,同時(shí)也使同學(xué)們學(xué)會(huì)電子器件的基本焊接技術(shù),對(duì)單片機(jī)的使用有更深的理解。</p><p> 1.2課程設(shè)計(jì)的要求</p><p> 1、能夠
16、顯示時(shí)分秒、星期;</p><p> 2、能夠顯示年月日;</p><p> 3、能夠自動(dòng)清除屏幕以前的廢棄信息;</p><p><b> 4、能夠修改時(shí)間;</b></p><p><b> 5、能夠定時(shí);</b></p><p> 6、要求劃分功能模塊,各個(gè)功
17、能分別使用函數(shù)來(lái)完成;</p><p> 7、源代碼程序要有必要的注釋?zhuān)?lt;/p><p> 8、能夠半點(diǎn)報(bào)時(shí)和整點(diǎn)報(bào)時(shí)。</p><p><b> 2 系統(tǒng)設(shè)計(jì)</b></p><p><b> 2.1基本工作原理</b></p><p> 該系統(tǒng)主要是通過(guò)時(shí)鐘芯
18、片DS1302產(chǎn)生穩(wěn)定的日期和時(shí)間,然后通過(guò)單片機(jī)控制時(shí)鐘芯片和顯示器LCD,從而輸出穩(wěn)定的時(shí)間,改系統(tǒng)的仿真圖如圖:</p><p><b> 圖1</b></p><p> 從圖1 可知,該系統(tǒng)主要由到單片機(jī)控制系統(tǒng),時(shí)鐘產(chǎn)生系統(tǒng)和顯示系統(tǒng)構(gòu)成。</p><p><b> 2.2系統(tǒng)設(shè)計(jì)</b></p>
19、;<p> 2.2.1系統(tǒng)組成方案</p><p> 該系統(tǒng)主要由單片機(jī)控制系統(tǒng),顯示系統(tǒng)及時(shí)間信號(hào)產(chǎn)生系統(tǒng)構(gòu)成??刂葡到y(tǒng)有單片機(jī)機(jī)保證單片機(jī)工作的外圍元件構(gòu)成;顯示系統(tǒng)主要由16*2雙排顯示LCD構(gòu)成;時(shí)間產(chǎn)生系統(tǒng)主要由DS1302產(chǎn)生。此外系統(tǒng)還有正常工作時(shí)的調(diào)時(shí)按鍵,定時(shí)時(shí)的調(diào)時(shí)按鍵以及復(fù)位按鍵,還有報(bào)時(shí)所需的蜂鳴器等。</p><p> 2.2.2 正常工作時(shí)按
20、鍵、顯示功能的定義</p><p> 正常工作時(shí),共用到四個(gè)鍵,一個(gè)為接到RST端的復(fù)位鍵,一個(gè)為接到P1.0端的功能鍵另外;兩個(gè)未分別接至P1.1、P1.2端的調(diào)時(shí)增減鍵。正常工作時(shí)能調(diào)節(jié)時(shí)分秒,年月日及星期的時(shí)間,可加可減。調(diào)時(shí)時(shí)光標(biāo)閃爍。</p><p> 2.2.3定時(shí)系統(tǒng)的功能及按鍵的定義</p><p> 啟動(dòng)定時(shí)模式時(shí),第一排首先顯示“Dings
21、hi!”第二排顯示日期和時(shí)間,此時(shí)共用到三個(gè)鍵,一個(gè)為功能鍵,選擇調(diào)節(jié)對(duì)象,另外兩個(gè)為加減鍵,對(duì)調(diào)節(jié)對(duì)象進(jìn)行加減。</p><p><b> 2.3系統(tǒng)總體設(shè)計(jì)</b></p><p> 2.3.1主程序框圖及清單</p><p> 清單:STC89C52,DS1302,LCD1602,排阻,5V電源,3V鋰電池,蜂鳴器,6M晶振,32.
22、768M晶振各一個(gè);33pF電容兩個(gè);10pF電容一個(gè);100k電阻一個(gè);10k電阻一個(gè)。</p><p><b> 3 硬件設(shè)計(jì)</b></p><p><b> 3.1主控制器</b></p><p> 3.1.1 STC89C52引腳封裝與功能表</p><p> STC89C52
23、與我們學(xué)過(guò)的AT89C51相似,但硬件配置更高,且更容易導(dǎo)入程序,所以使用比AT系列更廣泛。</p><p><b> 功能特性描述</b></p><p> STC89C52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)
24、器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在線系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 STC89C52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52可降至0Hz靜態(tài)邏輯操作,支
25、持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K字節(jié)在系統(tǒng)可編程 Flash</p><p> 3.1.2振蕩電路及復(fù)位電路</p><p> 振蕩電路及復(fù)位電路原理圖</p><p>
26、3.2DS1302原理及引腳介紹</p><p> DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置
27、備用電源充電方式,提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。DS1302的外部引腳分配如圖1所示及內(nèi)部結(jié)構(gòu)如圖2所示。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄,因此廣泛應(yīng)用于測(cè)量系統(tǒng)中。</p><p> 圖1 DS1302的外部引腳分配</p><p> 圖2 DS1302的內(nèi)部結(jié)構(gòu)</p><
28、p><b> 各引腳的功能為:</b></p><p> Vcc1:主電源;Vcc2:備份電源。當(dāng)Vcc2>Vcc1+0.2V時(shí),由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1向DS1302供電。</p><p> SCLK:串行時(shí)鐘,輸入,控制數(shù)據(jù)的輸入與輸出; </p><p> I/O:三線接
29、口時(shí)的雙向數(shù)據(jù)線;</p><p> CE:輸入信號(hào),在讀、寫(xiě)數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開(kāi)始控制字訪問(wèn)移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?lt;/p><p> DS1302有下列幾組寄存器:</p><p> ?、?DS1302有關(guān)日歷、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀時(shí)81h~8Dh,寫(xiě)時(shí)80h
30、~8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如圖3所示。</p><p> 圖 3 DS1302有關(guān)日歷、時(shí)間的寄存器</p><p> 小時(shí)寄存器(85h、84h)的位7用于定義DS1302是運(yùn)行于12小時(shí)模式還是24小時(shí)模式。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式時(shí),位5是 ,當(dāng)為1時(shí),表示PM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí)位。</p><p&g
31、t; 秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開(kāi)始運(yùn)行。</p><p> 控制寄存器(8Fh、8Eh)的位7是寫(xiě)保護(hù)位(WP),其它7位均置為0。在任何的對(duì)時(shí)鐘和RAM的寫(xiě)操作之前,WP位必須為0。當(dāng)WP位為1時(shí),寫(xiě)保護(hù)位防止對(duì)任一寄存器的寫(xiě)操作。</p><p> ?、贒S1302有
32、關(guān)RAM的地址</p><p> DS1302中附加31字節(jié)靜態(tài)RAM的地址如圖4所示。</p><p><b> 圖4</b></p><p> ?、?DS1302的工作模式寄存器</p><p> 所謂突發(fā)模式是指一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。突發(fā)模式寄存器如圖5所示。</p><
33、p><b> 圖5</b></p><p> ?、艽送?,DS1302還有充電寄存器等。</p><p><b> 2 讀寫(xiě)時(shí)序說(shuō)明</b></p><p> DS1302是SPI總線驅(qū)動(dòng)方式。它不僅要向寄存器寫(xiě)入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。</p><p> 要想與DS1302
34、通信,首先要先了解DS1302的控制字。DS1302的控制字如圖6。</p><p> 圖6 控制字(即地址及命令字節(jié))</p><p> 控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫(xiě)入到DS1302中。</p><p> 位6:如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);</p><p> 位
35、5至位1(A4~A0):指示操作單元的地址;</p><p> 位0(最低有效位):如為0,表示要進(jìn)行寫(xiě)操作,為1表示進(jìn)行讀操作。</p><p> 控制字總是從最低位開(kāi)始輸出。在控制字指令輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫(xiě)入DS1302,數(shù)據(jù)輸入從最低位(0位)開(kāi)始。同樣,在緊跟8位的控制字指令后的下一個(gè)SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位
36、到最高位。數(shù)據(jù)讀寫(xiě)時(shí)序如圖7 。</p><p> 圖7 數(shù)據(jù)讀寫(xiě)時(shí)序</p><p> 具體操作見(jiàn)驅(qū)動(dòng)程序。</p><p> 3.3LCD顯示驅(qū)動(dòng)電路</p><p> 字符型液晶顯示模塊是一種專(zhuān)門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長(zhǎng)沙太陽(yáng)人電子有限公司的16
37、02字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實(shí)物如圖10-53:</p><p> 圖10-53 1602字符型液晶顯示器實(shí)物圖</p><p> 10.8.2.1 1602LCD的基本參數(shù)及引腳功能</p><p> 1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差
38、別,兩者尺寸差別如下圖10-54所示:</p><p> 圖10-54 1602LCD尺寸圖</p><p> 1602LCD主要技術(shù)參數(shù):</p><p> 顯示容量:16×2個(gè)字符</p><p> 芯片工作電壓:4.5—5.5V</p><p> 工作電流:2.0mA(5.0V)</p&
39、gt;<p> 模塊最佳工作電壓:5.0V</p><p> 字符尺寸:2.95×4.35(W×H)mm</p><p><b> 引腳功能說(shuō)明</b></p><p> 1602LCD采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各引腳接口說(shuō)明如表10-13所示:</p><p
40、> 表10-13:引腳接口說(shuō)明表</p><p> 第1腳:VSS為地電源。</p><p> 第2腳:VDD接5V正電源。</p><p> 第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。</p><p> 第4腳:RS為
41、寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p> 第5腳:R/W為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。</p><p> 第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。<
42、/p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光源正極。</p><p> 第16腳:背光源負(fù)極。</p><p> 10.8.2.3 1602LCD的指令說(shuō)明及時(shí)序</p><p> 1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表10-14所示:</p&g
43、t;<p><b> 4軟件設(shè)計(jì)</b></p><p> 4.1DS1302時(shí)間產(chǎn)生軟件設(shè)計(jì)</p><p> /************************************</p><p><b> DS1302模塊</b></p><p> ********
44、****************************/</p><p> //地址數(shù)據(jù)發(fā)送子程序</p><p> void w1302sj(unsigned char addr,unsigned char dat)</p><p><b> {</b></p><p> unsigned char i,te
45、mp;</p><p> rst1302=0;</p><p> sclk1302=0; </p><p> rst1302=1;</p><p> for (i=8;i>0;i--)</p><p><b> {</b>
46、</p><p> sclk1302=0;</p><p> temp=addr;</p><p> io1302=(bit)(temp&0x01);</p><p><b> addr>>=1;</b></p><p> sclk1302=1;</p>
47、<p><b> }</b></p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> sclk1302=0;</p><p><b> temp=dat;</b></p><p
48、> io1302=(bit)(temp&0x01);</p><p><b> dat>>=1;</b></p><p> sclk1302=1;</p><p><b> }</b></p><p> rst1302=0;</p><p>
49、;<b> }</b></p><p><b> //數(shù)據(jù)讀取子程序</b></p><p> unsigned char r1302sj(unsigned char addr)</p><p><b> {</b></p><p> unsigned char i,
50、temp,dat1;</p><p> rst1302=0;</p><p> sclk1302=0;</p><p> rst1302=1;</p><p> for (i=8;i>0;i--)</p><p><b> { </b></p><p>
51、sclk1302=0;</p><p> temp=addr;</p><p> io1302=(bit)(temp&0x01);</p><p><b> addr>>=1;</b></p><p> sclk1302=1; //上升沿寫(xiě)入</p><p>&
52、lt;b> }</b></p><p> for (i=8;i>0;i--)</p><p> { sclk1302=0;</p><p> ACC>>=1; //一定要加在前邊才行,最后一次io輸出直接輸?shù)紸CC.7上 </p><p> ACC7=io1302; //仍然是上升沿輸
53、出</p><p> sclk1302=1; </p><p><b> }</b></p><p> rst1302=0;</p><p><b> dat1=ACC;</b></p><p> return(dat1);</p><p&g
54、t;<b> }</b></p><p><b> //初始化1302</b></p><p> void c1302cs(void)</p><p><b> {</b></p><p> w1302sj(xie_baohu,0x00); //允許寫(xiě)</p&g
55、t;<p> w1302sj(xie_miao,0x00); //開(kāi)始計(jì)時(shí)</p><p><b> }</b></p><p> 4.2數(shù)據(jù)處理顯示程序設(shè)計(jì)</p><p> /************************************</p><p><b> LCD1
56、602模塊</b></p><p> ************************************/</p><p><b> //@寫(xiě)命令子程序</b></p><p> void w1602zl(uchar zl)</p><p><b> {</b></p
57、><p> rs1602=0; //寫(xiě)命令時(shí)rs1602=0;</p><p><b> P0=zl;</b></p><p><b> delay(1);</b></p><p> e1602=1; //拉高使能端</p><p><b> delay
58、(1);</b></p><p> e1602=0; //降低使能端,下降沿寫(xiě)入數(shù)據(jù)</p><p><b> }</b></p><p><b> //@寫(xiě)數(shù)據(jù)子程序</b></p><p> void w1602sj(uchar sj)</p><p&
59、gt;<b> {</b></p><p> rs1602=1; //寫(xiě)數(shù)據(jù)時(shí)rs1602=1;</p><p><b> P0=sj;</b></p><p><b> delay(1);</b></p><p> e1602=1; //拉高使能端<
60、/p><p><b> delay(1);</b></p><p> e1602=0; //降低使能端,下降沿寫(xiě)入數(shù)據(jù)</p><p><b> }</b></p><p><b> //年月日顯示程序</b></p><p> void w
61、nyr(uchar dz,uchar sj)</p><p><b> {</b></p><p> uchar ge,shi;</p><p><b> ge=sj%10;</b></p><p> shi=sj/10;</p><p> w1602zl(one+
62、dz); //第一行首地址+要寫(xiě)入的地址</p><p> w1602sj(0x30+shi);</p><p> w1602sj(0x30+ge); //0的顯示碼為0x30</p><p><b> }</b></p><p><b> //時(shí)分秒顯示程序</b></p>
63、<p> void wsfm(uchar dz,uchar sj)</p><p><b> {</b></p><p> uchar ge,shi;</p><p><b> ge=sj%10;</b></p><p> shi=sj/10;</p><
64、p> w1602zl(tw0+dz); //第二行首地址+要寫(xiě)入的地址</p><p> w1602sj(0x30+shi);</p><p> w1602sj(0x30+ge);</p><p><b> }</b></p><p><b> //星期天寫(xiě)入函數(shù)</b><
65、/p><p> void wxq(uchar xq)</p><p><b> {</b></p><p> w1602zl(one+0x0f);</p><p> w1602sj(0x30+xq);</p><p><b> }</b></p><
66、p> //LCD初始化函數(shù)</p><p> void lcdcs()</p><p><b> {</b></p><p><b> uchar k;</b></p><p> w1602zl(0x38); //16*2,5*7點(diǎn)陣,8位數(shù)據(jù)</p><p&g
67、t; w1602zl(0x0c); //開(kāi)顯示,不顯示光標(biāo),不閃爍</p><p> w1602zl(0x06); //顯示光標(biāo),光標(biāo)右移</p><p> w1602zl(0x01); //清屏</p><p> w1602zl(one); //寫(xiě)入第一行不改變的部分</p><p> for (k=0;k<16;
68、k++)</p><p><b> {</b></p><p> w1602sj(xian1[k]);</p><p><b> }</b></p><p> w1602zl(tw0+4); //寫(xiě)入第二行不改變的部分</p><p> for (k=0;k<
69、;8;k++)</p><p><b> {</b></p><p> w1602sj(xian2[k]);</p><p><b> }</b></p><p><b> }</b></p><p> //LCD1初始化函數(shù)</p>
70、;<p> void lcdcs1()</p><p><b> {</b></p><p><b> uchar k;</b></p><p> w1602zl(0x38); //16*2,5*7點(diǎn)陣,8位數(shù)據(jù)</p><p> w1602zl(0x0c); //開(kāi)顯示
71、,不顯示光標(biāo),不閃爍</p><p> w1602zl(0x06); //顯示光標(biāo),光標(biāo)右移</p><p> w1602zl(0x01); //清屏</p><p> w1602zl(one); //寫(xiě)入第一行不改變的部分</p><p> for (k=0;k<9;k++)</p><p>&
72、lt;b> {</b></p><p> w1602sj(xian3[k]);</p><p><b> }</b></p><p> w1602zl(tw0+4); //寫(xiě)入第二行不改變的部分</p><p> for (k=0;k<8;k++)</p><p&g
73、t;<b> {</b></p><p> w1602sj(xian2[k]);</p><p><b> }</b></p><p><b> }</b></p><p><b> 5 系統(tǒng)操作說(shuō)明</b></p><p&
74、gt; 最后成型的萬(wàn)年歷操作比較怕簡(jiǎn)單,總共7個(gè)按鍵,分三個(gè)模塊,正常調(diào)時(shí)有功能鍵,加減鍵;定時(shí)模式有三個(gè)鍵,分別是所調(diào)對(duì)象,以及對(duì)所條對(duì)象的加減鍵;復(fù)位模式有一個(gè)復(fù)位鍵。此外還有一個(gè)調(diào)節(jié)液晶顯示亮度的可調(diào)電阻。界面比較簡(jiǎn)單易懂。</p><p><b> 6 結(jié)束語(yǔ)</b></p><p> 課程設(shè)計(jì)的目的并不只是為了讓我們做出一個(gè)簡(jiǎn)單的硬件出來(lái),我們首先要
75、完善我們的軟件系統(tǒng),這樣做出來(lái)的硬件才會(huì)更見(jiàn)完美。當(dāng)然,完善的軟件首先建立在我們對(duì)硬件的了解。軟硬件結(jié)合,加上過(guò)硬的焊工,我相信,我們做出來(lái)的課程設(shè)計(jì)一定最完美。課程設(shè)計(jì)讓我們更加貼近生活,了解我們所學(xué)的知識(shí)在生活中的應(yīng)用,增加學(xué)習(xí)的興趣,同時(shí)吧我們這一學(xué)期所學(xué)的知識(shí)做一個(gè)總結(jié),也為我們下學(xué)期所要學(xué)的嵌入式打下基礎(chǔ)。</p><p><b> 7 參考文獻(xiàn)</b></p>&
76、lt;p> 1.鄭峰等編著.51單片機(jī)應(yīng)用系統(tǒng)典型開(kāi)發(fā)大全(第二版).[M]中國(guó)鐵道出版社,2011.3</p><p> 2.張毅剛,彭喜元編著.單片機(jī)原理與應(yīng)用設(shè)計(jì).[M]北京:電子工業(yè)出版社,2008.4</p><p> 3.張義和等編著.例說(shuō)51單片機(jī)(C語(yǔ)言版)(第3版).[M]北京:人民郵電出版社,2010.6</p><p><b&
77、gt; 8 系統(tǒng)原理圖</b></p><p><b> 附錄1</b></p><p><b> 程序清單</b></p><p><b> //聲明變量</b></p><p> #include <reg51.h></p>
78、<p> #define uint unsigned int</p><p> #define uchar unsigned char </p><p> #define one 0x80 </p><p> #define tw0 0xc0</p><p> #define du_miao 0x81</p>
79、<p> #define du_fen 0x83</p><p> #define du_shi 0x85</p><p> #define xie_miao 0x80</p><p> #define xie_fen 0x82</p><p> #define xie_shi 0x84</p><
80、p> #define xie_baohu 0x8e</p><p> uchar miao,fen,shi,ri,yue,nian,xingqi;</p><p> uchar dmiao,dfen,dshi,Count;</p><p> uchar code xian1[]={"20 - - week"};</p&
81、gt;<p> uchar code xian2[]={" : : "};</p><p> uchar code xian3[]={"Ding Shi!"};</p><p> sbit rs1602=P2^0;</p><p> sbit e1602=P2^1;</p><p
82、> sbit rst1302=P2^2;</p><p> sbit sclk1302=P2^4;</p><p> sbit io1302=P2^3;</p><p> sbit gongneng=P1^0;</p><p> sbit zeng=P1^1;</p><p> sbit jian=P
83、1^2;</p><p> sbit dingshi=P1^3;</p><p> sbit zeng1=P1^4;</p><p> sbit jian1=P1^5;</p><p> sbit ACC7=ACC^7;</p><p> //聲明函數(shù) 主程序在子函數(shù)上邊的話,就應(yīng)該聲明函數(shù);在子函數(shù)下邊的
84、話不需要聲明函數(shù)</p><p> void lcdcs(); //LCD初始化</p><p> void lcdcs1(); //LCD初始化1</p><p> void w1602zl(uchar zl); //LCD寫(xiě)指令</p><p&
85、gt; void w1602sj(uchar sj); //LCD寫(xiě)數(shù)據(jù)</p><p> void wsfm(uchar dz,uchar sj);//寫(xiě)時(shí)分秒</p><p> void wnyr(uchar dz,uchar sj); //寫(xiě)年月日</p><p> void wxq(uchar xq);//寫(xiě)星期<
86、/p><p> void c1302cs(); //DS1302初始化</p><p> void w1302zj(uchar dat); //寫(xiě)1302指令</p><p> void w1302sj(uchar dz,uchar dat); //寫(xiě)1302數(shù)據(jù)</p><p> uchar r1302zj();
87、 //讀1302指令</p><p> uchar r1302sj(uchar); //讀1302數(shù)據(jù)</p><p> void t0();</p><p> void t_0();</p><p> void keyscan();</p><p> void keyscan1();</
88、p><p> uchar bcdz16(uchar bcd);</p><p> uchar s16zbcd(uchar s16);</p><p> void delay(uint x);</p><p> sbit xiang=P2^7;</p><p> void Delay_xMs(unsigned in
89、t x); //控制頻率常數(shù)</p><p><b> //主函數(shù)</b></p><p><b> main()</b></p><p><b> {</b></p><p><b> uchar i;</b></p><p&
90、gt;<b> lcdcs();</b></p><p> c1302cs();</p><p><b> t0();</b></p><p><b> while(1)</b></p><p><b> { </b></p>&
91、lt;p> keyscan();</p><p> keyscan1();</p><p><b> //半點(diǎn)報(bào)時(shí)</b></p><p> if (fen==30&&miao==0)</p><p><b> {</b></p><p>
92、xiang=~xiang;</p><p> delay(400);</p><p> xiang=~xiang;</p><p> delay(300);</p><p><b> }</b></p><p><b> //整點(diǎn)報(bào)時(shí)</b></p>
93、<p> if (fen==0&&miao==0)</p><p><b> {</b></p><p> xiang=~xiang;</p><p> delay(500);</p><p> xiang=~xiang;</p><p> delay(300
94、);</p><p><b> }</b></p><p><b> //鬧鐘響鈴</b></p><p> if (shi==dshi&&fen==dfen&&miao==0)</p><p><b> {</b></p>
95、<p> for (i=0;i<=10;i++)</p><p><b> {</b></p><p> xiang=~xiang;</p><p> delay(500);</p><p> xiang=~xiang;</p><p> delay(300);<
96、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /***************************
97、*********</p><p><b> LCD1602模塊</b></p><p> ************************************/</p><p><b> //@寫(xiě)命令子程序</b></p><p> void w1602zl(uchar zl)<
98、/p><p><b> {</b></p><p> rs1602=0; //寫(xiě)命令時(shí)rs1602=0;</p><p><b> P0=zl;</b></p><p><b> delay(1);</b></p><p> e1602=1;
99、 //拉高使能端</p><p><b> delay(1);</b></p><p> e1602=0; //降低使能端,下降沿寫(xiě)入數(shù)據(jù)</p><p><b> }</b></p><p><b> //@寫(xiě)數(shù)據(jù)子程序</b></p><p&
100、gt; void w1602sj(uchar sj)</p><p><b> {</b></p><p> rs1602=1; //寫(xiě)數(shù)據(jù)時(shí)rs1602=1;</p><p><b> P0=sj;</b></p><p><b> delay(1);</b>&
101、lt;/p><p> e1602=1; //拉高使能端</p><p><b> delay(1);</b></p><p> e1602=0; //降低使能端,下降沿寫(xiě)入數(shù)據(jù)</p><p><b> }</b></p><p><b> //年
102、月日顯示程序</b></p><p> void wnyr(uchar dz,uchar sj)</p><p><b> {</b></p><p> uchar ge,shi;</p><p><b> ge=sj%10;</b></p><p>
103、shi=sj/10;</p><p> w1602zl(one+dz); //第一行首地址+要寫(xiě)入的地址</p><p> w1602sj(0x30+shi);</p><p> w1602sj(0x30+ge); //0的顯示碼為0x30</p><p><b> }</b></p><
104、p><b> //時(shí)分秒顯示程序</b></p><p> void wsfm(uchar dz,uchar sj)</p><p><b> {</b></p><p> uchar ge,shi;</p><p><b> ge=sj%10;</b><
105、/p><p> shi=sj/10;</p><p> w1602zl(tw0+dz); //第二行首地址+要寫(xiě)入的地址</p><p> w1602sj(0x30+shi);</p><p> w1602sj(0x30+ge);</p><p><b> }</b></p>
106、<p><b> //星期天寫(xiě)入函數(shù)</b></p><p> void wxq(uchar xq)</p><p><b> {</b></p><p> w1602zl(one+0x0f);</p><p> w1602sj(0x30+xq);</p>&l
107、t;p><b> }</b></p><p> //LCD初始化函數(shù)</p><p> void lcdcs()</p><p><b> {</b></p><p><b> uchar k;</b></p><p> w1602zl
108、(0x38); //16*2,5*7點(diǎn)陣,8位數(shù)據(jù)</p><p> w1602zl(0x0c); //開(kāi)顯示,不顯示光標(biāo),不閃爍</p><p> w1602zl(0x06); //顯示光標(biāo),光標(biāo)右移</p><p> w1602zl(0x01); //清屏</p><p> w1602zl(one); //寫(xiě)入第一行不
109、改變的部分</p><p> for (k=0;k<16;k++)</p><p><b> {</b></p><p> w1602sj(xian1[k]);</p><p><b> }</b></p><p> w1602zl(tw0+4); //寫(xiě)入
110、第二行不改變的部分</p><p> for (k=0;k<8;k++)</p><p><b> {</b></p><p> w1602sj(xian2[k]);</p><p><b> }</b></p><p><b> }</b&g
111、t;</p><p> //LCD1初始化函數(shù)</p><p> void lcdcs1()</p><p><b> {</b></p><p><b> uchar k;</b></p><p> w1602zl(0x38); //16*2,5*7點(diǎn)陣,8位數(shù)
112、據(jù)</p><p> w1602zl(0x0c); //開(kāi)顯示,不顯示光標(biāo),不閃爍</p><p> w1602zl(0x06); //顯示光標(biāo),光標(biāo)右移</p><p> w1602zl(0x01); //清屏</p><p> w1602zl(one); //寫(xiě)入第一行不改變的部分</p><p>
113、; for (k=0;k<9;k++)</p><p><b> {</b></p><p> w1602sj(xian3[k]);</p><p><b> }</b></p><p> w1602zl(tw0+4); //寫(xiě)入第二行不改變的部分</p><p
114、> for (k=0;k<8;k++)</p><p><b> {</b></p><p> w1602sj(xian2[k]);</p><p><b> }</b></p><p><b> }</b></p><p> /
115、************************************</p><p><b> DS1302模塊</b></p><p> ************************************/</p><p> //地址數(shù)據(jù)發(fā)送子程序</p><p> void w1302sj(unsi
116、gned char addr,unsigned char dat)</p><p><b> {</b></p><p> unsigned char i,temp;</p><p> rst1302=0;</p><p> sclk1302=0; &l
117、t;/p><p> rst1302=1;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> sclk1302=0;</p><p> temp=addr;</p><p> io1302=(bit)(
118、temp&0x01);</p><p><b> addr>>=1;</b></p><p> sclk1302=1;</p><p><b> }</b></p><p> for (i=8;i>0;i--)</p><p><b&g
119、t; {</b></p><p> sclk1302=0;</p><p><b> temp=dat;</b></p><p> io1302=(bit)(temp&0x01);</p><p><b> dat>>=1;</b></p>&
120、lt;p> sclk1302=1;</p><p><b> }</b></p><p> rst1302=0;</p><p><b> }</b></p><p><b> //數(shù)據(jù)讀取子程序</b></p><p> unsign
121、ed char r1302sj(unsigned char addr)</p><p><b> {</b></p><p> unsigned char i,temp,dat1;</p><p> rst1302=0;</p><p> sclk1302=0;</p><p> rst
122、1302=1;</p><p> for (i=8;i>0;i--)</p><p><b> { </b></p><p> sclk1302=0;</p><p> temp=addr;</p><p> io1302=(bit)(temp&0x01);</p&g
123、t;<p><b> addr>>=1;</b></p><p> sclk1302=1; //上升沿寫(xiě)入</p><p><b> }</b></p><p> for (i=8;i>0;i--)</p><p> { sclk1302=0;
124、</p><p> ACC>>=1; //一定要加在前邊才行,最后一次io輸出直接輸?shù)紸CC.7上 </p><p> ACC7=io1302; //仍然是上升沿輸出</p><p> sclk1302=1; </p><p><b> }</b></p><p>
125、 rst1302=0;</p><p><b> dat1=ACC;</b></p><p> return(dat1);</p><p><b> }</b></p><p><b> //初始化1302</b></p><p> void
126、c1302cs(void)</p><p><b> {</b></p><p> w1302sj(xie_baohu,0x00); //允許寫(xiě)</p><p> w1302sj(xie_miao,0x00); //開(kāi)始計(jì)時(shí)</p><p><b> }</b></p><
127、;p> /************************************</p><p><b> 按鍵處理子程序</b></p><p> ************************************/</p><p> /////////////////////////////////////調(diào)時(shí)間<
128、;/p><p> /////////////////////////////////</p><p> void keyscan()</p><p><b> {</b></p><p> uchar keycs; </p><p> if (gongneng==0)</p>
129、<p><b> {</b></p><p><b> delay(5);</b></p><p> if (gongneng==0)</p><p><b> {</b></p><p> while (!gongneng); //功能鍵按下,keyc
130、s加1</p><p><b> keycs++;</b></p><p> switch (keycs)</p><p><b> {</b></p><p><b> case 1:</b></p><p> w1602zl(tw0+0x0
131、b); //寫(xiě)入光標(biāo)位置</p><p> w1602zl(0x0f); //設(shè)置光標(biāo)閃爍,則在關(guān)閉之前都是閃爍的</p><p> //按下功能鍵1次時(shí),是為了調(diào)節(jié)秒,所以讓1302時(shí)鐘不再走等待調(diào)整,且停止刷新時(shí)間</p><p> TR0=0; //功能鍵按下后停止刷新時(shí)間</p>
132、;<p> w1302sj(0x8e,0x00); //允許寫(xiě)1302</p><p> w1302sj(0x80,0x80|s16zbcd(miao));//停止1302時(shí)鐘,并保存此時(shí)的秒值</p><p><b> break;</b></p><p> //按下功能鍵2次或2次以上時(shí),1302時(shí)鐘繼續(xù)走,
133、定時(shí)器繼續(xù)刷新時(shí)間</p><p> case 2:w1602zl(tw0+8);break;</p><p> case 3:w1602zl(tw0+5);break;</p><p> case 4:w1602zl(one+0x0f);break;</p><p> case 5:w1602zl(one+0x09);break;&
134、lt;/p><p> case 6:w1602zl(one+0x06);break;</p><p> case 7:w1602zl(one+0x03);break;</p><p> case 8:w1602zl(0x0c); //設(shè)置光標(biāo)不閃爍</p><p> w1302sj(0x80,0x00|s16zbcd(mi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)報(bào)告--電子萬(wàn)年歷
- 電子萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 電子萬(wàn)年歷課程設(shè)計(jì) (2)
- proteus課程設(shè)計(jì)--電子萬(wàn)年歷
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 數(shù)字萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告-萬(wàn)年歷
- java萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告---萬(wàn)年歷
- 萬(wàn)年歷系統(tǒng)課程設(shè)計(jì)報(bào)告
- c語(yǔ)音電子萬(wàn)年歷課程設(shè)計(jì)
- 多功能電子萬(wàn)年歷課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論