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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)試及解決的問題</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à)格便宜,但是沒有鬧鐘中斷功能。</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:來自反向振蕩器的輸出。</p><p>  P0口:P0口為一個(gè)8位漏級(jí)開路雙向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字符型液晶,它是一種專門用來顯示字母、數(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ì)比度過高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過一個(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í)鐘芯片功能豐富,可以用來直接代替IBM PC上的時(shí)鐘日歷芯片DS12887,同時(shí),它的管腳也和MC146818B、DS12887相兼容。</p>

19、;<p>  由于DS12C887能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等時(shí)間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決了“千年”問題; 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用來存儲(chǔ)時(shí)間信息,4字節(jié)RAM用來存儲(chǔ)DS12C887的控制信息,稱為控制寄存器,113字節(jié)通用RAM使用戶使用;此外用戶還可對(duì)DS12C887進(jìn)行編程以實(shí)現(xiàn)多種方波輸出,并可對(duì)其內(nèi)部的三路中斷通過軟件進(jìn)行屏蔽。</p><p><b>  蜂鳴器</b></p><p>  壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、

21、阻抗匹配器及共鳴箱、外殼等組成。</p><p>  由于蜂鳴器的工作電流一般比較大,以致于單片機(jī)的I/O 口是無法直接驅(qū)動(dòng)的*(但AVR可以驅(qū)動(dòng)小功率蜂鳴器),所以要利用放大電路來驅(qū)動(dòng),一般使用三極管來放大電流就可以了。</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ì)有用,否則無效。分別為加數(shù)值鍵,和減數(shù)值鍵。</p><p>  K4鍵為鬧鐘查看鍵,用于查看鬧鐘設(shè)定的時(shí)間和設(shè)定定時(shí)時(shí)間,當(dāng)K4按下后,再按下K1鍵,則可以調(diào)節(jié)定時(shí)時(shí)間,調(diào)節(jié)時(shí)分秒依然是通過多次按下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)試及解決的問題</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的中斷怎么打開,應(yīng)該牢記。實(shí)驗(yàn)時(shí)就是不能鬧鈴,最后發(fā)現(xiàn)是開錯(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ì)大是大非我沒太多主見,這樣對(duì)以后的發(fā)展,我想是一個(gè)弊病,這次我做了一個(gè)自己的決定。</p><p

28、>  另外,并非一時(shí)沖動(dòng),在之前參加大學(xué)生科技創(chuàng)新比賽時(shí)候,我學(xué)習(xí)了相關(guān)單片機(jī)的知識(shí),雖然制作的人體感應(yīng)智能風(fēng)扇,在目前看來確實(shí)很簡(jiǎn)單,但當(dāng)時(shí),能做出來確實(shí)付出了不小努力。在這期間,我才通過自己的實(shí)踐,切實(shí)掌握了很多知識(shí),所掌握的知識(shí)也扎實(shí)了很多,回頭看課本,確實(shí)感覺完全不一樣。在這之中,我能找到自己真正所需,而非那些一紙文憑,還有空談的理論。</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)功能,給我的感覺除了驚嘆還是驚嘆。程序部分,1602和12C887的讀寫程序我是借鑒郭天祥的那本紅寶書的,主程序的控制部分,則是看了很多相關(guān)程序,集百家之所長(zhǎng)。雖然不一定最優(yōu),但執(zhí)行效率我想,還是蠻高的。</p><p>  至于仿真,我想我是一個(gè)比較直接的人,我先是做出了成品,然后對(duì)著硬件慢慢調(diào)試,而非在仿真軟件下畫出軟件,然后在線調(diào)試。成功后,我原不準(zhǔn)備仿真,后來想想,一則感覺少了些什

31、么,另外,如果有仿真的話,也讓我的硬件部分可以更直觀的呈現(xiàn)在別人的面前,更直觀的介紹我的產(chǎn)品。思來想去,權(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);//打開振蕩器</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); //打開顯示光標(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論