版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)作息時(shí)間控制器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)節(jié)日彩燈控制器
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)--- 時(shí)間控制器設(shè)計(jì)
- 單片機(jī)課間作息時(shí)間控制器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì):彩燈控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)控制的時(shí)鐘控制器
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制器
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的定時(shí)控制器設(shè)計(jì)
- 時(shí)鐘控制器單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)——基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 彩燈控制器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---水溫控制器設(shè)計(jì)
- 彩燈控制器的設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--水溫控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--溫度控制器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--節(jié)日彩燈控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---用單片機(jī)設(shè)計(jì)節(jié)日彩燈控制器
- 單片機(jī)課程設(shè)計(jì)——基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)
- 彩燈控制器的設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論