

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《單片機(jī)原理及應(yīng)用》</p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 電子記憶鬧鐘</b></p><p> 專 業(yè) : 電氣工程及其自動(dòng)化 </p><p> 班 級(jí) : 10電工一班 </p>
2、<p> 學(xué) 號(hào) : </p><p> 姓 名 : </p><p> 指導(dǎo)教師 : </p><p> 提交日期 : 2013-06-13 </p><p><b> 目錄</b
3、></p><p> 一: 設(shè)計(jì)題目及要求</p><p><b> 二:設(shè)計(jì)方案</b></p><p><b> 2.1 方案論證</b></p><p> 2.2 系統(tǒng)各器件簡(jiǎn)介</p><p> 2.3 各部分電路設(shè)計(jì)仿真</p><
4、;p><b> 2.4 成品圖片秀</b></p><p> 三:電子時(shí)鐘程序設(shè)計(jì)與調(diào)試</p><p> 3.1 程序設(shè)計(jì)思路</p><p> 3.2軟件調(diào)試及解決的問(wèn)題</p><p><b> 3.3 附加功能</b></p><p><b>
5、; 四:課程設(shè)計(jì)總結(jié)</b></p><p><b> 五:參考文獻(xiàn)</b></p><p><b> 附錄:源程序</b></p><p> 一、設(shè)計(jì)任務(wù)和要求。</p><p> 單片機(jī)課程設(shè)計(jì)題目:電子鬧鐘。</p><p> 設(shè)計(jì)要求:1、能實(shí)
6、現(xiàn)時(shí)、分、秒的顯示;</p><p> 2、能實(shí)現(xiàn)12和24小時(shí)制的切換;</p><p><b> 3、能設(shè)定時(shí)間;</b></p><p><b> 4、能設(shè)定鬧鐘。</b></p><p><b> 二:設(shè)計(jì)方案</b></p><p>&
7、lt;b> 2.1 方案論證</b></p><p><b> 顯示電路的設(shè)計(jì)</b></p><p><b> 方案一:</b></p><p> LCD1602液晶屏:LCD1602液晶屏是16*2的字符型液晶,可以顯示英文26個(gè)字母的大小寫,阿拉伯?dāng)?shù)字0—9,及一些簡(jiǎn)單的符號(hào)。該液晶屏操作簡(jiǎn)
8、單,顯示功能強(qiáng)大。</p><p><b> 方案二:</b></p><p> 數(shù)碼管:雖然數(shù)碼管的顯示位數(shù)有限,且只能顯示一些簡(jiǎn)單的字符。</p><p> 綜上所述,我們選擇了LCD1602作為顯示模塊。</p><p><b> 時(shí)鐘芯片:</b></p><p&
9、gt; 方案一:ds12c887</p><p> 由于DS12C887能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等時(shí)間信息, DS12C887中自帶有鋰電池,外部掉電時(shí),其內(nèi)部時(shí)間信息還能夠保持10年之久;對(duì)于一天內(nèi)的時(shí)間記錄,帶有128字節(jié) RAM.性能優(yōu)異,但價(jià)格相對(duì)較貴。</p><p> 方案二: ds1302</p><p> 美國(guó)DALLAS公司
10、推出的具有涓細(xì)電流充電能力的低功耗實(shí)時(shí)時(shí)鐘電路DS1302的結(jié)構(gòu)、工作原理及其在實(shí)時(shí)顯示時(shí)間中的應(yīng)用。它可以對(duì)年、月、日、周、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能,價(jià)格便宜,但是沒(méi)有鬧鐘中斷功能。</p><p> 綜上所述,我們選擇了ds12c887作為時(shí)鐘芯片。</p><p><b> 單片機(jī)芯片</b></p><p>
11、<b> 方案一:89c52</b></p><p> 基于標(biāo)準(zhǔn)的MCS-51單片機(jī)體系結(jié)構(gòu)和指令系統(tǒng),集成了時(shí)鐘輸出和向上或向下計(jì)數(shù)器等更多的功能,適合于類似馬達(dá)控制等應(yīng)用場(chǎng)合。89C52內(nèi)置8位中央處理單元、256字節(jié)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM、8k片內(nèi)程序存儲(chǔ)器(ROM)32個(gè)雙向輸入/輸出(I/O)口、3個(gè)16位定時(shí)/計(jì)數(shù)器和5個(gè)兩級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)時(shí)鐘振蕩電路。&
12、lt;/p><p> 方案二:89c2052</p><p> 功能和89c52類似,但雙向輸入/輸出(I/O)口只有十六個(gè)。</p><p> 由于本實(shí)驗(yàn)用到輸入/輸出(I/O)比較多,為了布線方便,選用89c52。</p><p> 2.2 系統(tǒng)各器件簡(jiǎn)介</p><p><b> AT89c52&
13、lt;/b></p><p><b> 主要功能特性:</b></p><p> VCC:供電電壓。 GND:接地。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p&g
14、t;<p> XTAL2:來(lái)自反向振蕩器的輸出。</p><p> P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8個(gè)TTL門電流。當(dāng)P0口的管腳第一次寫“1”時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p
15、> lcd1602液晶顯示:</p><p> 1602液晶也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用, 1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。</p
16、><p> 1602采用標(biāo)準(zhǔn)的16腳接口,其中:</p><p> 第1腳:VSS為電源地</p><p> 第2腳:VCC接5V電源正極</p><p> 第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。</p>
17、<p> 第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。</p><p> 第5腳:RW為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。</p><p> 第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。</p><p> 第7~14腳:D0~D7為8位雙向
18、數(shù)據(jù)端。</p><p> 第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。</p><p><b> DS12C887</b></p><p> DS12C887實(shí)時(shí)時(shí)鐘芯片功能豐富,可以用來(lái)直接代替IBM PC上的時(shí)鐘日歷芯片DS12887,同時(shí),它的管腳也和MC146818B、DS12887相兼容。</p>
19、;<p> 由于DS12C887能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等時(shí)間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決了“千年”問(wèn)題; DS12C887中自帶有鋰電池,外部掉電時(shí),其內(nèi)部時(shí)間信息還能夠保持10年之久;對(duì)于一天內(nèi)的時(shí)間記錄,有12小時(shí)制和24小時(shí)制兩種模式。在12小時(shí)制模式中,用AM和PM區(qū)分上午和下午;時(shí)間的表示方法也有兩種,一種用二進(jìn)制數(shù)表示,一種是用BCD碼表示;DS12C887中帶有12
20、8字節(jié) RAM,其中有11字節(jié)RAM用來(lái)存儲(chǔ)時(shí)間信息,4字節(jié)RAM用來(lái)存儲(chǔ)DS12C887的控制信息,稱為控制寄存器,113字節(jié)通用RAM使用戶使用;此外用戶還可對(duì)DS12C887進(jìn)行編程以實(shí)現(xiàn)多種方波輸出,并可對(duì)其內(nèi)部的三路中斷通過(guò)軟件進(jìn)行屏蔽。</p><p><b> 蜂鳴器</b></p><p> 壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、
21、阻抗匹配器及共鳴箱、外殼等組成。</p><p> 由于蜂鳴器的工作電流一般比較大,以致于單片機(jī)的I/O 口是無(wú)法直接驅(qū)動(dòng)的*(但AVR可以驅(qū)動(dòng)小功率蜂鳴器),所以要利用放大電路來(lái)驅(qū)動(dòng),一般使用三極管來(lái)放大電流就可以了。</p><p> 2.3 各部分電路設(shè)計(jì)仿真</p><p><b> 2.4 成品圖片秀</b></p>
22、<p> 三:電子時(shí)鐘程序設(shè)計(jì)與調(diào)試</p><p> 3.1 程序設(shè)計(jì)思路</p><p> 該程序整體思路是,從DS12C887寄存器中讀取時(shí)分秒,然后在1602中顯示。</p><p> 若按下K1按鍵,則進(jìn)入調(diào)時(shí)模式,不斷按下K1按鍵,切換為時(shí)分秒,星期,年月日,當(dāng)按到第八下時(shí),將設(shè)定的值寫入時(shí)鐘芯片中,按次時(shí)間走下去,從而起到設(shè)定時(shí)間
23、的目的。</p><p> K2,K3鍵,只有在K1處于調(diào)時(shí)模式時(shí)才會(huì)有用,否則無(wú)效。分別為加數(shù)值鍵,和減數(shù)值鍵。</p><p> K4鍵為鬧鐘查看鍵,用于查看鬧鐘設(shè)定的時(shí)間和設(shè)定定時(shí)時(shí)間,當(dāng)K4按下后,再按下K1鍵,則可以調(diào)節(jié)定時(shí)時(shí)間,調(diào)節(jié)時(shí)分秒依然是通過(guò)多次按下K1達(dá)到選擇的目的,第四次按下時(shí)候,設(shè)定的數(shù)值存入鬧鐘寄存器。由于鬧鐘不需要調(diào)節(jié)星期和年月日,所以按到第四次時(shí)就能存儲(chǔ)數(shù)
24、據(jù)。</p><p> K5按鍵是切換12/24小時(shí)模式的,當(dāng)為12小時(shí)模式時(shí),在顯示器的第二行顯示AM,PM。以加以區(qū)分。24小時(shí)模式下,不顯示。但是調(diào)節(jié)時(shí)間和設(shè)定鬧鐘都是以24小時(shí)模式顯示。</p><p> 另外,在每次按下按鍵后,為了更加形象,加了一個(gè)蜂鳴器滴滴聲。</p><p> 電源部分則直接利用手機(jī)充電器改裝。</p><p
25、> 3.2軟件調(diào)試及解決的問(wèn)題</p><p> 1:12/24小時(shí)模式切換時(shí),1602的第二行顯示的AM,PM必須每次重寫數(shù)值,以達(dá)到清除數(shù)據(jù)的作用,</p><p> 2:蜂鳴器選用的是低電平有效,程序中得將相應(yīng)的端口置0才有效。</p><p> 3:按鍵需要加防抖延時(shí)和松手確認(rèn),不然很容易出錯(cuò)。</p><p> 4:
26、51的中斷怎么打開(kāi),應(yīng)該牢記。實(shí)驗(yàn)時(shí)就是不能鬧鈴,最后發(fā)現(xiàn)是開(kāi)錯(cuò)了中斷。</p><p><b> 3.3 附加功能</b></p><p> 顯示年月日;顯示星期;每次拿下按鍵會(huì)有一個(gè)滴提醒;查看鬧鐘時(shí),有Ri的顯示;斷電后,時(shí)間仍可正常走。</p><p><b> 四:課程設(shè)計(jì)總結(jié)</b></p>
27、<p> 大三下學(xué)期,我們電氣工程及其自動(dòng)化分方向了,大體分為電力系統(tǒng)和電氣控制方向,大多同學(xué)選擇了電力系統(tǒng),因?yàn)楫吘刮覀儗W(xué)的是電氣工程,可我卻一反常態(tài),選擇了電氣控制,一個(gè)相對(duì)不被看好的方向。</p><p> 我想,選擇這個(gè)方向,我考慮很多,一個(gè)原因是我一直是隨著大流在走動(dòng),面對(duì)大是大非我沒(méi)太多主見(jiàn),這樣對(duì)以后的發(fā)展,我想是一個(gè)弊病,這次我做了一個(gè)自己的決定。</p><p
28、> 另外,并非一時(shí)沖動(dòng),在之前參加大學(xué)生科技創(chuàng)新比賽時(shí)候,我學(xué)習(xí)了相關(guān)單片機(jī)的知識(shí),雖然制作的人體感應(yīng)智能風(fēng)扇,在目前看來(lái)確實(shí)很簡(jiǎn)單,但當(dāng)時(shí),能做出來(lái)確實(shí)付出了不小努力。在這期間,我才通過(guò)自己的實(shí)踐,切實(shí)掌握了很多知識(shí),所掌握的知識(shí)也扎實(shí)了很多,回頭看課本,確實(shí)感覺(jué)完全不一樣。在這之中,我能找到自己真正所需,而非那些一紙文憑,還有空談的理論。</p><p> 科技創(chuàng)新的一些經(jīng)驗(yàn)也讓我這次制作電子時(shí)鐘輕
29、松了很多,畢竟有了焊接基礎(chǔ)和閱讀和書寫程序的能力。本次的電子時(shí)鐘分為L(zhǎng)CD1602顯示部分,按鍵部分,蜂鳴器部分,DS12C887時(shí)鐘芯片部分,最小系統(tǒng)部分,電源部分。硬件這一塊,主要是連線,1602和12C887的線比較多,鏈接復(fù)雜。其他幾個(gè)模塊就相對(duì)簡(jiǎn)單多了。</p><p> 軟件部分,我依然用C程序,簡(jiǎn)單、易懂,特別是對(duì)1602和12C887的控制部分,有位選,有數(shù)據(jù)地址選擇,還有讀寫控制,簡(jiǎn)簡(jiǎn)單單的幾
30、個(gè)寄存器既然就能實(shí)現(xiàn)相關(guān)功能,給我的感覺(jué)除了驚嘆還是驚嘆。程序部分,1602和12C887的讀寫程序我是借鑒郭天祥的那本紅寶書的,主程序的控制部分,則是看了很多相關(guān)程序,集百家之所長(zhǎng)。雖然不一定最優(yōu),但執(zhí)行效率我想,還是蠻高的。</p><p> 至于仿真,我想我是一個(gè)比較直接的人,我先是做出了成品,然后對(duì)著硬件慢慢調(diào)試,而非在仿真軟件下畫出軟件,然后在線調(diào)試。成功后,我原不準(zhǔn)備仿真,后來(lái)想想,一則感覺(jué)少了些什
31、么,另外,如果有仿真的話,也讓我的硬件部分可以更直觀的呈現(xiàn)在別人的面前,更直觀的介紹我的產(chǎn)品。思來(lái)想去,權(quán)衡利弊,我還是仿了,用的軟件是proteus。</p><p> 本次課程設(shè)計(jì),雖然學(xué)校給的時(shí)間是一周,但是我真正花的時(shí)間,硬件部分大概一天,軟件部分大概三天,但是前期準(zhǔn)備包括淘寶上買元件什么的,也花了不少時(shí)間。離原先的目標(biāo),三四天弄完,還是有很大差距。</p><p> 總之,本
32、次課程設(shè)計(jì),還是有學(xué)習(xí)了很多東西,也算是自己制作的第二個(gè)小產(chǎn)品。也希望自己一步一個(gè)腳印。</p><p><b> 五:參考文獻(xiàn)</b></p><p> 單片機(jī)原理及應(yīng)用 ,張毅剛編,高等教育出版社;</p><p><b> 附錄:源程序</b></p><p> ?。楸Wo(hù)版權(quán),有小部分
33、修改)</p><p> #include<reg52.h></p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p> sbit s5=P1^3;</p><p> sbit dscs=P1^
34、4;</p><p> sbit dsas=P1^5;</p><p> sbit dsrw=P1^6;</p><p> sbit dsds=P1^7;</p><p> sbit dsirq=P3^3;</p><p> sbit s1=P3^0;</p><p> sbit s
35、2=P3^1;</p><p> sbit s3=P3^2;</p><p> sbit s4=P3^4;</p><p> sbit rs=P3^5;</p><p> sbit lcden=P3^6;</p><p> sbit beep=P3^7;</p><p> bit f
36、lag1,flag_ri;</p><p> uchar flag,exch; </p><p> char s1num;</p><p> char miao,shi,fen,year,month,day,week,amiao,afen,ashi,shi_1;</p><p> uchar code table[]="
37、 - - ";</p><p> uchar code table1[]=" : : ";</p><p> void write_ds(uchar,uchar); //函數(shù)聲明</p><p> void set_alarm(uchar,uchar,uchar);
38、</p><p> uchar read_ds(uchar);void set_time();void read_alarm();</p><p> void delay(uint z)</p><p> { //延時(shí)函數(shù)</p><p><b> uint x,y;</b></p
39、><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void didi() //蜂鳴器叫子函數(shù)</p><p><b> {</b>
40、;</p><p><b> beep=0;</b></p><p> delay(100);</p><p><b> beep=1;</b></p><p><b> }</b></p><p> void write_com(uchar
41、com)</p><p> {//1602寫地址</p><p><b> rs=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b></p><p><
42、b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b>
43、;</p><p> void write_date(uchar date)//1602液晶寫數(shù)據(jù)</p><p><b> {</b></p><p><b> rs=1;</b></p><p><b> lcden=0;</b></p>&l
44、t;p><b> P0=date;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b>
45、lcden=0;</b></p><p><b> }</b></p><p> void init()//初始化</p><p><b> {</b></p><p> uchar num;</p><p> EA=1;
46、 //外部中斷1初始化</p><p><b> EX1=1;</b></p><p><b> IT1=1;</b></p><p><b> flag1=0;</b></p><p><b> s1num=0;</b&g
47、t;</p><p><b> week=1;</b></p><p><b> lcden=0;</b></p><p><b> exch=0;</b></p><p> write_ds(0x0A,0x20);//打開(kāi)振蕩器</p>&l
48、t;p> write_ds(0x0B,0x26); //設(shè)置24小時(shí)模式</p><p> //set_time();</p><p> write_com(0x38);//1602初始化</p><p> write_com(0x0c);</p><p> write_com(0x06);<
49、;/p><p> write_com(0x01);</p><p> write_com(0x80); //寫入液晶固定部分內(nèi)容</p><p> for(num=0;num<15;num++)</p><p><b> {</b></p><p> write_dat
50、e(table[num]);</p><p><b> delay(5);</b></p><p><b> }</b></p><p> write_com(0x80+0x40);</p><p> for(num=0;num<15;num++)</p><p&g
51、t;<b> {</b></p><p> write_date(table1[num]);</p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }</b></p>
52、<p> void write_sfm(uchar add,uchar date)//液晶寫入時(shí)分秒</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p>&l
53、t;p> write_com(0x80+0x40+add);</p><p> write_date(0x30+shi);</p><p> write_date(0x30+ge);</p><p><b> }</b></p><p> void write_nyr(uchar add,uchar da
54、te) //液晶寫入年月日子函數(shù)</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p><p> write_com(0x80+add);</p>
55、<p> write_date(0x30+shi);</p><p> write_date(0x30+ge);</p><p><b> }</b></p><p> void write_week(char we)//液晶寫入星期子函數(shù)</p><p><b> {</
56、b></p><p> write_com(0x80+12);</p><p> switch(we)</p><p><b> {</b></p><p> case 1:write_date('M');delay(5);</p><p> write_date(
57、'O');delay(5);</p><p> write_date('N');delay(5);</p><p><b> break;</b></p><p> case 2:write_date('T');delay(5);</p><p> write_da
58、te('U');delay(5);</p><p> write_date('E');delay(5);</p><p><b> break;</b></p><p> case 3:write_date('W');delay(5);</p><p> write
59、_date('E');delay(5);</p><p> write_date('D');delay(5);</p><p><b> break;</b></p><p> case 4:write_date('T');delay(5);</p><p> wr
60、ite_date('H');delay(5);</p><p> write_date('U');delay(5);</p><p><b> break;</b></p><p> case 5:write_date('F');delay(5);</p><p>
61、 write_date('R');delay(5);</p><p> write_date('I');delay(5);</p><p><b> break;</b></p><p> case 6:write_date('S');delay(5);</p><p&g
62、t; write_date('A');delay(5);</p><p> write_date('T');delay(5);</p><p><b> break;</b></p><p> case 7:write_date('S');delay(5);</p><
63、p> write_date('U');delay(5);</p><p> write_date('N');delay(5);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }
64、</b></p><p> void keyscan() //掃描鍵盤</p><p><b> {</b></p><p> if(flag_ri==1) //如果鬧鈴,按任意鍵取消報(bào)警</p><p><b> {</b></p&g
65、t;<p> if((s1==0)||(s2==0)||(s3==0)||(s4==0))</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if((s1==0)||(s2==0)||(s3==0)||(s4==0))</p>
66、<p><b> {</b></p><p> while(!(s1&&s2&&s3&&s4));didi();</p><p> flag_ri=0;</p><p><b> }</b></p><p><b> }&
67、lt;/b></p><p><b> }</b></p><p> if(s1==0) //調(diào)時(shí)模式,也可以調(diào)鬧鐘時(shí)間</p><p><b> {</b></p><p><b> delay(5);</b>
68、</p><p><b> if(s1==0)</b></p><p><b> {</b></p><p> write_nyr(3,year); //重寫顯示值,防止12小時(shí)模式顯示出錯(cuò)</p><p> write_nyr(6,month);</p>
69、<p> write_nyr(9,day);</p><p> write_week(week);</p><p> write_sfm(4,shi);</p><p> write_sfm(7,fen);</p><p> write_sfm(10,miao);</p><p> write_c
70、om(0x80+0x40+14);</p><p> write_date(' ');</p><p> write_date(' ');</p><p> 此處有一標(biāo)志位,根據(jù)上下文自己可推測(cè) //調(diào)時(shí)位置標(biāo)志位</p><p> if(flag1==1)
71、 //如果調(diào)鬧鐘時(shí)間,標(biāo)志位只能調(diào)時(shí)分秒</p><p> if(s1num==4)</p><p><b> s1num=1;</b></p><p><b> flag=1;</b></p><p> while(!s1); didi();</p><p>
72、switch(s1num) //標(biāo)志位決定光標(biāo)顯示位置</p><p><b> {</b></p><p> case 1:write_com(0x80+0x40+10);</p><p> write_com(0x0f); //打開(kāi)顯示光標(biāo)</p><p>&l
73、t;b> break ;</b></p><p> case 2:write_com(0x80+0x40+7);</p><p> write_com(0x0f);</p><p><b> break;</b></p><p> case 3:write_com(0x80+0x40+4);&
74、lt;/p><p> write_com(0x0f);</p><p><b> break;</b></p><p> case 4:write_com(0x80+12);</p><p> write_com(0x0f);</p><p><b> break;</b&g
75、t;</p><p> case 5:write_com(0x80+9);</p><p> write_com(0x0f);</p><p><b> break;</b></p><p> case 6:write_com(0x80+6);</p><p> write_com(0x
76、0f);</p><p><b> break;</b></p><p> case 7:write_com(0x80+3);</p><p> write_com(0x0f);</p><p><b> break;</b></p><p> case 8:s1n
77、um=0;</p><p> write_com(0x0c);</p><p><b> flag=0;</b></p><p> write_ds(0,miao);</p><p> write_ds(2,fen);</p><p> write_ds(4,shi);</p>
78、;<p> write_ds(6,week);</p><p> write_ds(7,day);</p><p> write_ds(8,month);</p><p> write_ds(9,year);</p><p><b> break;</b></p><p>
79、<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(s1num!=0) //如果處于調(diào)時(shí)模式,按鍵加減才有效</p><p><b>
80、{</b></p><p> if(s2==0) //加按鍵</p><p><b> {</b></p><p><b> delay(1);</b></p><p><b> if(s2==0)</b><
81、;/p><p><b> {</b></p><p> while(!s2); didi();</p><p> switch(s1num)</p><p><b> {</b></p><p> case 1:miao++;</p><p&g
82、t; if(miao==60)</p><p><b> miao=0;</b></p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x40+10);</p><p><b> break;</b></p><p&
83、gt; case 2:fen++;</p><p> if(fen==60)</p><p><b> fen=0;</b></p><p> write_sfm(7,fen);</p><p> write_com(0x80+0x40+7);</p><p><b> br
84、eak;</b></p><p> case 3:shi++;</p><p> if(shi==24)</p><p><b> shi=0;</b></p><p> write_sfm(4,shi);</p><p> write_com(0x80+0x40+4);&l
85、t;/p><p><b> break;</b></p><p> case 4:week++;</p><p> if(week==8)</p><p><b> week=1;</b></p><p> write_week(week);</p>&l
86、t;p> write_com(0x80+12);</p><p><b> break;</b></p><p> case 5:day++;</p><p> if(day==32)</p><p><b> day=1;</b></p><p> wri
87、te_nyr(9,day);</p><p> write_com(0x80+9);</p><p><b> break;</b></p><p> case 6:month++;</p><p> if(month==13)</p><p><b> month=1;<
88、;/b></p><p> write_nyr(6,month);</p><p> write_com(0x80+6);</p><p><b> break;</b></p><p> case 7:year++;</p><p> if(year==100)</p>
89、;<p><b> year=0;</b></p><p> write_nyr(3,year);</p><p> write_com(0x80+3);</p><p><b> break;</b></p><p><b> }</b></p&
90、gt;<p><b> }</b></p><p><b> }</b></p><p> if(s3==0) //減按鍵</p><p><b> {</b></p><p><b> dela
91、y(1);</b></p><p><b> if(s3==0)</b></p><p><b> {</b></p><p> while(!s3); didi();</p><p> switch(s1num)</p><p><b>
92、{</b></p><p> case 1:miao--;</p><p> if(miao==-1)</p><p><b> miao=59;</b></p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x40+10
93、);</p><p><b> break;</b></p><p> case 2:fen--;</p><p> if(fen==-1)</p><p><b> fen=59;</b></p><p> write_sfm(7,fen);</p>
94、<p> write_com(0x80+0x40+7);</p><p><b> break;</b></p><p> case 3:shi--;</p><p> if(shi==-1)</p><p><b> shi=23;</b></p><p&
95、gt; write_sfm(4,shi);</p><p> write_com(0x80+0x40+4);</p><p><b> break;</b></p><p> case 4:week--;</p><p> if(week==0)</p><p><b> w
96、eek=7;</b></p><p> write_week(week);</p><p> write_com(0x80+12);</p><p><b> break;</b></p><p> case 5:day--;</p><p> if(day==0)</
97、p><p><b> day=31;</b></p><p> write_nyr(9,day);</p><p> write_com(0x80+9);</p><p><b> break;</b></p><p> case 6:month--;</p>
98、;<p> if(month==0)</p><p><b> month=12;</b></p><p> write_nyr(6,month);</p><p> write_com(0x80+6);</p><p><b> break;</b></p>
99、<p> case 7:year--;</p><p> if(year==-1)</p><p><b> year=99;</b></p><p> write_nyr(3,year);</p><p> write_com(0x80+3);</p><p><b&g
100、t; break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> i
101、f(s4==0) //檢測(cè)鬧鐘查看按鍵</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s4==0)</b></p><p><b> {&l
102、t;/b></p><p> write_nyr(3,year); //重寫時(shí)間信息,防止12小時(shí)模式下,顯示出錯(cuò)</p><p> write_nyr(6,month);</p><p> write_nyr(9,day);</p><p> write_week(week);</p><p&
103、gt; write_sfm(4,shi);</p><p> write_sfm(7,fen);</p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x40+14);</p><p> write_date(' ');</p><p>
104、 write_date(' ');</p><p> flag1=~flag1; //鬧鐘標(biāo)志位取反</p><p> while(!s4);didi();</p><p> if(flag1==0) //當(dāng)退出鬧鐘查看按鍵時(shí),寫入鬧鐘設(shè)定時(shí)間</p><p><b&
105、gt; {</b></p><p><b> flag=0;</b></p><p> write_com(0x80+0x40);</p><p> write_date(' ');</p><p> write_date(' ');</p><p
106、> write_com(0x0c);</p><p> write_ds(1,miao);</p><p> write_ds(3,fen);</p><p> write_ds(5,shi);</p><p><b> }</b></p><p> else
107、 //鬧鐘查看模式時(shí),顯示相關(guān)信息</p><p><b> {</b></p><p> read_alarm();</p><p> miao=amiao;</p><p><b> fen=afen;</b></p><p><b>
108、 shi=ashi;</b></p><p> write_com(0x80+0x40); //顯示RI表示在查看鬧鐘</p><p> write_date('R');</p><p> write_date('i');</p><p> write_com(0x80+0x40+
109、3);</p><p> write_sfm(4,ashi);</p><p> write_sfm(7,afen);</p><p> write_sfm(10,amiao);</p><p><b> }</b></p><p><b> }</b></p
110、><p><b> }</b></p><p> if(s5==0) //檢測(cè)12、24小時(shí)切換按鍵</p><p><b> {</b></p><p><b> delay(5);</b></p><
111、p><b> if(s5==0)</b></p><p><b> {</b></p><p> exch=~exch;</p><p> while(!s5); didi();</p><p><b> }</b></p><p>
112、<b> }</b></p><p><b> }</b></p><p> void write_ds(uchar add,uchar date) //12887寫子程序</p><p><b> {</b></p><p><b> ds
113、cs=0;</b></p><p><b> dsas=1;</b></p><p><b> dsds=1;</b></p><p><b> dsrw=1;</b></p><p><b> P2=add;</b></p>
114、;<p><b> dsas=0;</b></p><p><b> dsrw=0;</b></p><p><b> P2=date;</b></p><p><b> dsrw=1;</b></p><p><b>
115、dsas=1;</b></p><p> dscs=1;</p><p><b> }</b></p><p> uchar read_ds(uchar add) //12887讀子程序</p><p><b> {</b></p&g
116、t;<p> uchar ds_date;</p><p><b> dsas=1;</b></p><p><b> dsds=1;</b></p><p><b> dsrw=1;</b></p><p><b> dscs=0;</
117、b></p><p><b> P2=add;</b></p><p><b> dsas=0;</b></p><p><b> dsds=0;</b></p><p><b> P2=0xff;</b></p><p&
118、gt; ds_date=P2;</p><p><b> dsds=1;</b></p><p><b> dsas=1;</b></p><p><b> dscs=1;</b></p><p> return ds_date;</p><p&
119、gt;<b> }</b></p><p> void read_alarm() //讀鬧鐘設(shè)定的時(shí)間子程序</p><p><b> {</b></p><p> amiao=read_ds(1);</p><p> afen=read_ds(3);&l
120、t;/p><p> ashi=read_ds(5);</p><p><b> }</b></p><p> void exter() interrupt 2 //中斷子程序</p><p> {uchar c;</p><p> flag_ri=1;</p
121、><p> c=read_ds(0x0c);</p><p><b> }</b></p><p> void main() //主函數(shù)</p><p><b> {</b></p><p><b> init();&l
122、t;/b></p><p><b> while(1)</b></p><p><b> {</b></p><p> keyscan();</p><p> if(flag_ri==1) //如果鬧鐘中斷表示為為1,則鬧鈴。</p><
123、p><b> {didi();</b></p><p> delay(100);</p><p><b> didi();</b></p><p> delay(500);</p><p><b> }</b></p><p> if
124、(讀懂程序后自己填寫此處) //不處于調(diào)時(shí)模式,不處于查看鬧鐘模式時(shí)顯示時(shí)間</p><p><b> {</b></p><p> year=read_ds(9); //讀12887寄存器中的時(shí)間</p><p> month=read_ds(8);</p><p> day=re
125、ad_ds(7);</p><p> week=read_ds(6);</p><p> miao=read_ds(0);</p><p> fen=read_ds(2);</p><p> shi=read_ds(4);</p><p> if(exch==0)
126、 //顯示24小時(shí)制</p><p><b> {</b></p><p> write_nyr(3,year);</p><p> write_nyr(6,month);</p><p> write_nyr(9,day);</p><p> write_week(week);<
127、;/p><p> write_sfm(4,shi);</p><p> write_sfm(7,fen);</p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x40+14); //將1602第二行的AM,PM清除</p><p> write
128、_date(' ');</p><p> write_date(' ');</p><p><b> }</b></p><p> Else //檢測(cè)按12小時(shí)顯示</p><p><b> {</b>&l
129、t;/p><p> if(shi<13) //如果小時(shí)小于13,則按上午顯示</p><p><b> {</b></p><p> write_nyr(3,year);</p><p> write_nyr(6,month);</p><p>
130、write_nyr(9,day);</p><p> write_week(week);</p><p> write_sfm(4,shi);</p><p> write_sfm(7,fen);</p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x4
131、0+14); //顯示AM</p><p> write_date('A'); </p><p> write_date('M');</p><p><b> }</b></p><p> if(shi>=13)
132、 //如果小時(shí)大于13,則按下午顯示</p><p><b> {</b></p><p> shi_1=shi;</p><p> shi_1-=12;</p><p> write_nyr(3,year);</p><p> write_nyr(6,month);&l
133、t;/p><p> write_nyr(9,day);</p><p> write_week(week);</p><p> write_sfm(4,shi_1);</p><p> write_sfm(7,fen);</p><p> write_sfm(10,miao);</p><p&
134、gt; write_com(0x80+0x40+14); //顯示PM</p><p> write_date('P');</p><p> write_date('M');</p><p><b> }</b></p><p><b> }
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)---- lcd電子定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)定時(shí)鬧鐘課程設(shè)計(jì)
- 單片機(jī)定時(shí)鬧鐘課程設(shè)計(jì)
- 定時(shí)鬧鐘—單片機(jī)課程設(shè)計(jì)
- 單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)--基于單片機(jī)的電子鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--定時(shí)鬧鐘設(shè)計(jì)
- 基于單片機(jī)的電子鬧鐘設(shè)計(jì)-單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--單片機(jī)定時(shí)鬧鐘設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)---定時(shí)鬧鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——定時(shí)鬧鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)單定時(shí)鬧鐘系統(tǒng)
- 基于單片機(jī)的定時(shí)鬧鐘課程設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)--鬧鐘程序設(shè)計(jì)
- 單片機(jī)【倒計(jì)時(shí)音樂(lè)鬧鐘】課程設(shè)計(jì)
- c51單片機(jī)課程設(shè)計(jì)定時(shí)鬧鐘
評(píng)論
0/150
提交評(píng)論