版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 目 錄</p><p> 1引言----------------------------------------------------3</p><p> 2課程設(shè)計的目的和要求以及目標----------------------------3</p><p> 2.1課程設(shè)計的目的----------------
2、---------------------------3</p><p> 2.2課程設(shè)計的要求-------------------------------------------3</p><p> 2.3課程設(shè)計的實現(xiàn)目標---------------------------------------3</p><p> 3系統(tǒng)結(jié)構(gòu)------------
3、------------------------------------4</p><p> 3.1電子時鐘的基本結(jié)構(gòu)及功能----------------------------------4</p><p> 3.2系統(tǒng)設(shè)計-----------------------------------------------4</p><p> 3.3硬件設(shè)計--
4、----------------------------------------------5</p><p> 4 軟件設(shè)計------------------------------------------------------10 4.1 系統(tǒng)軟件設(shè)計流程圖--------------------------------------------10 </p><p&g
5、t; 4.2 主程序流程圖--------------------------------------------------10</p><p> 4.3 LED顯示子程序-------------------------------------------------11 </p><p> 4.4 按鍵控制子程序--------------------------
6、----------------------12</p><p> 5 系統(tǒng)操作說明-------------------------------------------------14</p><p> 6 課程設(shè)計遇到的問題及解決方法------------------------------14</p><p> 6.1設(shè)計時遇到的問題-------
7、---------------------------------------14</p><p> 6.2解決辦法-----------------------------------------------15</p><p> 7課程設(shè)計總結(jié)--------------------------------------------15</p><p> 8
8、 參考文獻----------------------------------------------16</p><p> 附錄-----------------------------------------------------16</p><p><b> 1 引 言</b></p><p> 《單片原理及應(yīng)用》是一門技術(shù)性、
9、應(yīng)用性很強的學(xué)科,實踐教學(xué)是它的一個極為重要的環(huán)節(jié)。不論是硬件擴展、接口應(yīng)用還是編程方法、程序調(diào)試,都離不開實驗教學(xué)。</p><p> 本次課程設(shè)計的目的就是讓同學(xué)們在理論學(xué)習(xí)的基礎(chǔ)上,通過完成一個涉及MCS—51單片機都種資源應(yīng)用并具有綜合功能的小系統(tǒng)目標板的設(shè)計與編程應(yīng)用,而且能夠?qū)﹄娮与娐?、電子元器件、印制電路板等方面的知識進一步加深認識,同時在軟件編程、排版調(diào)試、焊接技術(shù)、相關(guān)儀器設(shè)備的使用技能等方面
10、得到較全面的鍛煉和提高,為今后能夠獨立進行某些單片機應(yīng)用系統(tǒng)的開發(fā)設(shè)計工作打下一定的基礎(chǔ)。</p><p> 單片機模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。 數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學(xué)習(xí)
11、、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù),使數(shù)字鐘具有走時準確、性能穩(wěn)定、攜帶方便等優(yōu)點,它還用于計時、自動報時及自動控制等各個領(lǐng)域。</p><p> 2課程設(shè)計的目的和要求以及目標</p><p> 2.1 課程設(shè)計目的</p><p> 本課程設(shè)計的目的是讓學(xué)生自己動手焊接單片機硬件電路板,使學(xué)生增進對單片機的感性認識
12、,加深對單片機理論方面的理解。進而了解單片機的內(nèi)部功能模塊的應(yīng)用。最后了解和掌握單片機應(yīng)用系統(tǒng)的硬件設(shè)計和制作過程、方法及實現(xiàn)。</p><p> 2.2課程設(shè)計要求 </p><p> 1、通過資料查閱理解單片機的組成結(jié)構(gòu);</p><p> 2、根據(jù)給出的主要芯片,設(shè)計相關(guān)電路原理圖,并軟件仿真;</p><p> 3、根據(jù)電路圖
13、焊接電路板,檢測并調(diào)試。</p><p> 4、總結(jié)課程設(shè)計報告。</p><p> 2.3課程設(shè)計的目標</p><p> 1、實現(xiàn)電子鐘自動計時功能。能顯示計時時間,顯示效果良好。</p><p> 2、能夠?qū)崿F(xiàn)校時功能,能對時間進行校準。</p><p><b> 3、擴展功能:</b&
14、gt;</p><p> 具有顯示年、月、日以及星期的功能。</p><p> 具定時鬧鐘功能,能設(shè)定定時鬧鐘,在時間到時能使蜂鳴器鳴叫。</p><p><b> 3系統(tǒng)結(jié)構(gòu)</b></p><p> 3.1電子時鐘的基本結(jié)構(gòu)及功能</p><p> 本次設(shè)計主要采用的STC89c52
15、單片機為主要芯片,另外還有時鐘電路,復(fù)位電路,顯示電路,以及按鍵。</p><p> 設(shè)計中所采用的是12M的晶振,以及定時器1和定時器0。其中定時器1與定時器0均工作在方式1,用于實現(xiàn)時鐘的時·分·秒以及年.月.日的調(diào)整并實現(xiàn)計時功能。顯示電路可以將單片機所輸出的內(nèi)容在一個8段共陰的數(shù)碼管上顯示出來,復(fù)位電路可以將電子時鐘的顯示值進行初始化,并且可以根據(jù)軟件所設(shè)定的值在數(shù)碼管上顯示出來,而
16、時鐘電路和控制電路則可以實現(xiàn)電子時分秒的調(diào)整,一旦你的時鐘走的過快或者太慢的話,可以通過調(diào)整按鍵來實現(xiàn)時鐘的校準,從而讓我們可以正確的把握時間。而且可以實現(xiàn)年.月.日的調(diào)整。</p><p><b> 3.2系統(tǒng)設(shè)計</b></p><p><b> 3.2.1計時方案</b></p><p> 通過單片機內(nèi)部的定時
17、器/計數(shù)器,采用軟件編程來實現(xiàn)時鐘計時,這種實現(xiàn)的時鐘一般稱為軟時鐘,這種方法的硬件線路簡單,通常用在對時間精度要求不高的場合;</p><p><b> 3.2.2顯示方案</b></p><p> 采用LED數(shù)碼管顯示,LED數(shù)碼管顯示亮度高,顯示內(nèi)容清晢,可分為靜態(tài)顯示和動態(tài)顯示,在有多個數(shù)碼管時一般采用動態(tài)顯示,動態(tài)顯示時須要占用CPU的大量時間來執(zhí)行動態(tài)
18、顯示程序,顯示效果往往和顯示程序的執(zhí)行相關(guān)。</p><p> 3.2.3開關(guān)的基本原理</p><p> 按鍵開關(guān)未按下,開關(guān)處于斷開狀態(tài),向端口輸入高電平;按鍵開關(guān)按下,開關(guān)處于閉合狀態(tài),向端口輸入低電平。因此可通過讀入P1.1的高低電平狀態(tài)來判斷按鍵開關(guān)是否按下。</p><p> 在MCS-51單片機系統(tǒng)中,獨立式鍵盤可直接用P0~P3四個并口中的I/
19、O線來連接,連接時,如果用的是P1~P3口,因為內(nèi)部帶上拉電阻,則外部可省力上拉電阻,如果用的是P0口,則須外部帶上接電阻。下圖是通過P1口低4位直接接4個獨立式按鍵的電路圖。直接判斷P1口低4位是否為低電平即可判斷相應(yīng)鍵是否按下。</p><p><b> 3.3硬件設(shè)計</b></p><p> 3.3.189C52的內(nèi)部結(jié)構(gòu)</p><p
20、> AT89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,功能強大的AT89C52單片機可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。</p><p> 3.3.2 89
21、C52引腳封裝與功能表 </p><p> AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,AT89C52可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p> 3.3.3
22、 單片機的接口分配 </p><p> P0~P3口是單片機與外部聯(lián)系的重要通道,他們均是4個8位的并行I/O端口,都是雙向的作用的端口,結(jié)構(gòu)上基本上相同,其中P1口在接數(shù)碼管等電路時,由于內(nèi)部已經(jīng)有上拉電阻,所以不用再外接上拉電阻,而P0口則必須接上拉電阻,上拉電阻的阻值一般為4.7歐姆~10k歐姆。由于P0口是一個真正的雙向口,在地址/數(shù)據(jù)方式下沒有漏極開路問題,不必接上拉電阻。P2口除啦作為通用端口外,
23、在需要擴展片外存儲器是還可作為其他的地址線接口,P3口在工作是也不需要上拉電阻,但是他的各個管腳有第二功能的定義,這樣在不同的情況下所使用的功能應(yīng)有所不同。</p><p> 3.3.4各個模塊電路</p><p> 本實驗單片機時鐘用內(nèi)部時鐘,模塊如下:</p><p> 采用軟件復(fù)位,即按鍵控制電路,其模塊如下: </p><p>
24、<b> 顯示電路模塊:</b></p><p> 在該模塊中P2口控制數(shù)碼管為的選擇,而P0口則控制各個數(shù)碼管所對應(yīng)的段碼分別應(yīng)顯示什么數(shù)字,從而將單片機輸出的內(nèi)容在是數(shù)碼管顯示出來.且LED采用的是動態(tài)顯示。</p><p><b> 鬧鈴定時:</b></p><p><b> 仿真圖:</b
25、></p><p> 實現(xiàn)了計時功能的仿真</p><p> 實現(xiàn)了定時功能的仿真</p><p> 實現(xiàn)了年、月、日顯示的仿真</p><p> 實現(xiàn)了記錄星期的仿真</p><p><b> 四 軟件設(shè)計</b></p><p> 4.1. 系統(tǒng)軟件
26、設(shè)計流程圖</p><p> 這次的數(shù)字電子鐘設(shè)計用到很多子程序,它們的流程圖如下所示。 主程序是先開始,然后啟動定時器,定時器啟動后在進行按鍵檢測,檢測完后,就可以顯示時間。</p><p><b> 軟件流程圖</b></p><p> 4.2 主程序流程圖</p><p> 時間顯示是先秒個位計算顯示,然后
27、是秒十位計算顯示,再是分個位計算顯示,再然后是分十位顯示,再就是時個位計算顯示,最后是時十位顯示。定時器中斷時是先檢測1秒是否到,1秒如果到,秒單元就加1;如果沒到,就檢測1分鐘是否到,1分鐘如果到,分單元就加1;如果沒到,就檢測1小時是否到,1小時如果到,時單元就加1,如果沒到,就顯示時間。</p><p><b> 主程序流程圖</b></p><p> 4.
28、3 LED顯示流程圖</p><p> 時間顯示是先秒個位計算顯示,然后是秒十位計算顯示,再是分個位計算顯示,再然后是分十位顯示,再就是時個位計算顯示,最后是時十位顯示。</p><p><b> LED顯示流程圖</b></p><p> 4.4 按鍵控制子程序</p><p> 按鍵處理設(shè)置為:如沒有按鍵,則
29、時鐘正常走時。當(dāng)按上鍵時確定調(diào)整的內(nèi)容,如顯示時間、年月日、定時時間、星期幾。</p><p> 當(dāng)按下邊的按鍵時,時鐘走動進入調(diào)整狀態(tài),以及確定調(diào)的位置。調(diào)整完畢按上鍵,實現(xiàn)調(diào)整功能。按鍵程序如下所示:</p><p> void d5(void) //顯示菜單調(diào)節(jié)函數(shù)</p><p><b> {</b><
30、;/p><p> switch(k2)</p><p><b> {</b></p><p> case 1:{h=&h1; m=&m1; s=&s1; }break;//菜單1:顯示時鐘時間</p><p> case 2:{h=&h2; m=&m2; s=&
31、s2; }break;//菜單2:顯示定時時刻 </p><p> case 3:{h=&year;m=&month;s=&day; }break;//菜單3:顯示日歷年月日</p><p> case 4:{h=&wday;m=&wday; s=&wday;}break;//菜單4:顯示星期0--6</p><p&g
32、t; default:{k2=0;h=&h1;m=&m1;s=&s1; }break;//復(fù)位顯示</p><p><b> }</b></p><p><b> }</b></p><p> void d7(void) //調(diào)節(jié)限制函數(shù)</p><
33、;p><b> {</b></p><p> if(k2==1||k2==2) //計時與定時限制</p><p> if (k1==1&&*p>=24) *p=0; //小時限制</p><p> else if(*p>=60) *p=0; //分、
34、秒限制</p><p> if(k2==3) //日歷限制</p><p> if (k1==1&&*p>=100)*p=0; //年限制</p><p> else if(k1==2&&*p>12) *p=1; //月限制</p><p>
35、; else if(k1==3&&*p>n) *p=1; //日限制</p><p> if(k2==4) </p><p> if (k1==2&&*p>6) *p=0; //星期限制</p><p><b> }</b><
36、/p><p> /**外部中斷1調(diào)節(jié)函數(shù)**/ </p><p> void timer0(void)interrupt 0 using 0 //外部中斷0調(diào)節(jié)</p><p><b> { </b></p><p> if(k1) //判斷是位調(diào)節(jié)還是菜單調(diào)節(jié)<
37、/p><p> { </p><p> (*p)++; //位加數(shù)調(diào)節(jié)</p><p> d7(); //調(diào)用調(diào)節(jié)限制函數(shù)</p><p> } </p><p> else </p><p> { &l
38、t;/p><p> k2++; //菜單加數(shù)調(diào)節(jié)</p><p> d5(); //調(diào)用調(diào)節(jié)菜單</p><p> } </p><p><b> }</b></p><p> void timer2(void)interrupt 2 using 2 //外部
39、中斷1調(diào)節(jié)</p><p><b> { </b></p><p> TR0=0;k5=0; //手動關(guān)鈴聲 </p><p> if(k2) //斷是否處于調(diào)節(jié)狀態(tài)</p><p><b> { </b></p>
40、<p> if (k2==4){k1++;} //期調(diào)節(jié)位選擇</p><p> if (++k1==1) p=h; //選擇時位</p><p> else if(k1==2) p=m; //選擇分位</p><p> else if(k1==3) p=s; //選擇秒位</p><p> else k1=
41、0; //復(fù)位</p><p><b> } </b></p><p><b> }</b></p><p> void delay(int z)</p><p><b> {</b></p><p><b>
42、int x,y;</b></p><p> for(x=z;x>=0;x--)</p><p> for(y=112;y>=0;y--);</p><p><b> }</b></p><p> 五 、 系統(tǒng)操作說明</p><p> 使用電子鐘時操作步驟如下:&
43、lt;/p><p> (1) 把電子鐘電路板上的ISP程序下載口JP1通過下載線連接到計算機打印機接口,在計算機上通過下載軟件Easy 51Pro把電子鐘程序下載到單片機內(nèi)。</p><p> (2) 將+5V電源接通電源開關(guān)。</p><p> (3) 電子鐘程序下載到單片機以后,電子鐘進入待命令狀態(tài)并顯示00:00:00.</p><p&g
44、t; (4)按一下上對電子鐘的的顯示內(nèi)容進行控制,分別顯示時間、定時、年月日、星期幾。并通過顯示屏顯示。</p><p> (5) 按下下鍵對顯示的內(nèi)容進行調(diào)節(jié),上鍵確定調(diào)整內(nèi)容,下鍵確定調(diào)節(jié)位。</p><p> (6)按上鍵進行復(fù)位。</p><p> 六、 課程設(shè)計遇到的問題及解決方法</p><p> 6.1設(shè)計時遇到的問
45、題</p><p> 1.程序在keilC中仿真測試通過后,protues中仿真時蜂鳴器一直發(fā)聲太小。</p><p> 2. 焊錫用量過多,形成焊點的錫堆積;焊錫過少,不足以包裹焊點。</p><p> 3. 焊錫連橋。指焊錫量過多,造成元器件的焊點之間短路。這在對超小元器件及細小印刷電路板進行焊接時要尤為注意。</p><p>
46、4.對LED進行焊接時要特別注意共陰極還是共陽極的LED顯示管。</p><p><b> 6.2解決辦法</b></p><p> 1.在protues中蜂鳴器模塊加一個晶體管對聲音進行放大。</p><p> 2.焊接電路時要特別小心,對于有加熱不足的情況,可以用烙鐵進行補焊。對于已形成黑膜的,則要"吃"凈焊錫,清
47、潔被焊元器件或印刷板表面, 重新進行焊接才行。</p><p> 3.對LED焊接時事先要查閱好相關(guān)資料,將單片機和LED的各個引腳進行正確焊接。</p><p> 4.選擇合適的電源電壓,保證電壓可以使各個器件能正常工作。</p><p> 七、 課程設(shè)計總結(jié)</p><p> 在這一次為期兩周的電子鐘的設(shè)計過程中,受益匪淺。通過
48、對自己在大學(xué)三年時間里所學(xué)的知識的回顧,并充分發(fā)揮對所學(xué)知識的理解和對畢業(yè)設(shè)計的思考及書面表達能力。這為自己今后進一步深化學(xué)習(xí),積累了一定寶貴的經(jīng)驗。</p><p> 我們基本對C語言編寫單片機有了基本的了解,同時單片機這門課有了更深的了解,同時通過這次真正的實際焊接單片機電路,對單片機的可編程性有了更深入的了解和認識,提高了自己學(xué)以致用,動手學(xué)習(xí)和查閱資料的能力,讓我受益匪淺。</p><
49、;p> 撰寫論文的過程也是專業(yè)知識的學(xué)習(xí)過程,它使我運用已有的專業(yè)基礎(chǔ)知識,對其進行設(shè)計,分析和解決一個理論問題或?qū)嶋H問題,把知識轉(zhuǎn)化為能力的實際訓(xùn)練。培養(yǎng)了我運用所學(xué)知識解決實際問題的能力。通過這次課程設(shè)計我發(fā)現(xiàn),只有理論水平提高了;才能夠?qū)⒄n本知識與實踐相整合,理論知識服務(wù)于教學(xué)實踐,以增強自己的動手能力。這個實驗十分有意義 我獲得很深刻的經(jīng)驗。通過這次課程設(shè)計,我們知道了理論和實際的距離,也知道了理論和實際想結(jié)合的重要性,
50、也從中得知了很多書本上無法得知的知識。我們的學(xué)習(xí)不但要立足于書本,以解決理論和實際教學(xué)中的實際問題為目的,還要以實踐相結(jié)合,理論問題即實踐課題,解決問題即課程研究,學(xué)生自己就是一個專家,通過自己的手來解決問題比用腦子解決問題更加深刻。學(xué)習(xí)就應(yīng)該采取理論與實踐結(jié)合的方式,理論的問題,也就是實踐性的課題。這種做法既有助于完成理論知識的鞏固,又有助于帶動實踐,解決實際問題,加強我們的動手能力和解決問題的能力。我們基本對C語言編寫單片機有了基本
51、的了解,同時單片機這門課有了更深的了解,同時通過這次真正的實際焊接單片機電路,對單片機的可編程性有了更深入的了解和認識,提高了自己學(xué)以致</p><p> 通過本次的課程設(shè)計,認識到了自己很多的不足,例如:動手能力不強,</p><p> C語言學(xué)習(xí)基礎(chǔ)比較差。在今后學(xué)習(xí)中一定要在這方面更加注意這些方面的練習(xí)。當(dāng)然,本次課程設(shè)計還存在一些不足的地方,希望老師給予批評和指正。</p
52、><p> 八、 參考文獻</p><p> [1]張毅剛,《單片機原理及應(yīng)用》,高等教育出版社,2003年</p><p> [2] 童詩白.華成美.模擬電子技術(shù)基礎(chǔ).高等教育出版社.第四版</p><p> [3]吳翔,《原理圖仿真與PCB設(shè)計》,電子工業(yè)出版社,2008年</p><p> [4]閻石
53、,《數(shù)字電子技術(shù)基礎(chǔ)》,高等教育出版社,2005年</p><p> [5] 通用電子元器件的選用與檢測》王昊等,電子工業(yè)出版社</p><p> [6]《單片機原理與應(yīng)用設(shè)計》 張毅剛等</p><p><b> 附錄:</b></p><p><b> 電路板焊接成果</b>&l
54、t;/p><p><b> 主程序:</b></p><p> #include <reg51.h> //包含頭文件</p><p> #define uchar unsigned char //數(shù)據(jù)類型定義</p><p> void delay(int);</p>
55、<p> uchar n=31; //定義月份天數(shù)變量并初始化</p><p> uchar ms=0; //定義毫秒變量并初始化</p><p> uchar h1=0,m1=0,s1=0; //定義計時時、分、秒變量并初始化</p>
56、<p> uchar h2=0,m2=1,s2=1; //定義定時時、分、秒變量并初始化 </p><p> uchar year=12,month=9,day=6; //定義年、月、日變量并初始化</p><p> uchar wday=4; //定義星期變量并初始化</p&
57、gt;<p> uchar *h=&h1,*m=&m1,*s=&s1; //定義顯視位變量并初始化a</p><p> uchar *p; //定義調(diào)節(jié)指針</p><p> uchar k1=0,k2=0,k3=0,k4=0,k5=0; //定義控制變量并初始化<
58、/p><p> uchar counter=0; //定義鈴聲節(jié)拍變量并初始化</p><p> uchar count=0; //定義鈴聲音符變量并初始化</p><p> sbit sound=P1^0; //定義鈴聲輸出位</p>
59、<p> uchar a[8]={1,2,3,4,5,6,7}; //定義顯視輸出位數(shù)組并初始化</p><p> uchar code tt[12]={</p><p> 0x3f,0x06,0x5b,0x4f,0x66,0x6d,</p><p> 0x7d,0x07,0x7f,0x6f,0x40,0x00</p>&
60、lt;p> }; //數(shù)碼管顯視代碼</p><p> uchar code array[]={</p><p> 0x18, 0x30, 0x1C, 0x10, 0x20, 0x40, 0x1C, 0x10, </p><p> 0x18, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x18, 0x40
61、, </p><p> 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x20, 0x18, 0x20,</p><p> 0x20, 0x80, 0xFF, 0x00, 0x20, 0x30, 0x1C, 0x10, </p><p> 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20, </p
62、><p> 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20, 0x26, 0x20, </p><p> 0x20, 0x20, 0x30, 0x80, 0xFF, 0x00, 0x20, 0x20,</p><p> 0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,</p><
63、;p> 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x20,</p><p> 0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,</p><p> 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x30,</p><p> 0x
64、1C, 0x10, 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20,</p><p> 0x20, 0x20, 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20,</p><p> 0x26, 0x20, 0x20, 0x20, 0x30, 0x80, 0x20, 0x30,</p><p> 0x1C, 0x10,
65、0x20, 0x10, 0x1C, 0x10, 0x20, 0x20,</p><p> 0x26, 0x20, 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, </p><p> 0x20, 0x15, 0x1F, 0x05, 0x20, 0x10, 0x1C, 0x10, </p><p> 0x20, 0x20, 0x26, 0x
66、20, 0x2B, 0x20, 0x30, 0x20,</p><p> 0x2B, 0x40, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x20,</p><p> 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40,</p><p> 0x20, 0x20, 0x2B, 0x20, 0x26,
67、0x20, 0x20, 0x20,</p><p> 0x30, 0x30, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x40,</p><p> 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40, 0x13, 0x60, </p><p> 0x18, 0x20, 0x15, 0x40, 0x13, 0x40, 0x1
68、8, 0x80,</p><p> 0x00, 0x00</p><p> }; //array[i]=0x00 代表歌曲演唱完畢</p><p> //array[i]=0xff 代表是休止符</p><p> uchar leap(uchar year) //判斷是否閏年并返回二月份的天數(shù)
69、</p><p> { //閏年返回29,平年返回28</p><p> year+=2000;</p><p> if(year%4==0)</p><p> {if(year%100==0)</p><p> {if(year/400==0)</p><p>
70、return 29;</p><p> else return 28;</p><p><b> }</b></p><p> else return 29;</p><p><b> }</b></p><p> else return 28;</p>
71、<p><b> }</b></p><p> uchar mon(uchar month) //計算并返回每個月的天數(shù)</p><p><b> {</b></p><p> switch(month)</p><p><b> {</b
72、></p><p><b> case 1:</b></p><p><b> case 3:</b></p><p><b> case 5:</b></p><p><b> case 7:</b></p><p>
73、;<b> case 8:</b></p><p><b> case 10:</b></p><p> case 12:return 31;break; //1,3,5,7,8,10,12月每月31天</p><p><b> case 4:</b></p><
74、p><b> case 6:</b></p><p><b> case 9:</b></p><p> case 11:return 30;break; //4,6,9,11月每月30天</p><p> case 2: return leap(year);break;//返回二月份的天數(shù)</p&
75、gt;<p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p> void music(void) //鈴聲音樂</p><p><b> {</b></p
76、><p> counter++; //節(jié)拍次數(shù)計數(shù) </p><p> if(counter>=array[count+1]) //節(jié)拍次數(shù)判斷</p><p><b> {</b></p><p> count+=2; //音符變換</p>&
77、lt;p> counter=0; //清0節(jié)拍數(shù)</p><p> if(count>=192) //判斷是否唱完一曲</p><p> count=0; //返回第一個音符</p><p><b> } </b></p><p><b> }<
78、;/b></p><p> void timer1(void) interrupt 1 using 1 //音調(diào)設(shè)置</p><p><b> {</b></p><p> sound=~sound; //鈴聲輸出</p><p> TH0=(0xffff-30*array[count
79、])>>8; //音頻設(shè)置</p><p> TL0=(0xffff-30*array[count])&0xff; </p><p><b> }</b></p><p> void timer3(void) interrupt 3 using 3 //計時中斷</p><p>&
80、lt;b> {</b></p><p> TH1=0xd8; //計數(shù)器初值重載</p><p> TL1=0xef; //定義單位節(jié)拍的延時大小為10ms</p><p> if(k5)music(); //調(diào)用鬧鈴音樂lns</p><
81、p> else TR0=0; //達到所設(shè)鬧鈴時間長度關(guān)鈴聲</p><p> if(++ms==100) //計時一秒鐘</p><p> {ms=0; </p><p> if(++s1==60) //計時一分鐘</p><p><b> {s1=0;</b
82、></p><p> if(++m1==60) //計時一小時</p><p><b> {m1=0;</b></p><p> if(++h1==24) //計時一天</p><p><b> {h1=0;</b></p><p> n
83、=mon(month); //取每月的天數(shù)</p><p> if(++day>n) //計時一個月</p><p><b> {day=1;</b></p><p> if(++month>12) //計時一年</p><p><b> {month=1;</
84、b></p><p><b> year++;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(++wday>6) //星期計數(shù)</p><p><b>
85、 wday=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> k5--; //鬧鈴時間長度倒記時</p><p> if(h1==h2&&m1==m2) //判斷是
86、否到定時時刻 </p><p><b> {</b></p><p> TR0=1; //開鈴聲中斷l(xiāng)ns</p><p> k5=s2; //設(shè)置鬧鈴時間長度</p><p><b> }</b></p><p>
87、<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void d3(void) //顯示輸出</p><p><b> {</b></p>&l
88、t;p> uchar sel=0x80,i ; //定義sel為位選通變量并初使化</p><p> if(k2) //判斷是否處于調(diào)時狀態(tài)</p><p><b> {</b></p><p> if(k2==4)a[0]=a[1]=a[4]=a[6]=a[7]=10; //星期顯
89、示設(shè)置</p><p> if(k1&&(k3--==0)) k3=255; //設(shè)置位調(diào)節(jié)閃爍初值</p><p><b> }</b></p><p> for(i=0;i<=8;i++) //循環(huán)顯示八個數(shù)碼管</p><p><b> {<
90、;/b></p><p> P2=0xff; //清屏</p><p> P0=tt[a[i]]; //輸出顯示數(shù)值</p><p> if(k1&&(k3>200)) //判斷是否閃爍</p><p> if (k1==1&&(
91、i==6||i==7))P2=0xff; //時位閃爍</p><p> else if(k1==2&&(i==3||i==4))P2=0xff; //分位閃爍</p><p> else if(k1==3&&(i==0||i==1))P2=0xff; //秒位閃爍</p><p> else P2=~sel;
92、 //非閃爍狀態(tài)</p><p> else P2=~sel; //非閃爍狀態(tài)</p><p> sel=sel>>1; //顯示位移位 </p><p> delay(1); </p><p><b> }</b></p><p>
93、;<b> }</b></p><p> void d2(void)</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> { </b></p><p> a
94、[0]=*s%10; //給顯示數(shù)組賦值</p><p> a[1]=*s/10;</p><p><b> a[2]=10;</b></p><p> a[3]=*m%10;</p><p> a[4]=*m/10;</p><p><b> a[5]=10;</b
95、></p><p> a[6]=*h%10;</p><p> a[7]=*h/10;</p><p> d3(); //調(diào)用顯示輸出函數(shù) </p><p><b> }</b></p><p><b> }</b></p><p&
96、gt; void d1(void) </p><p><b> {</b></p><p> TMOD=0x11;</p><p> TH1=0xff; TH0=0xff;</p><p> TL1=0xff; TL0=0xff;</p><p><b> IE=0
97、x8f;</b></p><p> TR1=1; </p><p> IT0=1; IT1=1;</p><p><b> IP=0x02;</b></p><p><b> }</b></p><p> void main(void)&l
98、t;/p><p><b> { </b></p><p> d1(); //調(diào)用中斷位設(shè)置函數(shù)</p><p> d2(); </p><p><b> }</b></p><p> void d5(void)
99、 //顯示菜單調(diào)節(jié)函數(shù)</p><p><b> {</b></p><p> switch(k2)</p><p><b> {</b></p><p> case 1:{h=&h1; m=&m1; s=&s1; }break;//菜單1:顯示時鐘時間&l
100、t;/p><p> case 2:{h=&h2; m=&m2; s=&s2; }break;//菜單2:顯示定時時刻 </p><p> case 3:{h=&year;m=&month;s=&day; }break;//菜單3:顯示日歷年月日</p><p> case 4:{h=&wday;m=&am
101、p;wday; s=&wday;}break;//菜單4:顯示星期0--6</p><p> default:{k2=0;h=&h1;m=&m1;s=&s1; }break;//復(fù)位顯示</p><p><b> }</b></p><p><b> }</b></p>
102、<p> void d7(void) //調(diào)節(jié)限制函數(shù)</p><p><b> {</b></p><p> if(k2==1||k2==2) //計時與定時限制</p><p> if (k1==1&&*p>=24) *p=0; //小時限
103、制</p><p> else if(*p>=60) *p=0; //分、秒限制</p><p> if(k2==3) //日歷限制</p><p> if (k1==1&&*p>=100)*p=0; //年限制</p><p> else if(k1
104、==2&&*p>12) *p=1; //月限制</p><p> else if(k1==3&&*p>n) *p=1; //日限制</p><p> if(k2==4) </p><p> if (k1==2&&*p>6) *p=0;
105、 //星期限制</p><p><b> }</b></p><p> /**外部中斷1調(diào)節(jié)函數(shù)**/ </p><p> void timer0(void)interrupt 0 using 0 //外部中斷0調(diào)節(jié)</p><p><b> { <
106、/b></p><p> if(k1) //判斷是位調(diào)節(jié)還是菜單調(diào)節(jié)</p><p> { </p><p> (*p)++; //位加數(shù)調(diào)節(jié)</p><p> d7(); //調(diào)用調(diào)節(jié)限制函數(shù)</p><p> } </p>
107、<p> else </p><p> { </p><p> k2++; //菜單加數(shù)調(diào)節(jié)</p><p> d5(); //調(diào)用調(diào)節(jié)菜單</p><p> } </p><p><b> }</b><
108、/p><p> void timer2(void)interrupt 2 using 2 //外部中斷1調(diào)節(jié)</p><p><b> { </b></p><p> TR0=0;k5=0; //手動關(guān)鈴聲 </p><p> if(k2) //斷是否處于調(diào)節(jié)狀態(tài)&l
109、t;/p><p><b> { </b></p><p> if (k2==4){k1++;} //期調(diào)節(jié)位選擇</p><p> if (++k1==1) p=h; //選擇時位</p><p> else if(k1==2) p=m; //選擇分位</p><p>
110、else if(k1==3) p=s; //選擇秒位</p><p> else k1=0; //復(fù)位</p><p><b> } </b></p><p><b> }</b></p><p> void delay(int z)</p><
111、;p><b> {</b></p><p><b> int x,y;</b></p><p> for(x=z;x>=0;x--)</p><p> for(y=112;y>=0;y--);</p><p><b> }</b></p>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子時鐘單片機課程設(shè)計
- 單片機課程設(shè)計---電子時鐘
- 單片機課程設(shè)計——電子時鐘
- 單片機課程設(shè)計——電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計-電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計----電子時鐘
- 單片機課程設(shè)計-電子時鐘
- 單片機課程設(shè)計---單片機電子時鐘
- 單片機課程設(shè)計--電子時鐘設(shè)計
- 數(shù)字電子時鐘-單片機課程設(shè)計
- 單片機課程設(shè)計---電子時鐘.doc
- 單片機課程設(shè)計--單片機模擬電子時鐘設(shè)計
- 單片機課程設(shè)計--- 單片機電子時鐘設(shè)計
- 單片機課程設(shè)計報告---電子時鐘
- 單片機課程設(shè)計報告--電子時鐘
- 單片機課程設(shè)計---電子時鐘.doc
- 單片機課程設(shè)計--單片機模擬電子時鐘設(shè)計
評論
0/150
提交評論