版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 單片機課程設計</b></p><p><b> 定時鬧鐘設計</b></p><p><b> 課程設計任務書</b></p><p> 題目: 基于單片機的定時鬧鐘 </p>
2、<p> 課程: 單片機課程設計 </p><p> 課程設計時間 2013年 10月28 日 至2013年11 月 10 日 共 2 周</p><p> 課程設計工作內(nèi)容與基本要求(設計要求、設計任務、工作計劃、所需相關資料)(紙張不夠可加頁)</p&
3、gt;<p> 1.設計要求:基于單片機的定時鬧鐘</p><p> 創(chuàng)新設計: 時間到發(fā)出聲音。</p><p> 2. 設計任務與要求</p><p> 2.1系統(tǒng)硬件電路設計</p><p> 根據(jù)該系統(tǒng)設計的功能要求選擇所用元器件,設計硬件電路。要求用Proteus繪制整個系統(tǒng)電路原理圖。</p>
4、<p><b> 2.2軟件設計</b></p><p> 根據(jù)該系統(tǒng)要求的功能進行軟件設計,繪制整個系統(tǒng)的軟件流程圖;根據(jù)流程圖編寫程序并匯編調(diào)試通過;列出軟件清單,軟件清單要求逐條加以注釋。</p><p> 2.3 Proteus仿真</p><p> 用Proteus對系統(tǒng)軟硬件進行仿真調(diào)試并通過。</p>
5、;<p> 2.4 編寫設計說明書</p><p> 內(nèi)容包括任務書、設計方案分析、硬件部分設計、軟件部分設計、調(diào)試結(jié)果整理分析、設計調(diào)試的心得體會等,字數(shù)不少于5000字;硬件部分設計要繪制整個系統(tǒng)電路原理圖,對各部分電路設計原理做出說明;軟件設計部分要(用visio2002畫圖軟件)繪制整個系統(tǒng)及各部分的軟件流程圖,列出程序清單,逐條加以注釋,并注明各程序功能塊的功能。</p>
6、<p> 3.工作計劃 </p><p><b> 4.主要參考資料</b></p><p> 單片機課程設計指導書 皮大能 北京理工大學出版社2012.7</p><p> 8051單片機實踐與應用 吳金戎 清華大學出版社2003.8</p><p> 單片機技術基礎教程與實踐
7、 夏路易 電子工業(yè)出版社 2008.1</p><p> 單片機原理及應用張毅剛 高等教育出版社 2012.11</p><p> 基于Proteus的單片機系統(tǒng)設計與仿真實例 蔣輝平 機械工業(yè)出版社 </p><p><b> 2007.7</b></p><p><b> 指
8、導老師簽字:</b></p><p> 日 期:</p><p><b> 目錄</b></p><p> 1. LCD電子鬧鐘的特點和功能介紹..............................1</p><p> 2. 設計實現(xiàn)方案......................
9、.................2</p><p> 2.1原理................................................2</p><p> 2.2 原理及工作過程說明.................................2</p><p> 3. 硬件設計.........................
10、..................4</p><p> 3.1主控芯片AT89C51的設計...................................4</p><p> 3.2 時鐘電路部分設計.........................................4</p><p> 3.3 LCD顯示電路部分............
11、..............................5</p><p> 4. 軟件設計.....................................................7</p><p> 4.1軟件設計概述..............................................7</p><p> 4.2
12、 主函數(shù)的設計.............................................7 </p><p> 4.3.1程序初始化..............................................7</p><p> 4.3.2鬧鐘的實現(xiàn).......................................8</p>
13、<p> 4.3.3顯示程序.........................................9</p><p> 附錄一 定時鬧鐘仿真電路圖................................10</p><p> 附錄二 定時鬧鐘程序代碼.................................11</p><
14、p> 1、LCD電子鬧鐘的特點和功能介紹</p><p> 時鐘是將小時、分鐘、秒鐘顯示于人的肉眼的計時裝置。而單片機模塊中最常見的正是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,因此得到了廣泛的使用。而LCD電子定時鬧鐘是以單片機為基礎的數(shù)字電路實現(xiàn)對時、分、秒的數(shù)字顯示的數(shù)字計時裝置,它的計時周期為24小時,
15、另外應有校時功能和一些顯示日期、鬧鐘等附加功能。一個基本的數(shù)字鐘電路主要由譯碼顯示器、“時”,“分”,“秒”,“星期”計數(shù)器、校時電路、報時電路和振蕩器組成。目前電子鐘廣泛用于各種私人和公眾場合,成為我們生活、工作和學習中不可缺少的好幫手。</p><p> 由于時鐘的實用性和在人們生活中的重要性,所以嘗試設計以單片機為核心的數(shù)字時鐘是很有意義的。鐘表原先的報時功能已經(jīng)原不能滿足人們?nèi)找嬖鲩L的要求,現(xiàn)代的電子時
16、鐘多帶有類似自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、通斷動力設備、甚至各種定時電氣的自動啟用等功能,本設計中LCD電子時鐘采用LCD顯示時間和日期年月,直觀實用,而且可以方便的校調(diào),附帶的萬年歷和定時功能也是很方便和實用的。</p><p><b> 2、設計實現(xiàn)方案</b></p><p><b> 2.1原理</b&g
17、t;</p><p> 本LCD定時鬧鐘,是以單片機及外圍接口電路為核心硬件,輔以其他外圍硬件電路,用匯編語言設計的程序來實現(xiàn)的。根據(jù)C51單片機的外圍接口特點擴展相應的硬件電路,然后根據(jù)單片機的指令設計出數(shù)字鐘相應的軟件,再利用軟件執(zhí)行一定的程序來實現(xiàn)數(shù)字鐘的功能。由于采用集成芯片性的單片機來制作電子鐘,這樣設計制作簡單而且功能多、精確度高,也可方便擴充其他功能,實現(xiàn)也十分簡單。本設計是利用AT89C51單片
18、機為主控芯片,由LCD、晶振、電阻、電容、發(fā)光二極管、開關、喇叭等元件組成硬件電路,通過編寫軟件程序來實現(xiàn)和控制的數(shù)字定時鬧鐘。如圖2.1所示。</p><p><b> 圖2.1</b></p><p> 2.2 原理及工作過程說明</p><p> ?。?)定時鬧鐘的基本功能如下 :</p><p> ?。╝)啟
19、動仿真軟件,使用LCD液晶顯示器來顯示現(xiàn)在的時間 。</p><p> (b)程序執(zhí)行之后顯示“Time:00:00:00”; 時間顯示的秒開始變化,并且LED閃爍,表示開始已經(jīng)計時。</p><p> ?。╟)由LED閃動來做秒計數(shù)表示。</p><p> ?。╠)當設定的鬧鐘時間到達后,鬧鈴開始發(fā)出“噠噠噠”的聲音。</p><p>
20、?。?)按鍵功能如下 :</p><p> 按鍵K1設置現(xiàn)在的時間和時調(diào)整;按鍵K2顯示鬧鐘設置的時間和分調(diào)整;按鍵K3設置鬧鈴的時間和設置完成;按鍵K4鬧鈴ON/OFF的狀態(tài)設置,設置為ON時連續(xù)三次發(fā)出“嘩”的一聲,設置為OFF發(fā)出“嘩”的一聲和鬧鐘時間到時,發(fā)出一陣聲響,按下本鍵可以停止聲響。</p><p> (3)調(diào)整計時器時間如下 :</p><p>
21、; 按下K1鍵,然后按K1調(diào)整小時,K2調(diào)整分鐘,按下K3表示時間設置完成。</p><p> ?。?)調(diào)整鬧鐘時間設置如下 :</p><p> 按下K3開始鬧鐘設置,LCD下一行顯示“Alarm:00:00”按下K1設置小時,按一下K2設置分鐘,再次按下K3設置完成,并且設置時間消失,當再次按一下K2時“Alarm:00:00再次顯示并馬上消失。按一下K4關閉鬧鐘,再次按下打開鬧鐘
22、。</p><p><b> 3、硬件設計</b></p><p> 3.1 主控芯片AT89C51的設計</p><p> 在本LCD電子鬧鐘設計中就是采用利用我們熟悉的AT89C51單片機為主控芯片。AT89C51單片機由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲器在物理上設計成程序存儲器和數(shù)據(jù)存儲器兩個獨
23、立的空間,片內(nèi)程序存儲器的容量為4KB,片內(nèi)數(shù)據(jù)存儲器為128個字節(jié)。89C51單片機有4個8位的并行I/O口:P0口,P1口,P2口和P3口。各個接口均由接口鎖存器,輸出驅(qū)動器,和輸入緩沖器組成。P1口是唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲器和數(shù)據(jù)存儲器擴展時,P0可作為分時復用
24、的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號.</p><p> 3.2 時鐘電路部分設計</p><p> AT89C51系列的單片機的時鐘方式分為內(nèi)部方式和外部方式。內(nèi)部方式就是在單片機的XTAL1和XTAL2的兩引腳外接晶振,就夠成了自激振蕩器在單片機內(nèi)部產(chǎn)生時鐘脈沖信號。外部時鐘方
25、式是把外部已經(jīng)有的時鐘信號引入到單片機內(nèi)部。時鐘電路在計算機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎。在一個單片機應用系統(tǒng)中,時鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢;二是指系統(tǒng)的標準定時時鐘,即定時時間。</p><p> 本LCD電子鬧鐘設計是采用內(nèi)部時鐘方式,用一個12MHz晶振和兩個30Pf瓷片電容組成,
26、為單片機提供標準時鐘,其中兩個瓷片電容起微調(diào)作用.其電路圖見圖3.1。</p><p><b> 圖3.1</b></p><p> 而之所以采用高性能的振蕩電路,因為:</p><p> 1.單片機電子鐘的計時脈沖基準是由外部晶振的頻率經(jīng)過12分頻后提供,采用內(nèi)部的定時/計數(shù)器來實現(xiàn)計時功能。所以,外接晶振頻率精確度直接影響電子鐘計時的
27、準確性。 </p><p> 2.單片機電 子鐘利用內(nèi)部定時/計數(shù)器溢出產(chǎn)生中斷(12M晶振一般為50ms)再乘以相應的倍率來實現(xiàn)秒、分、時的轉(zhuǎn)換。大家都知道從定時/計數(shù)器產(chǎn)生中斷請求到響 應中斷需要3-8個機器周期,定時中斷子程序中的數(shù)據(jù)入棧和重裝定時/計數(shù)器的初值還需要占用數(shù)個機器周期,還有從中斷入口轉(zhuǎn)到中斷子程序也要占用一定的 機器周期。</p><p> 3.3 LCD顯示電
28、路部分</p><p> 為了獲得更好的效果本設計并沒有采用常見的LED,而是采用了型號為1602的 LCD。LCD有LED數(shù)碼顯示更好的更的直觀效果,也更加經(jīng)久耐用。液晶顯示模塊體積小功耗低、顯示內(nèi)容豐富,現(xiàn)在字符型液晶顯示模塊已經(jīng)是單片機應用設計中最常用的信息顯示器件之一了。本LCD是2行16列液晶 可顯示2行16列英文字符,有8位數(shù)據(jù)總線D0-D7,RS,R/W,EN三個控制端口(共14線),工作電壓為5
29、V。沒背光,和常用的1602B功能和引腳一樣(除了調(diào)背光的二個線腳). 該模塊也可只用</p><p> D4-D7作為四位數(shù)據(jù)分兩次傳送。這樣的話可以節(jié)省MCU的I/O口資源。</p><p> 引腳說明,見表3.1。</p><p> VDD:電源正極,4.5-5.5V,通常使用5V電壓;</p><p> VL:LCD對比度調(diào)節(jié)
30、端,電壓調(diào)節(jié)范圍為0-5V。接正電源時對比度最弱,接地電源時對比度最高,但對比度過高時會產(chǎn)生“鬼影”,因此通常使用一個10K的電位器來調(diào)整對比度或者直接串接一個電阻到地;</p><p> RS:MCU寫入數(shù)據(jù)或者指令選擇端。MCU要寫入指令時,使RS為低電平;MCU要寫入數(shù)據(jù)時,使RS為高電平;</p><p> R/W:讀寫控制端。R/W為高電平時,讀取數(shù)據(jù);R/W為低電平時,寫入
31、數(shù)據(jù);</p><p> E:LCD模塊使能信號控制端。寫數(shù)據(jù)時,需要下降沿觸發(fā)模塊。</p><p> D0-D7:8位數(shù)據(jù)總線,三態(tài)雙向。如果MCU的I/O口資源緊張的話,該模塊也可以只使用4位數(shù)據(jù)線D4-D7接口傳送數(shù)據(jù)。本充電器就是采用4位數(shù)據(jù)傳送方式;</p><p> BLA: LED背光正極。需要背光時,BLA串接一個限流電阻接VDD,BLK接地
32、,實測該模塊的背光電流為50mA左右;</p><p> BLK: LED背光地端.</p><p> 表3.1 LCD顯示屏引腳說明</p><p><b> 4、軟件設計</b></p><p> 4.1 軟件設計概述</p><p> 這里用匯編的單片機程序構(gòu)成了本LCD電子鬧
33、鐘的軟件系統(tǒng)。該程序?qū)崿F(xiàn)時間及定時(時間以0點0分0秒為基準計算,鬧鈴定時以0時0分為基準計算)的顯示,有外中斷0和五個開關實現(xiàn)校時,鬧鐘功能。其中程序的晶振頻率為12MHz,最小計時單位為1/20秒。</p><p> 主芯片p0.1-p0.7輸出數(shù)據(jù)到LCD數(shù)據(jù)總線,p3.0-2.2輸出LCD控制信號,P2.1輸出聲音信號,.P1.0-P1.3輸入外部控制信號,整個軟件系統(tǒng)也是根據(jù)這個關系連接成一個完整的系
34、統(tǒng)。</p><p> 4.2 主函數(shù)的設計</p><p> 本LCD電子鬧鐘的的主程序流程圖如圖4.1所示:</p><p><b> 圖4.1 </b></p><p> 4.3.1 程序初始化</p><p> 在系統(tǒng)開始上電時,需要.首先初始化液晶:</p>
35、<p> void TimeInit()</p><p><b> {</b></p><p> write_com(0x01); //初始化1602液晶</p><p> write_com(0x80); //設置現(xiàn)實初始坐標</p><p> for(num=0;num<9;
36、num++) //顯示年月日</p><p><b> {</b></p><p> write_date(table[num]); </p><p><b> delay(5);</b></p><p><b> }</b></p><p>
37、; write_com(0x80+0x40+6); //寫出時間顯示部分的兩個冒號</p><p> write_date(':');</p><p><b> delay(5);</b></p><p> write_com(0x80+0x40+9);</p><p> write_da
38、te(':');</p><p><b> delay(5);</b></p><p> write_sfm(4,shi); //分別送去液晶顯示</p><p> write_com(0x80+0x40+4);</p><p> write_sfm(7,fen);</p>
39、<p> write_com(0x80+0x40+7);</p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x40+10)</p><p> 4.3.2 鬧鐘的實現(xiàn)</p><p> 鬧鐘功能的實現(xiàn)涉及到兩個方面:鬧鈴時間設定和是否鬧鈴判別與相應處理。鬧鈴時間設定
40、模塊的設計可參照時間設定模塊,這里著重闡述鬧鈴判別與處理模塊的設計問題。鬧鈴判別與.鬧鈴處理的關鍵在于判別何時要進行鬧鈴。當時十位、時個位、分十位、分個位中任一位發(fā)生改變(進位)時,就必須進行鬧鈴判別。程序設計思想如圖4.2。</p><p><b> 圖4.2 </b></p><p> 4.3.3 顯示程序</p><p> 顯
41、示程序包括時鐘顯示和定時顯示程序。具體程序見附錄。</p><p> 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表4.1是TC1602EL液晶模塊的內(nèi)部顯示地址。</p><p><b> 表4.1</b></p>&l
42、t;p> 附錄1 定時鬧鐘仿真電路圖</p><p> 附錄2 定時鬧鐘的控制程序代碼</p><p> #include<reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p>&l
43、t;p> sbit key1=P1^0; </p><p> sbit key2=P1^1;</p><p> sbit key3=P1^2;</p><p> sbit key4=P1^3;</p><p> sbit lcden=P2^2; </p><p> sbit l
44、cdrs=P2^0;</p><p> sbit lcdrw=P2^1;</p><p> sbit jdq=P2^3;</p><p> sbit led=P2^4; </p><p> sbit sound=P2^5;</p><p> int a,b,i,min,hour,minge,mi
45、nshi,hourge,hourshi,amin,ahour,aminge,aminshi,ahourge,ahourshi,sec,secshi,secge;</p><p> //unsigned char code x[]={0xFF,0xC7,0x83,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF};</p>
46、<p> //unsigned char code z[]={0xFF,0xE3,0xC1,0x80,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x7F,0xFF,0xFF};</p><p> uchar code table1[]={'0','1','2','3','4
47、39;,'5','6','7','8','9'};</p><p> uchar code table2[]="Time:00:00:00 ";</p><p> uchar code Alarm_1[]="Alarm:00:00 ";</p&g
48、t;<p> uchar code nul[]=" ";</p><p> uchar num1,num2;</p><p> bit flag=0;</p><p> void delay(unsigned int xms)//延時程序</p><p><b&
49、gt; {</b></p><p> uint i,j; </p><p> for(i=xms;i>0;i--)</p><p> for(j=124;j>0;j--);</p><p><b> }</b></p><p> void wri
50、te_com(uchar com) //LCD命令控制,寫指令函數(shù)</p><p><b> {</b></p><p> delay(5) ;</p><p><b> lcdrs=0;</b></p><p><b> P0=com;</b></p>
51、<p><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&
52、gt; }</b></p><p> void write_data(uchar date) //LCD數(shù)據(jù)控制,寫數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> lcdrs=1;
53、</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p&g
54、t;<p><b> lcden=0;</b></p><p><b> }</b></p><p> void time()//設置時間函數(shù)</p><p><b> {</b></p><p><b> while(1)&l
55、t;/b></p><p><b> {</b></p><p> if(key1==0) </p><p><b> {</b></p><p> delay(10);</p><p> if(key1==0)</
56、p><p><b> {</b></p><p> if(hour==23) //"時"設置</p><p><b> hour=0;</b></p><p><b> else</b></p><p><b>
57、; hour++;</b></p><p> hourge=hour%10;</p><p> hourshi=hour/10;</p><p> write_com(0x0f);</p><p><b> delay(2);</b></p><p> write_com(
58、0x80+6);</p><p> write_data(table1[hourge]); //"時"個位寫入LCD第二行第6位</p><p><b> delay(5);</b></p><p> write_com(0x80+5);</p><p><b>
59、 delay(2);</b></p><p> write_data(table1[hourshi]); //"時"十位寫入LCD第二行第5位</p><p> while(!key1);</p><p> //delay(1);</p><p><b> }<
60、/b></p><p><b> }</b></p><p> if(key2==0)</p><p><b> {</b></p><p> delay(10);</p><p> if(key2==0)</p><p><b&
61、gt; {</b></p><p> if(min==59)//"分"設置</p><p><b> min=0;</b></p><p><b> else</b></p><p><b> min++;</b></
62、p><p> minge=min%10;</p><p> minshi=min/10;</p><p> write_com(0x0f);</p><p> write_com(0x80+9);</p><p> write_data(table1[minge]); //
63、"分"個位寫入LCD第二行第9位</p><p><b> delay(1);</b></p><p> write_com(0x80+8);</p><p> write_data(table1[minshi]); //"分"十位寫入LCD第二行第8位</
64、p><p><b> delay(1);</b></p><p> while(!key2);</p><p><b> }</b></p><p><b> }</b></p><p> if(key3==0)</p><p&
65、gt;<b> {</b></p><p> delay(10);</p><p> if(key3==0)</p><p><b> {</b></p><p> write_com(0x0c); //整體顯示,關光標,不閃爍</p><p>
66、 TR1=1; //定時計數(shù)器1啟動</p><p> while(!key3);</p><p> break; //key3松開時,顯示時間"時""分"位均已設置完畢</p><p><b> }</b></
67、p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void alarm()//設置鬧鐘時間函數(shù)</p><p><b> {</b><
68、;/p><p><b> while(1)</b></p><p><b> {</b></p><p> if(key1==0)</p><p><b> {</b></p><p> delay(10);</p><p>
69、; if(key1==0)</p><p><b> {</b></p><p> if(ahour==23)//鬧鐘"時"設置</p><p><b> ahour=0;</b></p><p><b> else</b></p&g
70、t;<p><b> ahour++;</b></p><p> ahourge=ahour%10;</p><p> ahourshi=ahour/10;</p><p> write_com(0x0f);</p><p> //delay(2);</p><p> w
71、rite_com(0x80+0x40+8);</p><p> write_data(':');</p><p> write_com(0x80+0x40+7);</p><p> write_data(table1[ahourge]);</p><p><b> delay(1);</b><
72、;/p><p> write_com(0x80+0x40+6);</p><p> //delay(2);</p><p> write_data(table1[ahourshi]);</p><p><b> delay(1);</b></p><p> while(!key1);<
73、/p><p><b> }</b></p><p><b> }</b></p><p> if(key2==0) //鬧鐘"分"設置</p><p><b> {</b></p><p> delay
74、(10);</p><p> if(key2==0)</p><p><b> {</b></p><p> if(amin==59)</p><p><b> amin=0;</b></p><p><b> else</b><
75、;/p><p><b> amin++;</b></p><p> aminge=amin%10;</p><p> aminshi=amin/10;</p><p> write_com(0x0f);</p><p> //delay(2);</p><p> w
76、rite_com(0x80+0x40+10);</p><p> write_data(table1[aminge]);</p><p><b> delay(1);</b></p><p> write_com(0x80+0x40+9);</p><p> //delay(2);</p><
77、;p> write_data(table1[aminshi]);</p><p><b> delay(1);</b></p><p> while(!key2);</p><p><b> }</b></p><p><b> }</b></p>
78、<p> if(key3==0)</p><p> { flag=~flag;</p><p> delay(10);</p><p> if(key3==0)</p><p><b> {</b></p><p> write_com(0x0c);</p>
79、<p> write_com(0x80+0x40);</p><p> for(i=0;i<11;i++)</p><p> write_data(nul[i]);</p><p> while(!key3);</p><p> break; //設置結(jié)束,此時LCD第二行無數(shù)據(jù)顯
80、示,只有第一行有時間顯示</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void keyscan(
81、)//鍵盤掃描</p><p><b> {</b></p><p> if(key1==0)</p><p><b> {</b></p><p> delay(10);</p><p> if(key1==0)</p><p
82、><b> {</b></p><p> while(!key1); //key1鍵松開后執(zhí)行下一行程序</p><p> time(); //調(diào)用time()函數(shù),即時間設置</p><p><b> }</b></p><p><b>
83、; } </b></p><p> else if(key2==0)</p><p><b> {</b></p><p> delay(10);</p><p> if(key2==0)</p><p><b> {</b></p>
84、;<p> while(!key2)</p><p><b> {</b></p><p> ahourge=ahour%10;</p><p> ahourshi=ahour/10;</p><p> write_com(0x80+0x40+7);</p><p> w
85、rite_data(table1[ahourge]);</p><p><b> delay(5);</b></p><p> write_com(0x80+0x40+6);</p><p><b> delay(2);</b></p><p> write_data(table1[ahou
86、rshi]);</p><p> aminge=amin%10;</p><p> aminshi=amin/10;</p><p> write_com(0x80+0x40+10);</p><p> write_data(table1[aminge]);</p><p><b> delay(5
87、);</b></p><p> write_com(0x80+0x40+9);</p><p><b> delay(2);</b></p><p> write_data(table1[aminshi]);</p><p> write_com(0x80+0x40);</p><
88、p> for(i=0;i<11;++i)</p><p> write_data(Alarm_1[i]); //顯示鬧鐘設置的時間</p><p><b> }</b></p><p> write_com(0x80+0x40);</p><p> for(i=0;i
89、<11;i++)</p><p> write_data(nul[i]); //key2松開后,LCD只有第一行顯示時間,鬧鐘設置時間不顯示</p><p><b> }</b></p><p><b> }</b></p><p> else
90、if(key3==0)</p><p><b> {</b></p><p> delay(10);</p><p> if(key3==0)</p><p><b> {</b></p><p> while(!key3); //表示
91、鬧鐘時間設置退出</p><p> ahourge=ahour%10;</p><p> ahourshi=ahour/10;</p><p> write_com(0x80+0x40+7);</p><p> write_data(table1[ahourge]);</p><p><b> de
92、lay(5);</b></p><p> write_com(0x80+0x40+6);</p><p><b> delay(2);</b></p><p> write_data(table1[ahourshi]);</p><p> aminge=amin%10;</p><
93、p> aminshi=amin/10;</p><p> write_com(0x80+0x40+10);</p><p> write_data(table1[aminge]);</p><p><b> delay(5);</b></p><p> write_com(0x80+0x40+9);<
94、;/p><p><b> delay(2);</b></p><p> write_data(table1[aminshi]);</p><p> write_com(0x80+0x40);</p><p> for(i=0;i<11;++i)</p><p> write_data(
95、Alarm_1[i]);//顯示鬧鐘設置時間</p><p> alarm(); //調(diào)用鬧鐘時間設置函數(shù) </p><p><b> }</b></p><p><b> }</b></p><p> else if(key4==0)//以
96、下進行鬧鈴開關的設置</p><p><b> delay(5);</b></p><p> if(key4==0) </p><p><b> {</b></p><p> while(!key4);</p><p><b> a=a+1;</
97、b></p><p> if(a%2==0) //鬧鐘"on"</p><p><b> {</b></p><p> for(b=0;b<6;b++)</p><p><b> {</b></p><p> sound=~
98、sound; //蜂鳴器發(fā)出3次"嘩"的響聲</p><p> delay(200);</p><p><b> }</b></p><p><b> sound=1;</b></p><p><b> }</b></p>
99、<p> else if(a%2==1) //鬧鐘"off"</p><p><b> {</b></p><p> sound=0; //蜂鳴器發(fā)出1次"嘩"的響聲</p><p> delay(300);</p><
100、p><b> sound=1;</b></p><p> delay(300);</p><p><b> }</b></p><p><b> sound=1;</b></p><p><b> } </b></p><
101、;p><b> }</b></p><p> void lcd_init() //LCD初始化函數(shù)</p><p><b> {</b></p><p><b> lcden=0;</b></p><p><b> lcdrw=0;</b
102、></p><p> write_com(0x38); //設置8位格式,2行,5×7</p><p> write_com(0x0c); //整體顯示,關光標,不閃爍</p><p> write_com(0x06); //設定輸入方式,增量不轉(zhuǎn)移</p><p> write_com(0x01);
103、//清除屏幕顯示</p><p><b> delay(2);</b></p><p> write_com(0x80);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> write_data(ta
104、ble2[i]); //寫入顯示時間數(shù)據(jù)</p><p><b> delay(1);</b></p><p><b> }</b></p><p><b> }</b></p><p> void judge()</p><p><b&
105、gt; {</b></p><p> if(sec==60)</p><p><b> {min++;</b></p><p><b> sec=0;</b></p><p><b> }</b></p><p> if(min=
106、=60)</p><p><b> {</b></p><p><b> hour++;</b></p><p><b> min=0;</b></p><p><b> }</b></p><p> if(hour==2
107、4)</p><p><b> hour=0;</b></p><p><b> }</b></p><p> void init()//AT89C51初始化函數(shù)</p><p><b> {</b></p><p> key1=1;k
108、ey2=1;key3=1;key4=1;sec=0;a=0;sound=1;amin=-1; //四個按鍵均未按下,鬧鐘時間"分"的初值為1(防止仿真圖剛啟動時,就達到鬧鐘時間,蜂鳴器發(fā)出響聲)</p><p><b> //led=1;</b></p><p> TMOD=0x10; //定時計數(shù)器T1、T2均工作在方式1&l
109、t;/p><p><b> TH1=0x3C;</b></p><p> TL1=0xB0; //計數(shù)初值為15536</p><p><b> EA=1;</b></p><p><b> ET1=1;</b></p><p>
110、 TR1=1; //定時計數(shù)器T1啟動</p><p><b> }</b></p><p> void equa()</p><p><b> {</b></p><p> if(amin==min&&ahour==hour&&a%2=
111、=0) //顯示時間與鬧鐘設置時間完全一樣且鬧鐘"on"</p><p><b> {</b></p><p> jdq=0; //P2^3口的電位置0,繼電器啟動,外部LED-GREEN燈電路導通</p><p> sound=~sound; //蜂鳴器發(fā)
112、出"嘩嘩嘩"響聲</p><p><b> }</b></p><p> else jdq=1; </p><p><b> }</b></p><p> void led1() interrupt 3//LED1中斷函數(shù)</p><p>
113、<b> {</b></p><p><b> TL1=0xB0;</b></p><p><b> TH1=0x3C;</b></p><p><b> if(flag)</b></p><p> equa(); </p>
114、<p><b> num1++;</b></p><p><b> num2++;</b></p><p> if(num2>=20)</p><p><b> {sec++;</b></p><p><b> num2=0;</b&g
115、t;</p><p><b> judge();</b></p><p><b> }</b></p><p> if(num1==10) //計時10次50ms,即500ms</p><p><b> {</b></p><p><b&
116、gt; num1=0;</b></p><p> led=~led;//P2^4口電位取反,LED燈亮</p><p><b> }</b></p><p><b> }</b></p><p> void main() //主函數(shù)</p><p>
117、<b> {</b></p><p> lcd_init(); //調(diào)用LCD初始化函數(shù)</p><p> init(); //調(diào)用AT89C51初始化函數(shù)</p><p><b> while(1)</b></p><p><b> {</b></
118、p><p> keyscan(); //調(diào)用掃描函數(shù)</p><p> //顯示時間"秒"加1</p><p> minge=min%10;</p><p> minshi=min/10;</p><p> write_com(0x80+9);</p><p> wr
119、ite_data(table1[minge]);</p><p><b> delay(5);</b></p><p> write_com(0x80+8);</p><p> write_data(table1[minshi]);</p><p> hourge=hour%10;</p><
120、p> hourshi=hour/10;</p><p> write_com(0x80+6);</p><p> write_data(table1[hourge]);</p><p><b> delay(5);</b></p><p> write_com(0x80+5);</p>&l
121、t;p> write_data(table1[hourshi]);</p><p> write_com(0x80+7);</p><p> write_data(':');</p><p><b> delay(5);</b></p><p> write_com(0x80+10);&l
122、t;/p><p> write_data(':');</p><p><b> delay(5);</b></p><p> secge=sec%10;</p><p> secshi=sec/10;</p><p> write_com(0x80+12);</p>
123、;<p> write_data(table1[secge]);</p><p><b> delay(5);</b></p><p> write_com(0x80+11);</p><p> write_data(table1[secshi]);</p><p><b> }&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機定時鬧鐘課程設計
- 定時鬧鐘—單片機課程設計
- 單片機課程設計—定時鬧鐘設計
- 單片機課程設計—定時鬧鐘設計
- 單片機課程設計---定時鬧鐘設計
- 單片機課程設計--定時鬧鐘設計
- 課程設計--單片機定時鬧鐘設計報告
- 單片機課程設計---定時鬧鐘的設計
- 單片機課程設計——定時鬧鐘的設計
- 單片機課程設計--簡單定時鬧鐘系統(tǒng)
- 基于單片機的定時鬧鐘課程設計
- 單片機課程設計--基于51單片機的定時鬧鐘設計
- 單片機課程設計---- lcd電子定時鬧鐘設計
- c51單片機課程設計定時鬧鐘
- 單片機課程設計—帶有l(wèi)cd的定時鬧鐘
- 單片機課程設計--定時鬧鐘報告書
- 單片機課程設計--帶有l(wèi)cd顯示的定時鬧鐘
- 單片機課程設計(電子鬧鐘)
- 單片機定時鬧鐘論文
- 單片機課程設計--定時插座
評論
0/150
提交評論