2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩23頁(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>  單片機(jī)課程設(shè)計(jì)任務(wù)書</p><p><b>  專 業(yè): </b></p><p>  班 級(jí): </p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  題 目: </p>&

2、lt;p><b>  年 月 日</b></p><p><b>  摘要</b></p><p>  本設(shè)計(jì)是作息時(shí)間控制器,由單片機(jī)最小系統(tǒng)、按鍵模塊、數(shù)碼管顯示模塊、鬧鐘模塊組成。采用單片機(jī)AT89S52與12MHZ晶振相連;通過(guò)按鍵K1、K2、K3、K4控制時(shí)間的校正、鬧鐘時(shí)間設(shè)定;數(shù)碼管顯示模塊用來(lái)顯示時(shí)間,顯示格式為“時(shí)分

3、”,并能夠根據(jù)需要顯示年、月、日,由數(shù)碼管小數(shù)點(diǎn)閃動(dòng)作為秒計(jì)數(shù);鬧鐘模塊進(jìn)行到時(shí)提醒并作出相應(yīng)動(dòng)作:發(fā)光二極管閃亮,同時(shí)播放音樂(lè)。</p><p>  本設(shè)計(jì)中,利用單片機(jī)定時(shí)器設(shè)計(jì)時(shí)間計(jì)時(shí)處理,采用單片機(jī)內(nèi)部的T0定時(shí)器溢出中斷來(lái)實(shí)現(xiàn),工作在T1方式下,定時(shí)50微妙,則連續(xù)中斷20次即為一秒,得到了我們所需時(shí)間的最小單位秒,60秒為一分,60分為一小時(shí),24小時(shí)為一天,1、3、5、7、8、10、12月為31天,

4、4、6、9、11月為30天,閏年二月為29天,非閏年二月為28天,12個(gè)月為一年。采用這種時(shí)間設(shè)計(jì)思想來(lái)進(jìn)行時(shí)間設(shè)置。</p><p>  在整個(gè)系統(tǒng)的設(shè)計(jì)中,單片機(jī)的P0口輸出顯示信號(hào),P1口按鍵輸入控制、P2口用來(lái)掃描,為動(dòng)態(tài)顯示、P3口鬧鐘模塊。</p><p>  該設(shè)計(jì)用C52編寫程序,由于匯編語(yǔ)言的移植性比較差,而C語(yǔ)言則比較靈活。許多子函數(shù)都可以直接移植過(guò)去。</p&g

5、t;<p><b>  目錄</b></p><p><b>  摘要1</b></p><p><b>  目錄2</b></p><p><b>  1概述1</b></p><p>  1.151單片機(jī)簡(jiǎn)介1</p>

6、;<p>  1.2 設(shè)計(jì)要求及功能1</p><p>  1.3本設(shè)計(jì)實(shí)現(xiàn)的功能1</p><p>  2 系統(tǒng)總體方案及硬件設(shè)計(jì)2</p><p>  2.1 系統(tǒng)總體方案框圖2</p><p>  2.2 按鍵控制模塊3</p><p>  2.3 時(shí)間顯示模塊4</p&

7、gt;<p>  2.4鬧鐘模塊4</p><p><b>  3軟件設(shè)計(jì)5</b></p><p>  3.1系統(tǒng)軟件設(shè)計(jì)思想5</p><p>  3.2 系統(tǒng)主程序5</p><p>  3.3 中斷子程序6</p><p>  3.4 按鍵掃描子程序8&

8、lt;/p><p>  5課程設(shè)計(jì)體會(huì)13</p><p><b>  參考文獻(xiàn):14</b></p><p>  附1:源程序代碼15</p><p>  附2:系統(tǒng)原理圖25</p><p><b>  1概述</b></p><p>  1.

9、151單片機(jī)簡(jiǎn)介</p><p>  單片微型計(jì)算機(jī)簡(jiǎn)稱單片機(jī),即把組成微型計(jì)算機(jī)的各個(gè)功能部件,如中央處理器、隨機(jī)存儲(chǔ)器、只讀存儲(chǔ)器、I/O接口電路、定時(shí)器/計(jì)數(shù)器以及串行通信接口等集成在一塊芯片上,構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。</p><p>  由于單片機(jī)主要面對(duì)的是測(cè)控對(duì)象,突出的是控制功能,所以它從功能和形態(tài)上來(lái)說(shuō)都是應(yīng)測(cè)控功能領(lǐng)域應(yīng)用的要求而誕生的。隨著單片機(jī)技術(shù)的發(fā)展,它在芯

10、片內(nèi)集成了許多面對(duì)測(cè)控對(duì)象的接口電路,如ADC、DAC、高速I/O口、脈沖寬度調(diào)制器、監(jiān)視定時(shí)器等,這些接口電路已經(jīng)突破了微型計(jì)算機(jī)傳統(tǒng)的體系結(jié)構(gòu),所以單片機(jī)也成為微型控制。</p><p>  51單片機(jī)是對(duì)目前所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是Intel的8031單片機(jī),后來(lái)隨著Flash rom技術(shù)的發(fā)展,8031單片機(jī)取得了長(zhǎng)足的進(jìn)展,成為目前應(yīng)用最廣泛的8位單片機(jī)之

11、一,其代表型號(hào)是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測(cè)控系統(tǒng)之中。目前很多公司都有51系列的兼容機(jī)型推出,在目前乃至今后很長(zhǎng)的一段時(shí)間內(nèi)將占有大量市場(chǎng)。</p><p>  1.2 設(shè)計(jì)要求及功能</p><p>  本設(shè)計(jì)是作息時(shí)間控制器,其設(shè)計(jì)實(shí)現(xiàn)的功能主要有:使用4位七段顯示器來(lái)顯示現(xiàn)在的時(shí)間,顯示格式為“時(shí)分”,由LED閃動(dòng)作為秒計(jì)數(shù)表示??梢栽O(shè)定作息時(shí)間,并進(jìn)行到時(shí)提

12、示。能夠根據(jù)預(yù)先設(shè)定好的作息時(shí)間表自動(dòng)啟??刂齐娐罚瓿蓪?duì)外部設(shè)備的實(shí)時(shí)控制。</p><p>  1.3本設(shè)計(jì)實(shí)現(xiàn)的功能</p><p>  本設(shè)計(jì)實(shí)現(xiàn)的功能為:使用七段顯示器顯示時(shí)間,顯示格式為“時(shí)分”,并可顯示日期,顯示格式為“月日”,年份單獨(dú)顯示??梢栽O(shè)定作息時(shí)間,進(jìn)行到時(shí)提示,并作出相應(yīng)動(dòng)作:發(fā)光二極管閃亮,同時(shí)播放音樂(lè)。</p><p>  2 系統(tǒng)總

