2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論