版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 課程名稱 單片機(jī)與微機(jī)原理課程設(shè)計(jì) </p><p> 題目名稱 LCD顯示的電子鐘 </p><p> 2013年01月07日</p><p> 一、課程設(shè)計(jì)(論文)的內(nèi)容</p>&
2、lt;p> 以89C52單片機(jī)控制的時鐘,在LCD顯示器上顯示當(dāng)前的時間。設(shè)計(jì)要求: </p><p> 使用文字型LCD顯示器顯示當(dāng)前時間。</p><p> 設(shè)計(jì)能支持年月日星期時分秒的時鐘,時鐘要具有時間調(diào)整功能。</p><p> 用4個功能鍵操作來設(shè)置當(dāng)前時間。功能鍵K1~K4功能如下。</p><p> (1)K1
3、-改變時間。</p><p><b> ?。?)K2-增加。</b></p><p><b> ?。?)K3-減少。</b></p><p><b> ?。?)K4-清零。</b></p><p> 二、課程設(shè)計(jì)(論文)的要求與數(shù)據(jù)</p><p>
4、 1.總體設(shè)計(jì)方案、系統(tǒng)原理框圖;</p><p> 2.硬件電路各部分的電路原理圖;</p><p><b> 3.程序流程圖;</b></p><p><b> 4.源程序;</b></p><p><b> 5.結(jié)論</b></p><p>
5、; 三、課程設(shè)計(jì)(論文)應(yīng)完成的工作</p><p> 1.分析任務(wù)書,給出總體設(shè)計(jì)方案,畫出系統(tǒng)原理框圖;</p><p> 2.硬件電路設(shè)計(jì),給出主要電路原理圖;</p><p> 3.軟件設(shè)計(jì),給出程序流程圖,完成程序設(shè)計(jì)和軟件調(diào)試;</p><p><b> 4.完成調(diào)試;</b></p>
6、<p> 5.完成課程設(shè)計(jì)報告的撰寫,及時上交課程設(shè)計(jì)報告。</p><p> 四、課程設(shè)計(jì)(論文)進(jìn)程安排</p><p> 五、應(yīng)收集的資料及主要參考文獻(xiàn)</p><p> [1]張毅剛,彭喜源,譚曉昀.MCS-5系列單片機(jī)實(shí)用設(shè)計(jì)[M].哈爾濱工業(yè)大學(xué)出版社, 2008.</p><p> [2]胡漢才.單片機(jī)原理
7、及接口技術(shù)[M].清華大學(xué)出版社,2004.</p><p> [3]何立民.MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006. </p><p> [4]楊亭.電子CAD職業(yè)技能鑒定教程[M].廣東科技出版社,2007.</p><p> 發(fā)出任務(wù)書日期: 2013年 1月07 日 指導(dǎo)教師
8、簽名:</p><p> 計(jì)劃完成日期: 2013年 01 月23 日 教學(xué)單位責(zé)任人簽章:</p><p><b> 目錄</b></p><p> 1 系統(tǒng)需求分析1</p><p> 1.1 電子時鐘研究的背景和意義1</p><p> 1.2 系統(tǒng)實(shí)用功能分析1&
9、lt;/p><p> 2 設(shè)計(jì)要求與方案2</p><p> 2.1 設(shè)計(jì)要求2</p><p> 2.1.1 基本要求2</p><p> 2.1.2發(fā)揮部分2</p><p> 2.2 系統(tǒng)基本方案選擇2</p><p> 2.2.1 芯片的選擇2</p>
10、<p> 2.2.2 顯示模塊選擇方案2</p><p> 2.2.3 時鐘信號的選擇方案3</p><p> 2.3 電路設(shè)計(jì)最終方案決定3</p><p> 3 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)3</p><p> 3.1 數(shù)字鐘電路設(shè)計(jì)框圖3</p><p> 3.2 系統(tǒng)硬件概述4<
11、/p><p> 3.3 硬件電路結(jié)構(gòu)的設(shè)計(jì)4</p><p> 3.3.1 單片機(jī)主控制模塊的設(shè)計(jì)4</p><p> 3.3.2 顯示模塊的設(shè)計(jì)4</p><p> 3.3.3 LCD原理說明5</p><p> 3.3.4 開關(guān)模塊說明6</p><p> 4 系統(tǒng)的軟
12、件設(shè)計(jì)7</p><p> 4.1 程序流程框圖7</p><p> 4.2 LCD的初始化與及顯示程序7</p><p><b> 5 系統(tǒng)調(diào)試9</b></p><p><b> 5.1軟件調(diào)試9</b></p><p><b> 5.2硬件
13、調(diào)試9</b></p><p><b> 參考文獻(xiàn)10</b></p><p><b> 附錄11</b></p><p><b> 1 系統(tǒng)需求分析</b></p><p> 1.1 電子時鐘研究的背景和意義</p><p>
14、; 20實(shí)際末,電子技術(shù)獲得了飛速的發(fā)展。再起推動下現(xiàn)代電子產(chǎn)品幾乎滲透到了社會的哥哥領(lǐng)域,有力的推動和提高的社會生產(chǎn)力的發(fā)展與信息化程度,同時也是現(xiàn)代電子產(chǎn)品性能進(jìn)一步提升,產(chǎn)品的更新?lián)Q代節(jié)奏譜也越來越快。時間對人們來說是那么的寶貴,工作的忙碌性和繁雜容易使人們忘記當(dāng)前的時間。然而遇到重大事情的時候,一旦忘記時間,就會給自己或者是他人造成很大的麻煩。平時我們要求上班準(zhǔn)時,約會或者召開會議必然要提及時間、火車要準(zhǔn)點(diǎn)到達(dá),航班要準(zhǔn)時起飛
15、,工業(yè)生產(chǎn)中,很多環(huán)節(jié)都需要時間來確定工序替換時刻。所以說能隨時準(zhǔn)確的指導(dǎo)時間并利用時間,是我們生活中必不可少的。</p><p> 想知道時間,手表當(dāng)然是很好的選擇,但是在忙碌當(dāng)中,我們還需要一個“助理”時不時的給我們體形式將,所以,計(jì)時器最好能夠用有一個定時系統(tǒng),隨時提醒容易忘記時間的人。最早能夠定時、寶石的時鐘屬于機(jī)械式鐘表,但這種時鐘受到機(jī)械結(jié)構(gòu)、動力合體技的限制,在功能性能以及在造價上都沒有辦法與電子
16、時鐘相比。</p><p> 電子時鐘是采用電子電路實(shí)現(xiàn)對時、分、秒進(jìn)行數(shù)字顯示的即使裝置,廣泛應(yīng)用月個人家庭、車站、碼頭辦公室等公共場所,成為人們?nèi)粘I罨顒又胁豢缮俚谋仨毱贰S捎跀?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛使用,是的數(shù)字時鐘的精度遠(yuǎn)遠(yuǎn)查過老師鐘表,鐘表的數(shù)字化跟人們生產(chǎn)生活帶來了極大的方便,而且大大的擴(kuò)展了鐘表原先的時鐘功能。諸如整點(diǎn)提示、定時報警、定時廣播、自動啟閉路燈,定時開關(guān)烘箱、同多動力
17、設(shè)備、甚至各種定時電氣的自動啟動等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。</p><p> 1.2 系統(tǒng)實(shí)用功能分析</p><p> 單片機(jī)模塊中最常見的是數(shù)字時鐘,數(shù)字時鐘是一種用單片機(jī)原理實(shí)現(xiàn)時、分、秒計(jì)時的裝置,與機(jī)械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。</p>
18、<p> 數(shù)字時鐘是采用單片機(jī)原理實(shí)現(xiàn)對.年、月、日、周、時、分、秒,數(shù)字顯示及到時提醒的計(jì)時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴(kuò)展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、
19、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。</p><p><b> 2 設(shè)計(jì)要求與方案</b></p><p><b> 2.1 設(shè)計(jì)要求</b></p><p> 2.1.1 基本要求</p>&
20、lt;p> 1 設(shè)計(jì)能支持年月日星期時分秒的時鐘,時鐘要具有時間調(diào)整功能。</p><p><b> 2.1.2發(fā)揮部分</b></p><p> 1 鬧鐘時間精度。</p><p> 2 時鐘功耗小于0.5MA/5V。</p><p> 2.2 系統(tǒng)基本方案選擇</p><p&
21、gt; 本時鐘的設(shè)計(jì)具體有兩種方法。一是通過單純的數(shù)字電路來實(shí)現(xiàn);二是使用單片機(jī)來控制實(shí)現(xiàn)。本次設(shè)計(jì)選取了較為簡單的單片機(jī)控制;而選擇這一方法后還要進(jìn)行各個芯片的選擇。以下是我在這次設(shè)計(jì)中所用的方案。</p><p> 2.2.1 芯片的選擇</p><p> 采用AT89C52芯片,其為高性能CMOS 8位單片機(jī),該芯片內(nèi)含有4k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM
22、)、128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM)、 32位可編程I/O口線、2個16位定時/計(jì)數(shù)器、6個中斷源、可編程串行UART通道及低功耗空閑和掉電模式,其最大的優(yōu)勢就是AT89C52提供了8K字節(jié)可擦寫Flash閃速存儲器空間、8個中斷源、及256*8字節(jié)內(nèi)部存儲器(RAM),解決了我們對可反復(fù)擦寫的Flash閃速存儲器空間大小與中斷源的不夠問題的擔(dān)心。</p><p> 2.2.2 顯示模塊選擇方案
23、</p><p> 方案一:采用LED數(shù)碼管顯示,顯示較為清楚,但是由于設(shè)計(jì)要求時鐘功能比較重要,因此用如用LED進(jìn)行顯示會使得硬件電路較為復(fù)雜,且在軟件實(shí)現(xiàn)上也較難,為實(shí)現(xiàn)功能帶來了一定的困難。</p><p> 方案二:采用LCD,電路比較簡單,且在軟件設(shè)計(jì)上也相對簡單,具有低功耗功能,能夠滿足設(shè)計(jì)最優(yōu)的要求。因此,在設(shè)計(jì)中我采用的顯示模塊是LCD顯示。</p>&l
24、t;p> 2.2.3 時鐘信號的選擇方案</p><p> 方案一:直接采用單片機(jī)定時計(jì)數(shù)器提供的秒信號,使用程序?qū)崿F(xiàn)年、月、日、周、時、分、秒計(jì)數(shù)。采用此種方案可減少芯片的使用,節(jié)約成本,實(shí)現(xiàn)的時間誤差較小,但程序設(shè)計(jì)較為復(fù)雜。</p><p> 方案二:采用DS1302時鐘芯片實(shí)現(xiàn)時鐘, DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補(bǔ)償
25、的年進(jìn)行計(jì)數(shù),而且精度高,256位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時耗電小于300nA。且硬件電路連接較為簡單,程序設(shè)計(jì)容易實(shí)現(xiàn)。</p><p> 2.3 電路設(shè)計(jì)最終方案決定</p><p> 綜上各方案所述,對此次數(shù)字時鐘的方案選定為: 采用AT89C52作為主控制系統(tǒng); 并由其定時計(jì)數(shù)器提供時鐘; LCD作為顯示電路,來實(shí)現(xiàn)功能。</p&
26、gt;<p> 3 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p> 3.1 數(shù)字鐘電路設(shè)計(jì)框圖</p><p> 圖3-1電路設(shè)計(jì)框圖</p><p> 3.2 系統(tǒng)硬件概述</p><p> 該電路是由AT89C52單片機(jī)為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時鐘電路也由AT89C52單片機(jī)提供,減少芯片
27、的使用,節(jié)約成本,它可以對年、月、日、周、日、時、分、秒進(jìn)行計(jì)時,具有閏年補(bǔ)償功能。時間顯示部份采用液晶LM016L(LCD)。</p><p> 3.3 硬件電路結(jié)構(gòu)的設(shè)計(jì)</p><p> 3.3.1 單片機(jī)主控制模塊的設(shè)計(jì)</p><p> 此次單片機(jī)數(shù)字時鐘的設(shè)計(jì)采用AT89C52為主控制芯片,并由其定時器提供時鐘,利用LCD進(jìn)行時間按顯示。下圖為用P
28、roteus軟件畫的原理圖:</p><p><b> 圖3-2仿真電路圖</b></p><p> 3.3.2 顯示模塊的設(shè)計(jì)</p><p> 如圖(3-4)所示,該設(shè)計(jì)采用液晶顯示裝置即把時鐘信號以及溫度信號同時顯示在液晶顯示器上,不僅結(jié)構(gòu)簡單清新可見,而且省電也容易控制。數(shù)據(jù)的傳輸采用P0口進(jìn)行控制, 其引腳VSS接地,VEE接V
29、CC,RS和RW、E是顯示器的控制端分別由單片機(jī)的引腳P1.0、P1.1、P1.3進(jìn)行控制。而VDD是作為液晶顯示器的灰度調(diào)節(jié)引腳,接一變阻器來改變其顯示的清晰度。</p><p> 圖3-3 LM016L液晶顯示器</p><p> 3.3.3 LCD原理說明</p><p> 在實(shí)際應(yīng)用中,用戶很少直接設(shè)計(jì)LCD顯示器驅(qū)動接口,一般是直接使用專用的LCD
30、顯示驅(qū)動器和LCD顯示模塊。其中,LCD顯示模塊LCM(Liquid Crystal Display Module)是把LCD顯示器、背景光源、線路板和驅(qū)動集成電路等部件構(gòu)成一個整體,作為一個獨(dú)立的部件使用,具有功能較強(qiáng)、易于控制、接口簡單等優(yōu)點(diǎn),在單片機(jī)系統(tǒng)中應(yīng)用較多。其內(nèi)部結(jié)構(gòu)如圖2-8所示。LCD顯示模塊只留一個接口與外部通信。顯示模塊通過這個接口接收顯示命令和數(shù)據(jù),并按指令和數(shù)據(jù)的要求進(jìn)行顯示。外部
31、電路通過這個接口讀出顯示模塊的工作狀態(tài)和顯示數(shù)據(jù)。LCD顯示模塊一般帶有內(nèi)部顯示RAM和字符發(fā)生器,只要輸入ASCII碼就可以進(jìn)行顯示。LCD顯示模塊按功能顯示可分為:LCD段式顯示模塊、LCD字符型顯示模塊、LCD圖形顯示塊三類。液晶顯示器因其功耗低、重量輕而成為便攜式應(yīng)用中的主流顯示技術(shù)。這里所用的字符型液晶模塊是一種用5x7點(diǎn)陣圖形來顯示字符的液晶顯示器,根據(jù)顯示的容量可以分為1行16個字、2行16個字、2行20個字等等。液晶顯示
32、有點(diǎn)振式和字符式兩種,在這里采用字符式液晶顯示器1602來實(shí)現(xiàn)顯示電路的</p><p> 圖3-4 LCD顯示電路</p><p> 由于1602液晶顯示器是本身帶有驅(qū)動模塊的液晶屏,它只有并口線和一些控制線,與單片機(jī)的連接有兩種不同的方法,直接訪問方式和間接訪問方式。直接訪問方式就是微處理器把液晶顯示模塊當(dāng)作存儲器或I/O設(shè)備直接掛在總線上,模塊8位數(shù)據(jù)總線與微處理器的數(shù)據(jù)總線相連
33、,用讀操作 或?qū)懖僮?#160;信號與地址信號共同產(chǎn)生控制信號。</p><p> 3.3.4 開關(guān)模塊說明</p><p> 校時電路主要靠鍵盤來控制。鍵盤是一組按鍵的集合。共有四個按鍵,分別是:改變時間、增加、減少、清零。它是嵌入式計(jì)算機(jī)系統(tǒng)中不可缺少的外圍電路。是實(shí)現(xiàn)人機(jī)對話的紐帶,借助鍵盤可以向計(jì)算機(jī)輸入程序、置數(shù)、邏輯操作以及寫入程序和程序檢測等。</p&g
34、t;<p><b> 4 系統(tǒng)的軟件設(shè)計(jì)</b></p><p> 4.1 程序流程框圖</p><p> 圖4-1 主程序流程</p><p> 4.2 LCD的初始化與及顯示程序</p><p> 1 LCD的初始化</p><p> void ini()/*LCD
35、的初始化函數(shù)</p><p><b> {</b></p><p><b> rw=0;</b></p><p><b> en=0;</b></p><p><b> P1=0xff;</b></p><p> writ
36、eCG();</p><p> write_order(0x38);/*端口寫入</p><p> write_order(0x0c); /*端口寫入</p><p> write_order(0x06); /*端口寫入</p><p> write_order(0x01); /*端口寫入</p><p>&l
37、t;b> }</b></p><p> 2 LCD的顯示程序</p><p> void open()/*定義一個LCD顯示函數(shù)</p><p><b> {</b></p><p> uchar num; /*定義一個無符號的字符變量num</p><p> wr
38、ite_order(0x80+0x10); /*調(diào)用write_order函數(shù) </p><p> for(num=0;opens[num]!='\0';num++)/*循環(huán)打開</p><p><b> {</b></p><p> write_date(opens[num]);</p><p>
39、 delay(20);</p><p><b> }</b></p><p> for(num=0;num<16;num++)/*對端口0x1c寫入</p><p><b> {</b></p><p> write_order(0x1c);</p><p>
40、 delay(200);</p><p><b> }</b></p><p> for(num=0;num<5;num++)/*對端口0x18寫入{</p><p> write_order(0x18);</p><p> delay(200);</p><p><b&g
41、t; }</b></p><p> for(num=0;num<4;num++)/*對端口0x18寫入</p><p><b> {</b></p><p> write_order(0x1c);</p><p> delay(200);</p><p><b&g
42、t; }</b></p><p> for(num=0;num<3;num++)/*對端口0x18寫入</p><p><b> {</b></p><p> write_order(0x18);</p><p> delay(200);</p><p><b&g
43、t; }</b></p><p> for(num=0;num<2;num++)/*對端口0x1c寫入</p><p><b> {</b></p><p> write_order(0x1c);</p><p> delay(200);</p><p><b&g
44、t; }</b></p><p> for(num=0;num<1;num++)/*對端口0x18寫入</p><p><b> {</b></p><p> write_order(0x18);</p><p> delay(100);</p><p><b&g
45、t; }</b></p><p> write_order(0x80+0x53);</p><p> for(num=0;opens1[num]!='\0';num++)/*循環(huán)延時寫入數(shù)據(jù)</p><p> { write_date(opens1[num]); </p><p> delay(500)
46、;}</p><p><b> 5 系統(tǒng)調(diào)試</b></p><p><b> 5.1軟件調(diào)試</b></p><p> 打開程序調(diào)試軟件keil uVision2,在里面新建一個工程,命名為:數(shù)字時鐘.Uv2。接著新建文件,編寫相應(yīng)程序。編寫好的各個程序進(jìn)行編譯與連接。但若是在該過程中,看見我們編好的程序有錯誤,那
47、么就根據(jù)他相應(yīng)的提示來修改錯誤,直到該程序能夠正確編譯為止。</p><p> 能夠正常編譯的程序說明沒有什么問題了,此時我們在點(diǎn)擊相關(guān)欄目,讓它生成我們在硬件仿真時所需要的.HEX文件。到此步,我們的軟件調(diào)試就完成了。</p><p><b> 5.2硬件調(diào)試</b></p><p> 打開Proteus 7 Professional軟
48、件,按照方案所選的電路元件來設(shè)計(jì)整體電路,線把個芯片按一定的位置放好,然后對相應(yīng)的對象進(jìn)行連接,連接時需仔細(xì),以免調(diào)試時發(fā)生錯誤。做好之后把編程所生成的。HEX文件加載到AT89C52中,運(yùn)行仿真軟件,查看運(yùn)行效果。如果運(yùn)行出錯那么就根據(jù)他相應(yīng)的提示來修改錯誤,直到仿真成功為止。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 邊春遠(yuǎn)、王志強(qiáng)
49、,MCS-51單片機(jī)應(yīng)用開發(fā)實(shí)用子程序[M],人民郵電出版社.</p><p> [2] 馬忠梅主編,單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M],北京航空航天大學(xué)出版社.</p><p> [3] 李朝青主編,單片機(jī)原理及接口技術(shù)(第3版)[M], 北京航空航天大學(xué)出版社.</p><p> [4] 譚浩強(qiáng),C語言程序設(shè)計(jì)(第四版)[M], 清華大學(xué)出版.</p&
50、gt;<p> [5] 馬忠梅、張凱,單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M],北京航空航天大學(xué)出版社.</p><p> [6] 廖先蕓,電子技術(shù)實(shí)踐與實(shí)訓(xùn)[M],高等教育出版社.</p><p><b> 附錄</b></p><p><b> 主程序:</b></p><p>
51、 #include<reg52.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit lcdrs=P3^5;</p><p> sbit lcden=P3^4;</p><p>
52、; sbit dula=P2^6;</p><p> sbit wela=P2^7;</p><p> sbit s0 =P1^0;</p><p> sbit s1 =P1^1;</p><p> sbit s2 =P1^2;</p><p> sbit s3 =P1^3;</p>
53、<p> uchar code table1[]="2008-08-28 Wen";</p><p> uchar code table2[]="21:31:30";</p><p> uchar num,t0;</p><p> char sec,minute,hour,day,week,month;<
54、;/p><p> uint year;</p><p> void delay(uchar z)</p><p><b> {</b></p><p> uchar x,y;</p><p> for(x=z;x>0;x--)</p><p> for(y=1
55、10;y>0;y--); </p><p><b> }</b></p><p><b> //寫入指令子函數(shù)</b></p><p> void write_order(uchar order)</p><p><b> {</b></p><
56、;p><b> lcdrs=0;</b></p><p><b> P0=order;</b></p><p><b> delay(2);</b></p><p><b> lcden=1;</b></p><p><b> d
57、elay(2);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p><b> //寫入數(shù)據(jù)子函數(shù)</b></p><p> void write_data(uchar data1)</p&
58、gt;<p><b> {</b></p><p><b> lcdrs=1;</b></p><p><b> P0=data1;</b></p><p><b> delay(2);</b></p><p><b>
59、lcden=1;</b></p><p><b> delay(2);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p><b> //初始化子函數(shù)</b></p&g
60、t;<p> void init()</p><p><b> {</b></p><p><b> sec=0;</b></p><p><b> minute=0;</b></p><p><b> hour=0;</b><
61、;/p><p><b> week=0;</b></p><p><b> day=1;</b></p><p><b> month=1;</b></p><p> year=2008;</p><p> TMOD=0x01;</p>
62、<p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=1;</b&
63、gt;</p><p><b> wela=0;</b></p><p><b> dula=0;</b></p><p><b> lcden=0;</b></p><p> write_order(0x38); //設(shè)置顯示模式</p>
64、<p> write_order(0x0c); //開顯示開光標(biāo),光標(biāo)閃爍</p><p> write_order(0x01); //顯示清屏</p><p> write_order(0x06); //光標(biāo)顯示效果</p><p> write_order(0x80); //定
65、義第一行寫入數(shù)據(jù)的地址 </p><p> for(num=0;num<14;num++)</p><p><b> { </b></p><p> write_data(table1[num]);</p><p><b> delay(2);</b></p>
66、<p><b> }</b></p><p> write_order(0x80+0x43); //定義第一行寫入數(shù)據(jù)的地址 </p><p> for(num=0;num<8;num++)</p><p><b> { </b></p><p>
67、 write_data(table2[num]);</p><p><b> delay(2);</b></p><p><b> }</b></p><p><b> }</b></p><p> void change(uchar addr,uchar data1
68、) //改變 時 分 秒 天 月 的子函數(shù) </p><p><b> {</b></p><p> uchar x,y;</p><p> x=data1/10;</p><p> y=data1%10;</p><p> write_order(0x80+addr);</p&g
69、t;<p><b> delay(1);</b></p><p> write_data(0x30+x);</p><p><b> delay(1);</b></p><p> write_data(0x30+y);</p><p><b> delay(1);&
70、lt;/b></p><p><b> }</b></p><p> void yearchange(uchar addr,uint year) //改變年的子函數(shù)</p><p><b> {</b></p><p> uchar x,y,z,w;</p><p&
71、gt; x=year/1000;</p><p> y=year%1000/100;</p><p> z=year%100/10;</p><p> w=year%10;</p><p> write_order(0x80+addr);</p><p><b> delay(1);</b&
72、gt;</p><p> write_data(0x30+x);</p><p><b> delay(1);</b></p><p> write_data(0x30+y);</p><p><b> delay(1);</b></p><p> write_da
73、ta(0x30+z);</p><p><b> delay(1);</b></p><p> write_data(0x30+w);</p><p><b> delay(1);</b></p><p><b> }</b></p><p>
74、 void weekchange(uchar z) //改變周數(shù)的子函數(shù)</p><p><b> {</b></p><p><b> switch(z)</b></p><p><b> {</b></p><p><b> case
75、0:</b></p><p><b> {</b></p><p> write_order(0x80+0x0b);</p><p><b> delay(1);</b></p><p> write_data('M');</p><p>
76、<b> delay(1);</b></p><p> write_data('o');</p><p><b> delay(1);</b></p><p> write_data('n');</p><p> delay(1); </p>
77、<p><b> }</b></p><p><b> break;</b></p><p><b> case 1:</b></p><p><b> {</b></p><p> write_order(0x80+0x0b);&l
78、t;/p><p><b> delay(1);</b></p><p> write_data('T');</p><p><b> delay(1);</b></p><p> write_data('u');</p><p><b
79、> delay(1);</b></p><p> write_data('e');</p><p> delay(1); </p><p><b> }</b></p><p><b> break;</b></p><p>&l
80、t;b> case 2:</b></p><p><b> {</b></p><p> write_order(0x80+0x0b);</p><p><b> delay(1);</b></p><p> write_data('W');</p&
81、gt;<p><b> delay(1);</b></p><p> write_data('e');</p><p><b> delay(1);</b></p><p> write_data('n');</p><p> delay(1)
82、; </p><p><b> }</b></p><p><b> break;</b></p><p><b> case 3:</b></p><p><b> {</b></p><p> write_order
83、(0x80+0x0b);</p><p><b> delay(1);</b></p><p> write_data('T');</p><p><b> delay(1);</b></p><p> write_data('h');</p>
84、<p><b> delay(1);</b></p><p> write_data('u');</p><p> delay(1); </p><p><b> }</b></p><p><b> break;</b></p>
85、;<p><b> case 4:</b></p><p><b> {</b></p><p> write_order(0x80+0x0b);</p><p><b> delay(1);</b></p><p> write_data('F
86、');</p><p><b> delay(1);</b></p><p> write_data('r');</p><p><b> delay(1);</b></p><p> write_data('i');</p><p
87、> delay(1); </p><p><b> }</b></p><p><b> break;</b></p><p><b> case 5:</b></p><p><b> {</b></p><p>
88、; write_order(0x80+0x0b);</p><p><b> delay(1);</b></p><p> write_data('S');</p><p><b> delay(1);</b></p><p> write_data('a'
89、);</p><p><b> delay(1);</b></p><p> write_data('t');</p><p> delay(1); </p><p><b> }</b></p><p><b> break;</
90、b></p><p><b> case 6:</b></p><p><b> {</b></p><p> write_order(0x80+0x0b);</p><p><b> delay(1);</b></p><p> wri
91、te_data('S');</p><p><b> delay(1);</b></p><p> write_data('u');</p><p><b> delay(1);</b></p><p> write_data('n');<
92、;/p><p> delay(1); </p><p><b> }</b></p><p><b> break;</b></p><p> default:break;</p><p><b> }</b></p><p&
93、gt;<b> }</b></p><p> void display()</p><p><b> {</b></p><p> if(t0==20) </p><p><b> {</b></p><p><b> t0=0;&
94、lt;/b></p><p><b> sec++;</b></p><p> if(sec==60)</p><p><b> {</b></p><p><b> sec=0;</b></p><p><b> minute
95、++;</b></p><p> if(minute==60)</p><p><b> {</b></p><p><b> minute=0;</b></p><p><b> hour++;</b></p><p> if(h
96、our==24)</p><p><b> { </b></p><p><b> hour=0;</b></p><p><b> day++;</b></p><p><b> week++;</b></p><p>
97、; if(week==7)</p><p> { </p><p> week=0; </p>
98、<p><b> }</b></p><p> if(day==31)</p><p><b> {</b></p><p><b> day=1;</b></p><p><b> month++;</b></p>&l
99、t;p> if(month==13)</p><p><b> {</b></p><p><b> month=1;</b></p><p><b> year++;</b></p><p> yearchange(0,year);</p>&l
100、t;p><b> }</b></p><p> change(0x05,month);</p><p><b> }</b></p><p> change(0x08,day);</p><p> weekchange(week);</p><p><b
101、> }</b></p><p> change(0x43,hour);</p><p><b> }</b></p><p> change(0x46,minute);</p><p><b> }</b></p><p> change(0x4
102、9,sec); </p><p><b> } </b></p><p><b> }</b></p><p> //鍵盤掃描的子函數(shù),修改時間</p><p> void keyscan()</p><p><b> {</b></p&
103、gt;<p> uchar snum;</p><p><b> if(s0==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s0==0)</b&
104、gt;</p><p><b> {</b></p><p> while(!s0);//松手檢測</p><p><b> snum++;</b></p><p><b> }</b></p><p> if(snum==1) //
105、選定 秒</p><p><b> {</b></p><p><b> TR0=0;</b></p><p> write_order(0x80+0x40+9);</p><p> write_order(0x0f); </p><p><b> }&
106、lt;/b></p><p> if(snum==2) //選定 分</p><p><b> {</b></p><p> write_order(0x80+0x40+6);</p><p> write_order(0x0f); </p><p><b>
107、 }</b></p><p> if(snum==3) //選定 時</p><p><b> {</b></p><p> write_order(0x80+0x40+3);</p><p> write_order(0x0f); </p><p><b&g
108、t; }</b></p><p> if(snum==4) //選定 星期</p><p><b> {</b></p><p> write_order(0x80+0x0b);</p><p> write_order(0x0f); </p><p><b
109、> }</b></p><p> if(snum==5) //選定 天</p><p><b> {</b></p><p> write_order(0x80+0x08);</p><p> write_order(0x0f); </p><p><
110、b> }</b></p><p> if(snum==6) //選定 月</p><p><b> {</b></p><p> write_order(0x80+0x05);</p><p> write_order(0x0f); </p><p><
111、;b> }</b></p><p> if(snum==7) //選定 年</p><p><b> {</b></p><p> write_order(0x80);</p><p> write_order(0x0f); </p><p><b>
112、; }</b></p><p> if(snum==8) //恢復(fù) 計(jì)時</p><p><b> {</b></p><p><b> TR0=1;</b></p><p> write_order(0x0c);</p><p><b>
113、; snum=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(snum!=0) //增加 時 分 秒 天 月 年</p><p><b> {</b></p>&l
114、t;p><b> if(s1==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s1==0)</b></p><p><b> {</
115、b></p><p> while(!s1);</p><p> if(snum==1)</p><p><b> {</b></p><p><b> sec++;</b></p><p> if(sec==60)</p><p>&
116、lt;b> sec=0;</b></p><p> change(0x49,sec);</p><p> write_order(0x80+0x40+9); </p><p><b> }</b></p><p> if(snum==2)</p><p><b&g
117、t; {</b></p><p><b> minute++;</b></p><p> if(minute==60)</p><p><b> minute=0;</b></p><p> change(0x46,minute);</p><p>
118、write_order(0x80+0x40+6);</p><p><b> }</b></p><p> if(snum==3)</p><p><b> {</b></p><p><b> hour++;</b></p><p> if(
119、hour==24)</p><p><b> hour=0;</b></p><p> change(0x43,hour);</p><p> write_order(0x80+0x40+3);</p><p><b> }</b></p><p> if(snum
120、==4)</p><p><b> {</b></p><p><b> week++;</b></p><p> if(week==7)</p><p><b> week=0;</b></p><p> weekchange(week);&
121、lt;/p><p> write_order(0x80+0x0b);</p><p><b> }</b></p><p> if(snum==5)</p><p><b> {</b></p><p><b> day++;</b></p&
122、gt;<p> if(day==31)</p><p><b> day=1;</b></p><p> change(0x08,day);</p><p> write_order(0x80+0x08);</p><p><b> }</b></p><
123、p> if(snum==6)</p><p><b> {</b></p><p><b> month++;</b></p><p> if(month==13)</p><p><b> month=1;</b></p><p>
124、change(0x05,month);</p><p> write_order(0x80+0x05);</p><p><b> }</b></p><p> if(snum==7)</p><p><b> {</b></p><p><b> yea
125、r++;</b></p><p> yearchange(0,year);</p><p> write_order(0x80);</p><p><b> }</b></p><p><b> }</b></p><p><b> }
126、</b></p><p><b> }</b></p><p> if(snum!=0) //減少 時 分 秒 天 月 年</p><p><b> {</b></p><p><b> if(s2==0)</b></p><p&g
127、t;<b> {</b></p><p><b> delay(5);</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p> while(!s2);</p><p
128、> if(snum==1)</p><p><b> {</b></p><p><b> sec--;</b></p><p> if(sec==-1)</p><p><b> sec=59;</b></p><p> change
129、(0x49,sec);</p><p> write_order(0x80+0x40+9); </p><p><b> }</b></p><p> if(snum==2)</p><p><b> {</b></p><p><b> minute--
130、;</b></p><p> if(minute==-1)</p><p> minute=59;</p><p> change(0x46,minute);</p><p> write_order(0x80+0x40+6);</p><p><b> }</b></
131、p><p> if(snum==3)</p><p><b> {</b></p><p><b> hour--;</b></p><p> if(hour==-1)</p><p><b> hour=23;</b></p>&l
132、t;p> change(0x43,hour);</p><p> write_order(0x80+0x40+3);</p><p><b> }</b></p><p> if(snum==4)</p><p><b> {</b></p><p><
133、b> week--;</b></p><p> if(week==-1)</p><p><b> week=6;</b></p><p> weekchange(week);</p><p> write_order(0x80+0x0b);</p><p><b
134、> }</b></p><p> if(snum==5)</p><p><b> {</b></p><p><b> day--;</b></p><p> if(day==0)</p><p><b> day=30;</b
135、></p><p> change(0x08,day);</p><p> write_order(0x80+0x08);</p><p><b> }</b></p><p> if(snum==6)</p><p><b> {</b></p>
136、<p><b> month--;</b></p><p> if(month==0)</p><p><b> month=12;</b></p><p> change(0x05,month);</p><p> write_order(0x80+0x05);</p
137、><p><b> }</b></p><p> if(snum==7)</p><p><b> {</b></p><p><b> year--;</b></p><p> yearchange(0,year);</p><
138、;p> write_order(0x80);</p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p>
139、<b> if(s3==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s3==0)</b></p><p><b> {</b>&l
140、t;/p><p> while(!s3);</p><p><b> sec=0;</b></p><p><b> minute=0;</b></p><p><b> hour=0;</b></p><p><b> week=0;&
141、lt;/b></p><p><b> day=1;</b></p><p><b> month=1;</b></p><p> year=2008;</p><p> change(0x49,sec);</p><p> change(0x46,minut
142、e);</p><p> change(0x43,hour);</p><p> weekchange(week);</p><p> change(0x08,day);</p><p> change(0x05,month);</p><p> yearchange(0,year);</p>
143、<p> write_order(0x0c);</p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p> void main()</p><p><b&
144、gt; {</b></p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> keyscan(); </p><p> disp
145、lay();</p><p><b> } </b></p><p><b> } </b></p><p><b> //定時器0</b></p><p> void time0() interrupt 1</p><p><b>
146、 {</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> t0++;</b></p><p><b> } </b></p><p><b&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能時鐘課程設(shè)計(jì)--智能電子鐘(lcd顯示)
- 電子鐘課程設(shè)計(jì)----數(shù)字電子鐘的設(shè)計(jì)
- eda電子鐘課程設(shè)計(jì)----電子鐘的設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)--多功能電子鐘
- 電子鐘課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)
- eda課程設(shè)計(jì)-電子鐘
- 自動電子鐘課程設(shè)計(jì)
- 數(shù)字電子鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 智能電子鐘
- 數(shù)字電子鐘課程設(shè)計(jì)
- 單片機(jī)電子鐘課程設(shè)計(jì)---數(shù)字電子鐘
- 電子鐘課程設(shè)計(jì)3
- 電子鐘課程設(shè)計(jì)6
- 課程設(shè)計(jì)---數(shù)字電子鐘
- 數(shù)字電子鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)----自動電子鐘
- 數(shù)字電子鐘課程設(shè)計(jì)
- 數(shù)字電子鐘課程設(shè)計(jì)
評論
0/150
提交評論