13、體方案及硬件設(shè)計(jì)</p><p>  2.1 系統(tǒng)總體方案框圖</p><p>  圖2-1 系統(tǒng)方框圖</p><p>  本次設(shè)計(jì)實(shí)現(xiàn)的功能主要有:使用4位七段顯示器來(lái)顯示現(xiàn)在的時(shí)間,顯示格式為“時(shí)分”,由LED小數(shù)點(diǎn)閃動(dòng)作為秒計(jì)數(shù)表示。可以設(shè)定作息時(shí)間,并進(jìn)行到時(shí)提示。能夠根據(jù)預(yù)先設(shè)定好的作息時(shí)間表自動(dòng)啟停控制電路,完成對(duì)外部設(shè)備的實(shí)時(shí)控制。</p&g

14、t;<p>  由按鍵輸入控制設(shè)置年月日以及當(dāng)前時(shí)間、并可設(shè)置鬧鐘定時(shí),時(shí)間到由蜂鳴器發(fā)出響聲并作出相應(yīng)動(dòng)作:二極管閃亮,同時(shí)播放音樂(lè)。</p><p>  2.2 按鍵控制模塊</p><p>  圖2-2按鍵控制模塊</p><p>  按鍵控制模塊主要有由四個(gè)按鍵組成:K1、K2、K3、K4、。其中K1的功能是模式切換鍵;K2的作用是加一;K3

15、的作用是鬧鐘使能;K4的作用是減一。</p><p>  當(dāng)需要設(shè)定時(shí)間或是校正時(shí)間,即可按下模式切換鍵來(lái)進(jìn)行。校正時(shí)間:按第一次K1鍵,進(jìn)入小時(shí)校正狀態(tài),通過(guò)按K2、K4鍵進(jìn)行小時(shí)校正,按一下K2鍵則加一,按一下K3鍵則減一;按第二次K1鍵,進(jìn)入分校正狀態(tài),通過(guò)按K2、K4鍵進(jìn)行分鐘校正;按第三次K1鍵,進(jìn)入小時(shí)設(shè)定狀態(tài),此時(shí)若不需要設(shè)置則不操作;按下第四次K1鍵,進(jìn)入分鐘設(shè)定狀態(tài),若此時(shí)不需要設(shè)置則不操作;按

