版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于ATMega16單片機(jī)的</p><p><b> 鬧鐘設(shè)計(jì)</b></p><p><b> 班級:1102班</b></p><p><b> 姓名:陳獻(xiàn)彬 </b></p><p> 學(xué)號:2011210042</p>&l
2、t;p><b> 同組:陸彥瀟</b></p><p> 郵箱:1508467803@qq.com</p><p><b> 摘要</b></p><p> 本文主要講述基于AVR單片機(jī)的數(shù)字電子鬧鐘,能夠顯示年月日時(shí)分秒,具備閏年平年補(bǔ)償及鬧鈴功能。時(shí)鐘信號源采用單片機(jī)內(nèi)部定時(shí)器中斷實(shí)現(xiàn),該系統(tǒng)原理簡單,成
3、本低廉,操作簡單??刂坪诵臑锳tmel公司的AVR高性能單片機(jī),程序基于C語言開發(fā),可讀性強(qiáng)。顯示核心為字符液晶LCD1602,顯示效果穩(wěn)定。輸入模塊為6個(gè)獨(dú)立式按鍵,可操作性強(qiáng),便于使用。</p><p> 關(guān)鍵詞: AVR單片機(jī)、LCD1602、數(shù)字電子鬧鐘</p><p><b> Abstract</b></p><p> Thi
4、s paper mainly described the digital electronic based on AVR microcontroller able to display when the alarm clock, date of February alone, have a leap year provides compensation and alarm function. The clock signal sourc
5、e adopts singlechip internal timer interrupt achieve, this system theory is simple, low cost, simple operation. Atmel company control core for the AVR high-performance single chip microcomputer based on C language, progr
6、am development, readable. Show LCD1602 core to characters</p><p> Keywords: AVR microcontroller, LCD1602, digital electronic alarm clock</p><p><b> 系統(tǒng)構(gòu)造</b></p><p> 根
7、據(jù)系統(tǒng)設(shè)計(jì)要求,本設(shè)計(jì)由電源模、用戶設(shè)置鍵盤、報(bào)警模塊、顯示模塊組成,形成實(shí)時(shí)時(shí)鐘系統(tǒng)。總體的框圖如下:</p><p><b> 方案論證</b></p><p><b> 單片機(jī)的的選擇:</b></p><p> 方案一:使用功能較為簡單的89C51單片機(jī)作為控制器,其優(yōu)點(diǎn)是價(jià)格便宜。但是功能相對較為簡單,燒錄
8、比較復(fù)雜,不便于程序調(diào)試。</p><p> 方案二:使用功能齊全的ATMEGA16單片機(jī)作為控制器,內(nèi)部資源多,價(jià)格相對51稍貴,程序燒錄容易,便于系統(tǒng)調(diào)試。</p><p> 根據(jù)我們設(shè)計(jì)的實(shí)際要求,我需要一個(gè)性能較高,穩(wěn)定性好的單片機(jī),我們選擇了ATMEGA16單片機(jī)實(shí)現(xiàn)設(shè)計(jì)。</p><p><b> 時(shí)鐘信號源;</b><
9、/p><p> 方案一:采用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)時(shí)鐘,不需要外接芯片,成本較低,但是時(shí)間精度不高,時(shí)間掉電會丟失,只適合一般場合使用;</p><p> 方案二:使用時(shí)鐘芯片DS1302作為時(shí)鐘源,該芯片斷電后需要通過外接電池或者電容供電,因此電路相對比較復(fù)雜,成本也較高。</p><p> 結(jié)合我們應(yīng)用的實(shí)際情況,我們一般要求時(shí)鐘精度不是很高,只用于一般使用,故
10、選擇成本較低的方案一實(shí)現(xiàn)。</p><p><b> 顯示器</b></p><p> 方案一:使用數(shù)碼管掃描,顯示效果一般,只能顯示數(shù)字,顯示效果單一,不易于使用。</p><p> 方案二:使用LCD1602液晶顯示,可以顯示一些字符,顯示效果較好,易于使用。</p><p> 綜上,我們考慮到用戶的使用方便
11、,選擇用LCD1602作為顯示終端。</p><p><b> 報(bào)警</b></p><p> 方案一:通過使用語音芯片實(shí)現(xiàn)語音播報(bào)來實(shí)現(xiàn)報(bào)時(shí)和鬧鐘功能。但是接口比較麻煩,同時(shí)需要錄音和實(shí)現(xiàn)地址檢索。</p><p> 方案二:通過三極管控制蜂鳴器發(fā)出BEEP聲報(bào)警,電路簡單,價(jià)格便宜。比較適合我們這個(gè)設(shè)計(jì)的應(yīng)用。</p>
12、<p><b> 硬件電路:</b></p><p><b> 按鍵輸入模塊</b></p><p> 使用六個(gè)按鍵設(shè)計(jì),分別為鬧鐘/時(shí)鐘切換鍵,設(shè)置鍵,修改切換鍵,加,減,確認(rèn)。人性化設(shè)計(jì),將調(diào)節(jié)按鍵分開,使用加、減鍵分離,更加便于調(diào)試。</p><p><b> 控制器最小系統(tǒng):</b
13、></p><p> 系統(tǒng)使用ATmega16L作為系統(tǒng)主控芯片,主要接受到按鍵設(shè)置信號。對報(bào)警蜂鳴器和顯示器做出相應(yīng)控制。單片機(jī)不斷的掃描按鍵信息,通過LCD顯示時(shí)鐘和實(shí)現(xiàn)設(shè)置、鬧鐘的功能。</p><p><b> 顯示模塊:</b></p><p> 使用1602液晶的4線控制方法,減少端口使用,提高硬件資源的充分利用。偏置電
14、壓使用RP1對電源分壓輸入,可以對液晶對比度進(jìn)行調(diào)節(jié)。4線控制需要對一個(gè)字節(jié)的數(shù)據(jù)分兩次寫入液晶,所以在程序設(shè)計(jì)中每個(gè)字節(jié)需要使用2次傳輸完成。</p><p><b> 報(bào)警電路設(shè)置:</b></p><p> 使用PNP三極管驅(qū)動(dòng)蜂鳴器報(bào)警。當(dāng)單片機(jī)輸出為低電平時(shí),三級管導(dǎo)通,蜂鳴器發(fā)聲報(bào)警。這樣設(shè)計(jì)的原因在于,AVR單片機(jī)在上電時(shí)的電平輸出為高電平,這樣可以
15、防止在單片機(jī)上電時(shí)發(fā)出蜂鳴聲。</p><p><b> 程序設(shè)計(jì)框圖:</b></p><p><b> 主流程圖:</b></p><p><b> 按鍵設(shè)置程序:</b></p><p><b> 液晶屏驅(qū)動(dòng):</b></p>
16、<p><b> 模塊說明:</b></p><p><b> 1602引腳說明</b></p><p><b> 主要技術(shù)參數(shù):</b></p><p><b> 通信時(shí)序圖</b></p><p><b> 讀時(shí)序<
17、/b></p><p><b> 寫時(shí)序</b></p><p> 4線式數(shù)據(jù)傳送共分兩次實(shí)現(xiàn)一個(gè)字節(jié)數(shù)據(jù)的傳輸。</p><p><b> 時(shí)序參數(shù)</b></p><p><b> 字符顯示坐標(biāo)</b></p><p> AVR定時(shí)器
18、CTC模式介紹</p><p> CTC( 比較匹配時(shí)清零定時(shí)器)模式</p><p> 本設(shè)計(jì)的時(shí)間采用AVR單片機(jī)內(nèi)部定時(shí)器0的CTC模式實(shí)現(xiàn)。</p><p><b> 系統(tǒng)調(diào)試</b></p><p> 經(jīng)過分階段的調(diào)試,成功完成系統(tǒng)的調(diào)試。</p><p><b>
19、可以顯示時(shí)間</b></p><p><b> 調(diào)節(jié)時(shí)間</b></p><p> 系統(tǒng)整體運(yùn)行正常。 </p><p> 開機(jī)正常顯示初始化時(shí)間2013年9月10號星期2,00:00:00鬧鈴關(guān)。</p><p> 通過按鍵可以設(shè)置時(shí)間和鬧鐘。</p><p> 鬧鐘響起時(shí)
20、按下除功能鍵、設(shè)置鍵外其他鍵,鬧鐘停止。</p><p><b> 顯示信息正常。</b></p><p><b> 附錄</b></p><p><b> 電路總圖</b></p><p><b> 全部程序</b></p><
21、;p> #include <iom16v.h></p><p> #define bee PORTB.0</p><p> #include <alcd.h></p><p> #include<delay.h></p><p> int s,year;</p><p&g
22、t; int sec,min,hour,date,month,xuanze,flog,flog1,week;</p><p> int sec0,min0,hour0,bee_0,bee_turn;</p><p> unsigned char key,moshi;</p><p> unsigned char key_scan();</p>
23、<p> unsigned const date_run[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //閏年月份</p><p> unsigned const date_pin[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //平年月份</p><p> unsigned char
24、 leapyear(int year1);</p><p> unsigned char bee_clock();</p><p> interrupt [TIM0_COMP] void timer0_comp_isr(void)</p><p><b> {</b></p><p> unsigned char
25、 temp,temp1,tt;</p><p><b> s++;</b></p><p> if(s==1000)</p><p><b> {</b></p><p><b> s=0;</b></p><p> sec++; &
26、lt;/p><p> tt=bee_clock(); </p><p> if(bee_turn)</p><p><b> {</b></p><p><b> if(tt==1)</b></p><p><b> {</b></p>
27、;<p><b> bee=0;</b></p><p><b> bee_0=1;</b></p><p><b> }</b></p><p> } </p><p> if(bee_0>0)</p>
28、<p><b> {</b></p><p><b> bee_0++;</b></p><p> if(bee_0==20)</p><p> { </p><p><b> bee=1;</b></p><p&
29、gt;<b> bee_0=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(sec==60)</p><p><b> {</b></p><p><
30、b> sec=0;</b></p><p><b> min++;</b></p><p> if(min==60)</p><p><b> { </b></p><p><b> min=0;</b></p><p>
31、;<b> hour++;</b></p><p> if(hour==24)</p><p><b> { </b></p><p><b> hour=0; </b></p><p> temp=leapyear(year); </p>
32、<p> if(temp==0)</p><p><b> {</b></p><p> temp1=date_pin[month+1];</p><p><b> }</b></p><p> if(temp==1)</p><p><b>
33、; {</b></p><p> temp1=date_run[month+1]; </p><p><b> }</b></p><p><b> date++; </b></p><p><b> week++; </b></p>
34、<p> if(week==8)</p><p><b> {</b></p><p><b> week=1;</b></p><p><b> }</b></p><p> if(date==temp1)</p><p><
35、b> { </b></p><p><b> date=0;</b></p><p><b> month++;</b></p><p> if(month==13)</p><p><b> {</b></p><p
36、><b> month=0;</b></p><p><b> year++;</b></p><p> if(year==2099)</p><p><b> {</b></p><p> year=1899;</p><p><
37、b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p><p&
38、gt;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> unsigned char leapyear(int year1) //判斷某年是否閏年 閏年返回1,平年返回0 </p><p><b&
39、gt; {</b></p><p> if ((year1%400==0) || (year1%100!=0) && (year1%4==0))</p><p> return 1; </p><p><b> else </b></p><p> return 0; </p&
40、gt;<p><b> } </b></p><p> void guangbaioshanshuo() //光標(biāo)閃爍函數(shù)</p><p><b> {</b></p><p> switch(xuanze)</p><p><b> {
41、</b></p><p> case 0: lcd_gotoxy(14,1);_lcd_write_data(0x0d); break;</p><p> case 1: lcd_gotoxy(9,1);_lcd_write_data(0x0d); break; </p><p> case 2: lcd_gotoxy(6,1);_lcd_writ
42、e_data(0x0d); break; </p><p> case 3: lcd_gotoxy(3,1);_lcd_write_data(0x0d); break; </p><p> case 4: lcd_gotoxy(14,0);_lcd_write_data(0x0d); break; </p><p> case 5: lcd_gotoxy(10
43、,0);_lcd_write_data(0x0d); break; </p><p> case 6: lcd_gotoxy(7,0);_lcd_write_data(0x0d); break; </p><p> case 7: lcd_gotoxy(4,0);_lcd_write_data(0x0d); break;</p><p><b> }
44、 </b></p><p><b> }</b></p><p> void display_0()</p><p><b> {</b></p><p><b> char i;</b></p><p> unsigned
45、char dis[2]; </p><p> lcd_gotoxy(4,0); </p><p> lcd_putsf("Alarm");</p><p><b> //顯示時(shí)</b></p><p> dis[0]=hour0/10;</p><p> dis[1
46、]=hour0%10; </p><p> lcd_gotoxy(2,1);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p><
47、b> } </b></p><p> lcd_putchar(':'); </p><p><b> //顯示分</b></p><p> dis[0]=min0/10;</p><p> dis[1]=min0%10; </p>&l
48、t;p> lcd_gotoxy(5,1);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p><b> } </b></p
49、><p> lcd_putchar(':'); </p><p><b> //顯示秒</b></p><p> dis[0]=sec0/10;</p><p> dis[1]=sec0%10; </p><p> lcd_gotoxy(8,1);&l
50、t;/p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p><b> }</b></p><p> lcd_gotoxy(1
51、2,1); </p><p> switch(bee_turn)</p><p><b> {</b></p><p> case 0:lcd_putsf("off"); break;</p><p> case 1:lcd_putsf("on"); break;<
52、/p><p> } </p><p><b> }</b></p><p> void display()</p><p> { </p><p><b> char i;</b></p><
53、;p> unsigned char dis[4]; </p><p><b> //顯示年</b></p><p> dis[0]=year/1000;</p><p> dis[1]=year%1000/100;</p><p> dis[2]=year%1000%100/10;</p>
54、<p> dis[3]=year%1000%100%10; </p><p> lcd_gotoxy(1,0);</p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0');
55、 </p><p><b> } </b></p><p> lcd_putchar('-'); </p><p><b> //顯示月份</b></p><p> dis[0]=month/10;</p><p> dis[1]=month%1
56、0; </p><p> lcd_gotoxy(6,0);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p><b> }
57、 </b></p><p> lcd_putchar('-');</p><p><b> //顯示日期</b></p><p> dis[0]=date/10;</p><p> dis[1]=date%10; </p><p> lcd_gotoxy(9,
58、0);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p> } </p><p> lcd_gotoxy(12,0)
59、;</p><p> switch(week)</p><p><b> {</b></p><p> case 1:lcd_putsf("Mon"); break;</p><p> case 2:lcd_putsf("Tues"); break;</p>
60、<p> case 3:lcd_putsf("Wed"); break;</p><p> case 4:lcd_putsf("Thur"); break;</p><p> case 5:lcd_putsf("Fri"); break;</p><p> case 6:lcd_putsf
61、("Sat"); break;</p><p> case 7:lcd_putsf("Sun"); break;</p><p><b> } </b></p><p><b> //顯示時(shí)</b></p><p> dis[0]=hour/10;&
62、lt;/p><p> dis[1]=hour%10; </p><p> lcd_gotoxy(2,1);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0');
63、 </p><p><b> } </b></p><p> lcd_putchar(':'); </p><p><b> //顯示分</b></p><p> dis[0]=min/10;</p><p> dis[1]
64、=min%10; </p><p> lcd_gotoxy(5,1);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p><b&
65、gt; } </b></p><p> lcd_putchar(':'); </p><p><b> //顯示秒</b></p><p> dis[0]=sec/10;</p><p> dis[1]=sec%10; </p><p&g
66、t; lcd_gotoxy(8,1);</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> lcd_putchar(dis[i]+'0'); </p><p> } </p><p&
67、gt; lcd_gotoxy(12,1);</p><p> switch(bee_turn)</p><p><b> {</b></p><p> case 0:lcd_putsf("off"); break;</p><p> case 1:lcd_putsf("on&quo
68、t;); break;</p><p> } </p><p><b> }</b></p><p> void adjust(unsigned char i,unsigned char j)//切換修改 i為選擇位 j為加或減判斷 </p><p><b> {<
69、/b></p><p> int temp1; //臨時(shí)變量用于計(jì)算日期的上限 </p><p><b> switch(i)</b></p><p><b> {</b></p><p> case 1: //調(diào)秒</p><p>
70、;<b> {</b></p><p><b> if(j==0)</b></p><p><b> {</b></p><p><b> sec++; </b></p><p> if(sec>=60)</p><p&
71、gt;<b> {</b></p><p><b> sec=0;</b></p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p>
72、<p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> sec--;</b></p>
73、;<p> if(sec<=0)</p><p><b> {</b></p><p> sec=59; </p><p><b> } </b></p><p><b> }</b></p><p><b>
74、; break;</b></p><p><b> }</b></p><p><b> case 2:</b></p><p><b> { </b></p><p><b> if(j==0)</b></p>&
75、lt;p><b> {</b></p><p><b> min++;</b></p><p> if(min>=60)</p><p><b> {</b></p><p><b> min=0;</b></p>&l
76、t;p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p><b> } </b></p><p><b> }</b></p>
77、<p><b> else</b></p><p><b> {</b></p><p><b> min--;</b></p><p><b> if(min<0)</b></p><p><b> {</b&
78、gt;</p><p><b> min=59; </b></p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }
79、</b></p><p><b> case 3: </b></p><p><b> { </b></p><p><b> if(j==0)</b></p><p><b> {</b></p><p
80、><b> hour++; </b></p><p> if(hour>=24)</p><p><b> {</b></p><p><b> hour=0;</b></p><p><b> } </b></p>&
81、lt;p><b> else</b></p><p><b> {</b></p><p><b> } </b></p><p><b> }</b></p><p><b> else</b></p&g
82、t;<p><b> {</b></p><p><b> hour--;</b></p><p> if(hour<0)</p><p><b> {</b></p><p><b> hour=23; </b></p
83、><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> } </b></p><p><b> case 4:</b&g
84、t;</p><p><b> { </b></p><p><b> if(j==0)</b></p><p><b> {</b></p><p><b> week++;</b></p><p> if(week
85、>7)</p><p><b> {</b></p><p><b> week=1;</b></p><p><b> } </b></p><p><b> else</b></p><p><b>
86、{</b></p><p><b> } </b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b>
87、 week--;</b></p><p> if(week<1)</p><p><b> {</b></p><p><b> week=7; </b></p><p><b> }</b></p><p><b>
88、; }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> case 5: </b></p><p><b> { </b></p><p
89、><b> if(j==0)</b></p><p><b> {</b></p><p><b> date++;</b></p><p> temp1=leapyear(year);</p><p> if(temp1==0)</p><
90、p><b> {</b></p><p> if(date>date_pin[month+1])</p><p><b> {</b></p><p><b> date=0;</b></p><p><b> } </b></
91、p><p><b> else</b></p><p><b> {</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b><
92、/p><p><b> {</b></p><p> if(date>date_run[month+1])</p><p><b> {</b></p><p><b> date=0; </b></p><p><b> }<
93、;/b></p><p><b> else</b></p><p><b> {</b></p><p><b> } </b></p><p><b> }</b></p><p><b> }&l
94、t;/b></p><p><b> else</b></p><p><b> {</b></p><p><b> date--;</b></p><p> if(date<=0)</p><p><b> {
95、</b></p><p> temp1=leapyear(year);</p><p> if(temp1==0)</p><p><b> {</b></p><p> date=date_pin[month+1];</p><p><b> }</b>
96、;</p><p><b> else</b></p><p><b> {</b></p><p> date=date_run[month+1]; </p><p><b> }</b></p><p><b> } </
97、b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> case 6: </b></p><p><b>
98、 { </b></p><p><b> if(j==0)</b></p><p><b> {</b></p><p><b> month++;</b></p><p> if(month>=12)</p><p>&
99、lt;b> { </b></p><p><b> month=1;</b></p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p>&
100、lt;p><b> } </b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> month--;</b></
101、p><p> if(month<1)</p><p><b> {</b></p><p><b> month=12;</b></p><p><b> } </b></p><p><b> }</b></p
102、><p><b> break;</b></p><p><b> }</b></p><p><b> case 7: </b></p><p><b> { </b></p><p><b> if(j==
103、0)</b></p><p><b> {</b></p><p><b> year++; </b></p><p> if(year>=2099) </p><p><b> {</b></p><p> year=189
104、9;</p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p><b> } </b></p><p><b> }</b
105、></p><p><b> else</b></p><p><b> {</b></p><p><b> year--;</b></p><p> if(year<1899) </p><p><b> {</
106、b></p><p> year=2099;</p><p><b> } </b></p><p><b> }</b></p><p><b> break;</b></p><p><b> } </b><
107、;/p><p><b> } </b></p><p> lcd_clear(); </p><p> display();</p><p><b> }</b></p><p> void adjust_0(unsigned char i,unsigned
108、char j)//切換修改 i為選擇位 j為加或減判斷 </p><p><b> { </b></p><p><b> switch(i)</b></p><p><b> { </b></p><p><b> case 0:</b>&l
109、t;/p><p><b> {</b></p><p> if(bee_turn)</p><p><b> {</b></p><p> bee_turn=0;</p><p> } </p><p><b>
110、; else</b></p><p><b> {</b></p><p> bee_turn=1;</p><p> } </p><p><b> break;</b></p><p><b> }</b&
111、gt;</p><p> case 1: //調(diào)秒</p><p><b> {</b></p><p><b> if(j==0)</b></p><p><b> {</b></p><p><b> sec0++;
112、</b></p><p> if(sec0>=60)</p><p><b> {</b></p><p><b> sec0=0;</b></p><p><b> } </b></p><p><b> el
113、se</b></p><p><b> {</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {
114、</b></p><p><b> sec0--;</b></p><p> if(sec0<=0)</p><p><b> {</b></p><p> sec0=59; </p><p><b> } </b>&l
115、t;/p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> case 2:</b></p><p><b> { <
116、;/b></p><p><b> if(j==0)</b></p><p><b> {</b></p><p><b> min0++;</b></p><p> if(min0>=60)</p><p><b> {
117、</b></p><p><b> min0=0;</b></p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p><b&g
118、t; } </b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> min0--;</b></p><p>
119、; if(min0<0)</p><p><b> {</b></p><p><b> min0=59; </b></p><p><b> }</b></p><p><b> }</b></p><p><
120、;b> break;</b></p><p><b> }</b></p><p><b> case 3: </b></p><p><b> { </b></p><p><b> if(j==0)</b><
121、;/p><p><b> {</b></p><p><b> hour0++; </b></p><p> if(hour0>=24)</p><p><b> {</b></p><p><b> hour0=0;</b&
122、gt;</p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p><b> } </b></p><p><b> }<
123、/b></p><p><b> else</b></p><p><b> {</b></p><p><b> hour0--;</b></p><p> if(hour0<0)</p><p><b> {</
124、b></p><p> hour0=23; </p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></
125、p><p><b> } </b></p><p> lcd_clear();</p><p> display_0();</p><p><b> }</b></p><p> void clock()</p><p><b&
126、gt; {</b></p><p> display(); </p><p> key=key_scan(); </p><p> switch(key)</p><p><b> {</b></p><p> case 1: //時(shí)鐘 鬧鈴</p&
127、gt;<p><b> {</b></p><p><b> moshi=1;</b></p><p> flog=0; </p><p><b> break; </b></p><p><b> }</b></p
128、><p> case 2: //設(shè)置</p><p> { </p><p> flog1=1; </p><p><b> xuanze=1;</b></p><p> guangbaioshanshuo();</p><p&g
129、t; TIMSK=0x00;</p><p> while(flog1)</p><p><b> {</b></p><p> key=key_scan(); </p><p> switch(key)</p><p><b> {</b></p>
130、<p> case 3: //切換</p><p><b> {</b></p><p><b> xuanze++;</b></p><p> if(xuanze==8)</p><p><b> {</b></p><
131、p> xuanze=1; </p><p> } </p><p> guangbaioshanshuo();</p><p><b> break;</b></p><p><b> } </b></p><p> case 4:
132、 //加</p><p><b> {</b></p><p> adjust(xuanze,0);</p><p> guangbaioshanshuo();</p><p><b> break;</b></p><p><b> } &l
133、t;/b></p><p> case 5: //減</p><p><b> {</b></p><p> adjust(xuanze,1); </p><p> guangbaioshanshuo();</p><p><b> break;</b&
134、gt;</p><p><b> } </b></p><p> case 6: //確認(rèn)</p><p><b> {</b></p><p> flog1=0; </p><p> TIMSK=0x02; </p><p&
135、gt; _lcd_write_data(0x0c);</p><p><b> break; </b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p>&
136、lt;p><b> break; </b></p><p><b> }</b></p><p><b> case 3:</b></p><p><b> case 4:</b></p><p><b> case 5:<
137、/b></p><p><b> case 6:</b></p><p><b> { </b></p><p> if(bee_0!=0)</p><p><b> {</b></p><p><b> bee=1; &
138、lt;/b></p><p><b> bee_0=0;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b&
139、gt; }</b></p><p><b> }</b></p><p> void alarm_clock()</p><p><b> {</b></p><p> display_0(); </p><p> key=key_scan(); &l
140、t;/p><p> switch(key)</p><p><b> {</b></p><p> case 1: //時(shí)鐘 鬧鈴</p><p><b> {</b></p><p><b> moshi=0;</b></p&g
141、t;<p> flog=0; </p><p><b> break; </b></p><p><b> }</b></p><p> case 2: //設(shè)置</p><p> { </p><p>
142、 flog1=1; </p><p><b> xuanze=0;</b></p><p> guangbaioshanshuo();</p><p> while(flog1)</p><p><b> {</b></p><p> key=key_scan
143、(); </p><p> switch(key)</p><p><b> {</b></p><p> case 3: //切換</p><p><b> {</b></p><p><b> xuanze++;</b><
144、;/p><p> if(xuanze==4)</p><p><b> {</b></p><p> xuanze=0; </p><p> } </p><p> guangbaioshanshuo();</p><p><b>
145、 break;</b></p><p><b> } </b></p><p> case 4: //加</p><p><b> {</b></p><p> adjust_0(xuanze,0);</p><p> guangbaios
146、hanshuo();</p><p><b> break;</b></p><p><b> } </b></p><p> case 5: //減</p><p><b> {</b></p><p> adjust_0(xua
147、nze,1); </p><p> guangbaioshanshuo();</p><p><b> break;</b></p><p><b> } </b></p><p> case 6: //確認(rèn)</p><p><b> {<
148、;/b></p><p> flog1=0; </p><p> _lcd_write_data(0x0c);</p><p><b> break; </b></p><p><b> } </b></p><p><b> }<
149、/b></p><p><b> }</b></p><p><b> break;</b></p><p><b> } </b></p><p><b> case 3:</b></p><p><b>
150、 case 4:</b></p><p><b> case 5:</b></p><p><b> case 6:</b></p><p><b> { </b></p><p> if(bee_0!=0)</p><p>&
151、lt;b> {</b></p><p><b> bee=1; </b></p><p><b> bee_0=0;</b></p><p><b> }</b></p><p><b> break;</b></p&g
152、t;<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void main(void)</p><p><b> {</b></p><p&
153、gt; PORTA=0XFF;</p><p> DDRA=0X00;</p><p> DDRB=0X01;</p><p> TCCR0=0x0B;</p><p><b> OCR0=125;</b></p><p> lcd_init(16);</p><p
154、><b> bee=1; </b></p><p> #asm("sei")</p><p> year=2011;</p><p><b> month=5;</b></p><p><b> date=14;</b></p>
155、;<p> TIMSK=0x02; </p><p><b> week=1;</b></p><p><b> while(1)</b></p><p><b> { </b></p><p> switch(moshi)</p>
156、<p><b> {</b></p><p><b> case 0:</b></p><p> { </p><p><b> flog=1;</b></p><p> while(flog)</p><p>&l
157、t;b> {</b></p><p> clock(); </p><p><b> } </b></p><p> lcd_clear();</p><p><b> break;</b></p><p> }
158、 </p><p><b> case 1:</b></p><p><b> { </b></p><p><b> flog=1;</b></p><p> while(flog)</p><p><b> {</b&g
159、t;</p><p> alarm_clock(); </p><p><b> } </b></p><p> lcd_clear();</p><p><b> break;</b></p><p><b> }</b>&l
160、t;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> unsigned char key_scan()</p><p><b> {</b><
161、;/p><p> unsigned char key,key2;</p><p> key=PINA&0x3f;</p><p> if(key!=0x3f)</p><p><b> {</b></p><p> delay_ms(5);</p><p>
162、 key=PINA&0x3f;</p><p> if(key!=0x3f)</p><p><b> {</b></p><p> switch(key)</p><p><b> {</b></p><p> case 0x3e: key2=6; bre
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于atmega16單片機(jī)鬧鐘設(shè)計(jì)
- ATMEGA16單片機(jī)班培訓(xùn)實(shí)例.doc
- 0560、atmega16單片機(jī)班培訓(xùn)實(shí)例
- ATMEGA16單片機(jī)班培訓(xùn)實(shí)例.doc
- 0560、atmega16單片機(jī)班培訓(xùn)實(shí)例
- 基于atmega16單片機(jī)閉環(huán)控制的數(shù)控電流源設(shè)計(jì)
- 課程設(shè)計(jì)---基于atmega16單片機(jī)的音樂播放器設(shè)計(jì)
- 基于ATmega16單片機(jī)的足浴城服務(wù)管理系統(tǒng)下位機(jī)的設(shè)計(jì).pdf
- atmega16單片機(jī)實(shí)現(xiàn)的數(shù)控頻率計(jì)論文
- 基于atmega16單片機(jī)多功能充電器的硬件開發(fā)
- 基于ATmega16單片機(jī)的流量控制器的開發(fā).pdf
- 基于Atmega16單片機(jī)的數(shù)字式濕度傳感器.pdf
- 基于atmega16單片機(jī)多功能充電器的硬件開發(fā)畢業(yè)設(shè)計(jì)
- atmega16單片機(jī)數(shù)字頻率計(jì)——畢業(yè)論文
- 基于ATmega16單片機(jī)的熱釋電能量收集測試系統(tǒng)研究.pdf
- 基于atmega16單片機(jī)系統(tǒng)的小型室內(nèi)空氣凈化器的研制
- 基于單片機(jī)的鬧鐘
- 基于ATmega16的脈象儀設(shè)計(jì).pdf
- 基于atmega16的遙控車設(shè)計(jì)
- 基于atmega16的溫度測試系統(tǒng)
評論
0/150
提交評論