16、下第五次K1鍵進(jìn)入月份校正狀態(tài),通過(guò)按K2、K4鍵進(jìn)行月份校正;按下第六次K1鍵,進(jìn)入日校正狀態(tài),通過(guò)按K2、K4鍵進(jìn)行日校正;按下第七次K1鍵進(jìn)入年份校正狀態(tài),通過(guò)按K2、K4鍵來(lái)進(jìn)行年份校正;校正完畢后,再按一次K1鍵,則退出時(shí)間校正狀態(tài),并顯示當(dāng)前校正后的準(zhǔn)確時(shí)間。設(shè)定時(shí)間:按第一次K1鍵進(jìn)入小時(shí)校正狀態(tài),此時(shí)若不需要設(shè)置,則不操作;以此類推,到第三次按下K1鍵,進(jìn)入小時(shí)設(shè)定狀態(tài),通過(guò)按K2、K4鍵進(jìn)行小時(shí)設(shè)定;按下第四次K1鍵,

17、進(jìn)入分鐘設(shè)定狀態(tài),通過(guò)按K2、K4鍵進(jìn)行分鐘設(shè)定,設(shè)定完畢后,按一下K3鍵(鬧鐘使能);繼續(xù)按K1鍵,若不需要設(shè)置,則不操作,以此類推,到按最后一次K1鍵則退出時(shí)間設(shè)定狀態(tài)并顯示當(dāng)前時(shí)間,當(dāng)時(shí)間與我們?cè)O(shè)</p><p>  2.3 時(shí)間顯示模塊</p><p><b>  圖2-3顯示模塊</b></p><p>  時(shí)間顯示模塊主要由四位數(shù)

18、碼管來(lái)顯示,配合按鍵控制模塊的校正與設(shè)定時(shí)間,相應(yīng)的顯示。時(shí)間正常顯示時(shí),LED每閃動(dòng)60次,分鐘自動(dòng)加一;每六十分鐘小時(shí)自動(dòng)加一;每24小時(shí)天自動(dòng)加一。</p><p><b>  2.4鬧鐘模塊</b></p><p>  圖2-4鬧鐘音樂(lè)模塊</p><p>  鬧鐘模塊快的主要功能:鬧鈴。當(dāng)設(shè)定時(shí)間與當(dāng)前時(shí)間一致時(shí),則鬧鐘自動(dòng)鬧鈴進(jìn)行

19、提示,同時(shí)二極管閃亮一分鐘后,自動(dòng)退出響鈴狀態(tài),若按K3鍵,鬧鐘退出響鈴狀態(tài)。</p><p><b>  圖2-5系統(tǒng)原理圖</b></p><p><b>  3軟件設(shè)計(jì)</b></p><p>  3.1系統(tǒng)軟件設(shè)計(jì)思想</p><p>  本系軟件設(shè)計(jì)中,利用單片機(jī)定時(shí)器設(shè)計(jì)時(shí)間計(jì)時(shí)處理,

20、采用單片機(jī)內(nèi)部的T0定時(shí)器溢出中斷來(lái)實(shí)現(xiàn),工作在T1方式下,定時(shí)50微妙,則連續(xù)中斷20次即為一秒,得到了我們所需時(shí)間的最小單位</p><p>  該設(shè)計(jì)用C51編寫程序,由于匯編語(yǔ)言的移植性比較差,而C語(yǔ)言則比較靈活。許多子函數(shù)都可以直接移植過(guò)去。在程序中除了有主函數(shù)外還包含許多子函數(shù),如延時(shí)函數(shù)、按鍵掃描函數(shù)、初始化函數(shù)、時(shí)間顯示函數(shù)、設(shè)定鬧鐘顯示函數(shù)、設(shè)定日期顯示函數(shù)、設(shè)定年份顯示函數(shù)、月份選擇函數(shù)、年份

21、顯示輔助函數(shù)。</p><p>  3.2 系統(tǒng)主程序</p><p>  在主控程序循環(huán)中主要工作為掃描是否有按鍵,若有按健則做相應(yīng)的功能處理,同時(shí)也掃描顯示器顯示時(shí)間數(shù)據(jù),并檢查所設(shè)置的時(shí)間是否到了。時(shí)間計(jì)時(shí)處理程序是等過(guò)了1s后,則更新時(shí)間數(shù)據(jù),將最新的時(shí)、分的數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)并顯示在七段顯示器上。</p><p>  圖3-2主程序流程圖</p&g

22、t;<p>  3.3 中斷子程序</p><p>  中斷子程序的主要功能:提供時(shí)間基準(zhǔn)。當(dāng)連續(xù)中斷20次時(shí),即為一秒,此時(shí)秒加一;當(dāng)秒值為60時(shí),分鐘加一,同時(shí)秒清零;當(dāng)分鐘值為60時(shí),小時(shí)加一,同時(shí)分鐘值清零;當(dāng)小時(shí)為24時(shí),天值加一,同時(shí)小時(shí)清零;由于每月天數(shù)不定,1、3、5、7、8、10、12月為31天,當(dāng)計(jì)數(shù)到此類月份時(shí),天值為32時(shí),月值加一,同時(shí)天值為1;4、6、9、11月為30天

23、,當(dāng)計(jì)數(shù)到此類月份時(shí),天值為31時(shí),月值加一,同時(shí)天值為1;如果是閏年,則2月為29天,當(dāng)計(jì)數(shù)到此類月份時(shí),天值為30時(shí),月值加一,同時(shí)天值為一;如果不是閏年,則2月為28天,當(dāng)計(jì)數(shù)此類月份時(shí),天值為29時(shí),月值加一,同時(shí)天值為一;當(dāng)月值為13時(shí),則年值加一,同時(shí)月值為一。</p><p>  圖3-3定時(shí)器中斷函數(shù)</p><p>  3.4 按鍵掃描子程序</p>&l

24、t;p>  按鍵掃描子程序是程序計(jì)中相當(dāng)重要的一部分。按鍵掃描子程序的功能是:掃描是否有按鍵按下,若有鍵按下,則執(zhí)行相應(yīng)功能。</p><p>  圖3-4按鍵掃描子程序</p><p><b>  3.5程序清單</b></p><p><b>  見(jiàn)附2。</b></p><p><

25、b>  4課程設(shè)計(jì)體會(huì)</b></p><p>  此次課程設(shè)計(jì)為期兩個(gè)多星期,我們從中獲益匪淺。本課程設(shè)計(jì)是《單片機(jī)原理與應(yīng)用技術(shù)》的綜合訓(xùn)練。從選題、確定方案、設(shè)計(jì)原理圖、仿真、焊接的過(guò)程中,我們學(xué)到了很多,這對(duì)我們來(lái)說(shuō)是一次將課本所學(xué)知識(shí)應(yīng)用到具體實(shí)踐中的一次考驗(yàn)。</p><p>  雖然在這個(gè)過(guò)程中我們遇到了很多困難,編寫程序需要一步一步并認(rèn)真的調(diào)試,一個(gè)小小的

26、錯(cuò)誤都可導(dǎo)致整個(gè)程序的不可用;硬件仿真需要考慮硬件與軟件的連調(diào),才能保證硬件與軟件協(xié)同工作。我們通過(guò)查閱資料、同學(xué)的幫助,最終基本解決這些問(wèn)題,從而基本完成了課程設(shè)計(jì)的要求。在這個(gè)過(guò)程中我們學(xué)會(huì)了發(fā)現(xiàn)問(wèn)題、分析問(wèn)題并最終解決問(wèn)題,為我們以后的工作和學(xué)習(xí)打下了一定的基礎(chǔ)。</p><p>  此次課程設(shè)計(jì),也使我們發(fā)現(xiàn)了自己的缺點(diǎn),課本所學(xué)知識(shí)與實(shí)踐是有一定距離的,我們不僅要學(xué)好科學(xué)文化知識(shí),更要積極的參與實(shí)踐學(xué)習(xí)

27、,真樣才能有更大的收獲,真正學(xué)到知識(shí),要把理論與實(shí)際相結(jié)合,從而成為真正有用的人。</p><p><b>  參考文獻(xiàn):</b></p><p>  余發(fā)山 王福忠 徐州:中國(guó)礦業(yè)大學(xué)出版社2008年</p><p>  [2]彭為,黃科,雷道仲.單片機(jī)典型系統(tǒng)設(shè)計(jì)實(shí)例講解.2006年</p><p>  [3]何立民

28、.單片機(jī)應(yīng)用技術(shù)選編.北京:北京航空航天大學(xué)出版社,2004.</p><p>  [4]楊剛,周群.電子系統(tǒng)設(shè)計(jì)與實(shí)踐.北京:電子工業(yè)出版社,2004.</p><p><b>  附表:</b></p><p><b>  項(xiàng)目訓(xùn)練評(píng)價(jià)表</b></p><p><b>  附2:源程

29、序代碼</b></p><p>  #include<REG52.H></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x

30、66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  //*************************************************************************************</p><p>  sbit K1=P1^4;</p><p>  sbit K2=P1^5;</p>

31、;<p>  sbit K3=P1^6;</p><p>  sbit K4=P1^7;</p><p>  sbit sd=P3^6;</p><p>  sbit BEEP=P3^7;</p><p>  uchar m=0,h=12,sec=0,cnt=0,x,y,qian,bai,shi,ge;</p>&

32、lt;p>  uchar set_h=12;</p><p>  uchar set_m=5;</p><p>  uchar month=12;</p><p>  uchar day=22;</p><p>  uchar th0_f;</p><p>  uchar tl0_f;</p>&l

33、t;p>  uint year=2010; </p><p>  void delay(uchar t);//延時(shí)函數(shù)</p><p>  void scankey(void);//按鍵掃描函數(shù)</p><p>  void init(void); //初始化函數(shù)</p><p>  void display(void);//顯示

34、函數(shù)</p><p>  void set_time(void);//設(shè)定時(shí)間顯示輔助函數(shù)</p><p>  void set_day(void);//設(shè)定日期顯示輔助函數(shù)</p><p>  void m_choose(void); //月份選擇函數(shù)</p><p>  void bianhuan(void); //年份顯示輔助函數(shù)&l

35、t;/p><p>  void bianhuan1(void);//時(shí)間顯示輔助函數(shù)</p><p>  changedata(uchar *song,uchar *diao,uchar *jie);//音樂(lè)符號(hào)串解釋函數(shù) </p><p>  void play(uchar *songdata);//奏樂(lè)函數(shù)</p><p>  uchar c

36、ode mamahao[]={ </p><p>  "6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|" </p><p>  "2.3_55_6_|321-|5.3_2_1_,6_1_|,5--" </p><p><b>  };</b></p><

37、p>  uchar code freq[36*2]={ </p><p>  0xA9,0xEF,//00220HZ ,1 //0 </p><p>  0x93,0xF0,//00233HZ ,1# </p><p>  0x73,0xF1,//00247HZ ,2 </p><p>  0x49,0xF2,//00262HZ ,2

38、# </p><p>  0x07,0xF3,//00277HZ ,3 </p><p>  0xC8,0xF3,//00294HZ ,4 </p><p>  0x73,0xF4,//00311HZ ,4# </p><p>  0x1E,0xF5,//00330HZ ,5 </p><p>  0xB6,0xF5

39、,//00349HZ ,5# </p><p>  0x4C,0xF6,//00370HZ ,6 </p><p>  0xD7,0xF6,//00392HZ ,6# </p><p>  0x5A,0xF7,//00415HZ ,7 </p><p>  0xD8,0xF7,//00440HZ 1 //12 </p&g

40、t;<p>  0x4D,0xF8,//00466HZ 1# //13 </p><p>  0xBD,0xF8,//00494HZ 2 //14 </p><p>  0x24,0xF9,//00523HZ 2# //15 </p><p>  0x87,0xF9,//00554HZ 3 //16 </p>

41、<p>  0xE4,0xF9,//00587HZ 4 //17 </p><p>  0x3D,0xFA,//00622HZ 4# //18 </p><p>  0x90,0xFA,//00659HZ 5 //19 </p><p>  0xDE,0xFA,//00698HZ 5# //20 </p>&l

42、t;p>  0x29,0xFB,//00740HZ 6 //21 </p><p>  0x6F,0xFB,//00784HZ 6# //22 </p><p>  0xB1,0xFB,//00831HZ 7 //23 </p><p>  0xEF,0xFB,//00880HZ `1 </p><p>  0x2

43、A,0xFC,//00932HZ `1# </p><p>  0x62,0xFC,//00988HZ `2 </p><p>  0x95,0xFC,//01046HZ `2# </p><p>  0xC7,0xFC,//01109HZ `3 </p><p>  0xF6,0xFC,//01175HZ `4 </p>&l

44、t;p>  0x22,0xFD,//01244HZ `4# </p><p>  0x4B,0xFD,//01318HZ `5 </p><p>  0x73,0xFD,//01397HZ `5# </p><p>  0x98,0xFD,//01480HZ `6 </p><p>  0xBB,0xFD,//01568HZ `6#

45、</p><p>  0xDC,0xFD,//01661HZ `7 //35 </p><p><b>  }; </b></p><p>  //****************************** </p><p>  //音樂(lè)符號(hào)串解釋函數(shù)</p><p>  changed

46、ata(uchar *song,uchar *diao,uchar *jie) </p><p><b>  { </b></p><p>  uchar i,i1,j; </p><p>  char gaodi;</p><p>  uchar banyin; </p><p>  uchar

47、 yinchang;//Òô³¤ </p><p>  uchar code jie7[8]={0,12,14,16,17,19,21,23}; </p><p>  *diao=*song; </p><p>  for(i=0,i1=0;;) </p><p><b>  { </b

48、></p><p><b>  gaodi=0; </b></p><p>  banyin=0; </p><p>  yinchang=4; </p><p>  if((*(song+i)=='|') || (*(song+i)==' ')) i++; </p>

49、;<p>  switch(*(song+i)) </p><p><b>  { </b></p><p>  case ',': gaodi=-12;i++;</p><p><b>  break; </b></p><p>  case '`&

50、#39;: gaodi=12;i++; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  if(*(song+i)==0) </p><p><b>  { </b></p><p> 

51、 *(diao+i1)=0; </p><p>  *(jie+i1)=0; </p><p><b>  return; </b></p><p><b>  } </b></p><p>  j=*(song+i)-0x30; i++; </p><p>  j=jie7

52、[j]+gaodi; </p><p>  yinc: switch(*(song+i)) </p><p><b>  { </b></p><p>  case '#': </p><p><b>  i++;j++; </b></p><p&g

53、t;  goto yinc; </p><p>  case '-': </p><p>  yinchang+=4; </p><p><b>  i++; </b></p><p>  goto yinc; </p><p>  case '_': <

54、/p><p>  yinchang/=2; </p><p><b>  i++; </b></p><p>  goto yinc; </p><p>  case '.': </p><p>  yinchang=yinchang+yinchang/2; </p>

55、<p><b>  i++; </b></p><p>  goto yinc; </p><p><b>  } </b></p><p>  *(diao+i1)=j; </p><p>  *(jie+i1)=yinchang; </p>&l

56、t;p>  i1++; </p><p><b>  } </b></p><p><b>  } </b></p><p>  //****************************************** </p><p><b>  //奏樂(lè)函數(shù) </b

57、></p><p>  void play(uchar *songdata) </p><p><b>  { </b></p><p>  uchar i,c,j=0; </p><p><b>  uint n; </b></p><p>  uchar dia

58、odata[40]; </p><p>  uchar jiedata[40]; </p><p>  changedata(songdata,diaodata,jiedata); </p><p><b>  TR1=1; </b></p><p>  for(i=0;diaodata[i]!=0;i++)

59、 { </p><p>  tl0_f=freq[diaodata[i]*2];</p><p>  th0_f=freq[diaodata[i]*2+1]; </p><p>  for(c=0;c<jiedata[i];c++) </p><p><b>  { </b></p><p&g

60、t;  for(n=0;n<24;n++) </p><p>  {scankey(); </p><p>  if(y==0) { </p><p><b>  TR1=0; </b></p><p><b>  return; </b></p><p&

61、gt;<b>  }</b></p><p>  display();</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  TR1=0; </b></p><p>  fo

62、r(n=0;n<500;n++); </p><p><b>  TR1=1; </b></p><p><b>  } </b></p><p><b>  TR1=0; </b></p><p><b>  } </b></p>

63、<p>  void time0(void) interrupt 1</p><p><b>  {</b></p><p><b>  TH0=0x3c;</b></p><p><b>  TL0=0xb0;</b></p><p><b>  cnt

64、++;</b></p><p>  if(y==1&&(set_h==h&&set_m==m))sd=~sd;</p><p>  else sd=1;</p><p>  if(cnt==20)</p><p><b>  {</b></p><p>

65、<b>  sec++;</b></p><p><b>  cnt=0;</b></p><p>  if(sec==60)</p><p><b>  {</b></p><p><b>  sec=0;</b></p><p>

66、;<b>  m++;</b></p><p><b>  if(m==60)</b></p><p><b>  {</b></p><p><b>  m=0;</b></p><p><b>  h++;</b></p&g

67、t;<p><b>  if(h==24)</b></p><p><b>  {</b></p><p><b>  h=0;</b></p><p><b>  day++;</b></p><p>  switch(month)<

68、/p><p><b>  {</b></p><p>  case 1:if(day==32){month++;day=1;}break;</p><p>  case 2:if(year%4==0){if(day==30){month++;day=1;}}</p><p>  else{if(day==29){month+

69、+;day=1;}}break;</p><p>  case 3:if(day==32){month++;day=1;}break;</p><p>  case 4:if(day==31){month++;day=1;}break;</p><p>  case 5:if(day==32){month++;day=1;}break;</p><

70、;p>  case 6:if(day==31){month++;day=1;}break;</p><p>  case 7:if(day==32){month++;day=1;}break;</p><p>  case 8:if(day==32){month++;day=1;}break;</p><p>  case 9:if(day==31){mont

71、h++;day=1;}break;</p><p>  case 10:if(day==32){month++;day=1;}break;</p><p>  case 11:if(day==31){month++;day=1;}break;</p><p>  case 12:if(day==32){month++;day=1;}break;</p>

72、<p><b>  }</b></p><p>  if(month==13)</p><p><b>  {</b></p><p><b>  month=1;</b></p><p><b>  year++;</b></p>

73、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(x==0)bianhuan1(); </p>

74、;<p><b>  }</b></p><p><b>  }</b></p><p>  timer1() interrupt 3 </p><p><b>  { </b></p><p>  TL1=tl0_f;TH1=th0_f; //調(diào)入預(yù)定值

75、</p><p>  BEEP=~BEEP; //取反音樂(lè)輸出IO</p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {</b></p><p><b>  init();&l

76、t;/b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  display(); </p><p>  scankey();</p><p>  if(y==1&&(set_h==h&a

77、mp;&set_m==m))play(mamahao);</p><p>  else BEEP=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void init(void)</p><p><b>

78、;  {</b></p><p><b>  BEEP=0;</b></p><p>  TMOD=0x11;</p><p><b>  TH0=0x3c;</b></p><p><b>  TL0=0xb0;</b></p><p>&

79、lt;b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p><b>  ET1=1;</b></p><p><b>  TR1=0;</b></p><p><b>  EA=1;</b><

80、;/p><p><b>  }</b></p><p>  void display(void)</p><p><b>  {</b></p><p><b>  P2=0xfe;</b></p><p>  P0=a[qian];</p>

81、<p>  if(x%2==1&&cnt>=10)P0&=0x00;</p><p>  delay(20);</p><p><b>  P2=0xfd;</b></p><p>  P0=a[bai];</p><p>  if(x%2==1&&cnt>=

82、10)P0&=0x00;</p><p>  else if(x==0&&cnt>=10)P0|=0x80;</p><p>  delay(20);</p><p><b>  P2=0xfb;</b></p><p>  P0=a[shi];</p><p>  

83、if(((x%2==0&&x!=0)||x==7)&&cnt>=10)P0&=0x00;</p><p>  delay(20);</p><p><b>  P2=0xf7;</b></p><p><b>  P0=a[ge];</b></p><p&g

84、t;  if(((x%2==0&&x!=0)||x==7)&&cnt>=10)P0&=0x00;</p><p>  delay(20);</p><p><b>  }</b></p><p>  void m_choose(void)</p><p><b> 

85、 {</b></p><p>  switch(month)</p><p><b>  {</b></p><p>  case 1:if(day==32)day=1;else if(day==0)day=31;break;</p><p>  case 2:if(year%4==0){if(day==30

86、)day=1;else if(day==0)day=29;}</p><p>  else{if(day==29)day=1;else if(day==0)day=28;}break;</p><p>  case 3:if(day==32)day=1;else if(day==0)day=31;break;</p><p>  case 4:if(day==31)

87、day=1;else if(day==0)day=30;break;</p><p>  case 5:if(day==32)day=1;else if(day==0)day=31;break;</p><p>  case 6:if(day==31)day=1;else if(day==0)day=30;break;</p><p>  case 7:if(day

88、==32)day=1;else if(day==0)day=31;break;</p><p>  case 8:if(day==32)day=1;else if(day==0)day=31;break;</p><p>  case 9:if(day==31)day=1;else if(day==0)day=30;break;</p><p>  case 10:

89、if(day==32)day=1;else if(day==0)day=31;break;</p><p>  case 11:if(day==31)day=1;else if(day==0)day=30;break;</p><p>  case 12:if(day==32)day=1;else if(day==0)day=31;break;</p><p>&l

90、t;b>  }</b></p><p><b>  }</b></p><p>  void set_time(void)</p><p><b>  {</b></p><p>  qian=set_h/10;</p><p>  bai=set_h%10

91、;</p><p>  shi=set_m/10;</p><p>  ge=set_m%10;</p><p><b>  }</b></p><p>  void set_day(void)</p><p><b>  {</b></p><p>

92、;  qian=month/10;</p><p>  bai=month%10;</p><p>  shi=day/10;</p><p>  ge=day%10;</p><p><b>  }</b></p><p>  void bianhuan(void)</p><

93、;p><b>  {</b></p><p>  qian=year/1000;</p><p>  bai=year%1000/100;</p><p>  shi=year%100/10;</p><p>  ge=year%10;</p><p><b>  }</b&

94、gt;</p><p>  void bianhuan1(void)</p><p><b>  {</b></p><p>  qian=h/10;</p><p><b>  bai=h%10;</b></p><p><b>  shi=m/10;</b

95、></p><p><b>  ge=m%10;</b></p><p><b>  }</b></p><p>  void scankey(void)</p><p><b>  {</b></p><p><b>  if(K1==

96、0)</b></p><p><b>  {</b></p><p>  delay(20);</p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p>  while(K1==0);&l

97、t;/p><p><b>  x++;</b></p><p>  if(x==3)set_time();</p><p>  else if(x==5)set_day();</p><p>  else if(x==7)bianhuan();</p><p>  else if(x==8){x=0;

98、bianhuan1();}</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(K2==0)</b></p><p><b>  { </b></p><p>

99、  delay(20);</p><p><b>  if(K2==0)</b></p><p><b>  {</b></p><p>  while(K2==0);</p><p><b>  switch(x)</b></p><p><b&

100、gt;  {</b></p><p>  case 0:break;</p><p>  case 1:h++;if(h==24)h=0;bianhuan1();break;</p><p>  case 2:m++;if(m==60)m=0;bianhuan1();break;</p><p>  case 3:set_h++;

101、if(set_h==24)set_h=0;set_time();break;</p><p>  case 4:set_m++;if(set_m==60)set_m=0;set_time();break;</p><p>  case 5:day++;m_choose();set_day();break;</p><p>  case 6:month++;if(mo

102、nth==13)month=1;set_day();break;</p><p>  case 7:year++;bianhuan();break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></

103、p><p><b>  if(K3==0)</b></p><p><b>  { </b></p><p>  delay(20);</p><p><b>  if(K3==0)</b></p><p><b>  {</b><

104、;/p><p>  while(K3==0);</p><p><b>  y++;</b></p><p>  if(y==2)y=0;</p><p><b>  }</b></p><p><b>  }</b></p><p&

105、gt;<b>  if(K4==0)</b></p><p><b>  { </b></p><p>  delay(20);</p><p><b>  if(K4==0)</b></p><p><b>  {</b></p><

106、p>  while(K4==0);</p><p><b>  switch(x)</b></p><p><b>  {</b></p><p>  case 0:break;</p><p>  case 1:h--;if(h==255)h=23;bianhuan1();break;<

107、;/p><p>  case 2:m--;if(m==255)m=59;bianhuan1();break;</p><p>  case 3:set_h--;if(set_h==255)set_h=23;set_time();break;</p><p>  case 4:set_m--;if(set_m==255)set_m=59;set_time();break;

108、</p><p>  case 5:day--;m_choose();set_day();break;</p><p>  case 6:month--;if(month==0)month=12;set_day();break;</p><p>  case 7:year--;bianhuan();break;</p><p><b&g

109、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  void delay(uchar t) //延時(shí)0.1毫秒</p><p>

110、;<b>  { </b></p><p><b>  uchar i; </b></p><p><b>  do </b></p><p><b>  { </b></p><p>  for(i=0;i<23;i++) </p>

溫馨提示

  • 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)論