嵌入式課程設(shè)計(jì)報(bào)告具有日歷功能的電子時(shí)鐘_第1頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告具有日歷功能的電子時(shí)鐘_第2頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告具有日歷功能的電子時(shí)鐘_第3頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告具有日歷功能的電子時(shí)鐘_第4頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告具有日歷功能的電子時(shí)鐘_第5頁(yè)
已閱讀5頁(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、嵌入式系統(tǒng)開(kāi)發(fā)課程設(shè)計(jì)報(bào)告No.11嵌入式系統(tǒng)開(kāi)發(fā)題目:具有日歷功能的電子時(shí)鐘系別及專(zhuān)業(yè):計(jì)算機(jī)工程系計(jì)算機(jī)應(yīng)用技術(shù)班級(jí):10511學(xué)生姓名:權(quán)勝(14)王希(05)嚴(yán)家強(qiáng)( 23)指導(dǎo)老師:宋國(guó)明完成時(shí)間:2012-12-24/2012-12-28- 28 -課程設(shè)計(jì)(報(bào)告)具有日歷功能的電子時(shí)鐘一、課程設(shè)計(jì)目標(biāo)1、培養(yǎng)綜合運(yùn)用知識(shí)和獨(dú)立開(kāi)展實(shí)踐創(chuàng)新的能力;2、培養(yǎng)學(xué)生將理論知識(shí)與實(shí)際應(yīng)用結(jié)合在一起;3、培養(yǎng)學(xué)生的自我學(xué)習(xí)能力和解決問(wèn)題的能力;4、培養(yǎng)學(xué)生的協(xié)作意識(shí)和團(tuán)隊(duì)合作能力;5、培養(yǎng)學(xué)生的總結(jié)經(jīng)驗(yàn)的能力。二、研究方法及手段應(yīng)用1、問(wèn)題解決模塊化,將任務(wù)分成若干模塊,分模塊調(diào)試和完成任務(wù)

2、;2、查閱網(wǎng)上的相關(guān)素材,查閱相關(guān)論文資料,進(jìn)行比較、研究;3、在獨(dú)立思考的基礎(chǔ)上,請(qǐng)教老師,和同組同學(xué)討論、學(xué)習(xí);4、反復(fù)調(diào)試、總結(jié)經(jīng)驗(yàn)、排除差錯(cuò);5、連接PC和 EDUKIT-III ARM 嵌入式開(kāi)發(fā)實(shí)驗(yàn)箱,完成整個(gè)實(shí)驗(yàn)環(huán)境搭建;6、運(yùn)用 Vision4 和超級(jí)終端軟件進(jìn)行軟件編譯和進(jìn)行調(diào)試查看;7、使用ULINK2仿真器下載至實(shí)驗(yàn)箱進(jìn)行觀察、調(diào)試。1、程序啟動(dòng)后,蜂鳴器響三聲,8 位 LED數(shù)碼管顯示初始值“0”, 1 秒后顯示當(dāng)前日期和時(shí)間,日期格式:* 年 *月 * 日,時(shí)間格式:*(星期) -* 時(shí) * 分 *秒。 PC機(jī)超級(jí)終端同時(shí)顯示相關(guān)的信息。2、按下“D”鍵,可進(jìn)行日期、

3、時(shí)間的修改、設(shè)置:有按鍵時(shí),把鍵值顯示到最右側(cè),后續(xù)按鍵時(shí),把以前的按鍵左移,把當(dāng)前按鍵值顯示到最右側(cè)數(shù)碼管。設(shè)置完畢后,按“FUN”鍵確認(rèn),退出設(shè)置,時(shí)鐘顯示修改后的時(shí)間。3、顯示控制和鬧鐘設(shè)置:按鍵“*”,進(jìn)行數(shù)碼管閃爍/不閃爍的切換。按鍵“A”,設(shè)置鬧鐘時(shí)間。時(shí)間到達(dá)后,鬧鈴(蜂鳴器)響,按“FUN”鍵,關(guān)閉鬧鈴。按鍵設(shè)置時(shí),PC的超級(jí)終端顯示相應(yīng)的提示信息,同時(shí)把所按的鍵值,通過(guò)串口發(fā)送到超級(jí)終端顯示。4、鬧鈴聲音頻率及音量控制:按下“B”鍵時(shí),進(jìn)入鬧鈴聲音的設(shè)置。采集 AIN2的 ADC值, 根據(jù)ADC的值,控制蜂鳴器的聲音頻率??刂芇WM的頻率。1(為 100Hz至1KHz,最低值

4、和最高值可以根據(jù)實(shí)際效果調(diào)整)。并把實(shí)際調(diào)整的頻率打印到超級(jí)終端,如“100Hz”。采集 AIN1 的 ADC值,根據(jù)ADC的值,控制蜂鳴器的音量。控制PWM的占空比。1(為 0% 至100%,最低值和最高值可以根據(jù)實(shí)際效果調(diào)整). 并把實(shí)際調(diào)整的占空比打印到超級(jí)終端上,如“50%”。按“FUN”鍵結(jié)束設(shè)置。學(xué)生姓名:權(quán)勝 王希 嚴(yán)家強(qiáng)專(zhuān)業(yè)年級(jí):計(jì)算機(jī)應(yīng)用技術(shù)10511目錄前言 6第一章系統(tǒng)設(shè)計(jì) 6第一節(jié)課題目標(biāo)及總體方案 6第二節(jié)項(xiàng)目設(shè)計(jì)模塊描述及流程圖 61、模塊描述 62、總體設(shè)計(jì)流程圖 63、功能設(shè)計(jì)流程圖 84、鬧鐘功能程序流程圖 8一、主函數(shù)模塊 9二、功能實(shí)現(xiàn)模塊 101、8個(gè)

5、LED燈的按位顯示程序 102、獲取系統(tǒng)時(shí)間 113、 *鍵功能實(shí)現(xiàn) 124、按鍵判斷函數(shù) 125、時(shí)間及日期設(shè)置 136、閃爍/不閃爍切換函數(shù) 177、發(fā)聲函數(shù) 188、鍵值對(duì)應(yīng)到鍵盤(pán)函數(shù) 189、中斷函數(shù) 19三、鬧鐘功能實(shí)現(xiàn)模塊 201、 A鍵設(shè)置鬧鐘功能實(shí)現(xiàn) 202、鬧鐘設(shè)置函數(shù) 213、鬧鈴函數(shù) 23第二章結(jié)果與顯示 24結(jié)果顯示 24心得體會(huì) 24參考文獻(xiàn) 25近年來(lái), 隨著計(jì)算機(jī)技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來(lái)越重要的作用。嵌入式系統(tǒng)無(wú)疑成為當(dāng)前最熱門(mén)最有發(fā)展前途的IT 應(yīng)用領(lǐng)域之一。實(shí)時(shí)時(shí)鐘(RTC)器件是一種能提供日

6、歷/ 時(shí)鐘、數(shù)據(jù)存儲(chǔ)等功能的專(zhuān)用集成電路,常用作各種計(jì)算機(jī)系統(tǒng)的時(shí)鐘信號(hào)源和參數(shù)設(shè)置存儲(chǔ)電路。RTC具有計(jì)時(shí)準(zhǔn)確、耗電低和體積小等特點(diǎn),特別適用于在各種嵌入式系統(tǒng)忠記錄事件發(fā)生的時(shí)間和相關(guān)信息,尤其是在通信工程、電力自動(dòng)化、工業(yè)控制等自動(dòng)化程度較高領(lǐng)域的無(wú)人職守環(huán)境。隨著集成電路技術(shù)的不斷發(fā)展,RTC器件的新品也不斷推出。這些新品不僅具有準(zhǔn)確的RTC,還有大容量的存儲(chǔ)器、溫度傳感器和A/D 數(shù)據(jù)采集通道等,已成為集RTC、數(shù)據(jù)采集和存儲(chǔ)于一體的綜合功能器件,特別適用于以微控制器為核心的嵌入式系統(tǒng)。關(guān)鍵字:嵌入式系統(tǒng)、實(shí)時(shí)時(shí)鐘RTC第一章系統(tǒng)設(shè)計(jì)第一節(jié)課題目標(biāo)及總體方案隨著嵌入式技術(shù)的發(fā)展,我們

7、身邊充斥著各類(lèi)各樣的嵌入式電子產(chǎn)品。實(shí)時(shí)時(shí)鐘(RTC)就是一種在現(xiàn)代電子設(shè)備中應(yīng)用非常普遍,可以幫助人們實(shí)時(shí)、準(zhǔn)確的掌握時(shí)間的器件,如手機(jī)、PDA及一些智能儀表都提供了時(shí)鐘顯示。我們本次課題的目標(biāo)就是要基于SAMSUNG S3C2410AL-芯片設(shè)計(jì)出一個(gè)實(shí)20時(shí)時(shí)鐘, 編寫(xiě) C語(yǔ)言可以通過(guò) Vision4 和超級(jí)終端軟件調(diào)試,然后通過(guò)ULINK2仿真器下載至實(shí)驗(yàn)箱內(nèi)進(jìn)行觀察。在試驗(yàn)箱中的LED顯示燈上顯示出時(shí)間和日歷。 另外, 我們將要實(shí)現(xiàn)的系統(tǒng)分為三個(gè)模塊實(shí)現(xiàn),每個(gè)模塊間相對(duì)獨(dú)立而又相互聯(lián)系。第二節(jié)項(xiàng)目設(shè)計(jì)模塊描述及流程圖1. 模塊描述:我先進(jìn)行了整個(gè)系統(tǒng)的規(guī)劃,將整個(gè)系統(tǒng)分為兩大模塊:

8、第一,主函數(shù)模塊;第二,功能實(shí)現(xiàn)模塊(進(jìn)行時(shí)間和鬧鐘的設(shè)定,以及其他一些顯示功能) ;第三,鬧鐘功能實(shí)現(xiàn)模塊。2. 總體設(shè)計(jì)流程圖:3、功能設(shè)計(jì)流程圖4、鬧鐘功能程序流程圖一、主函數(shù)模塊int i;int main(int argc,char *argv)sys_init();/ 初始化系統(tǒng)iic_init_8led(); / 初始化 8 個(gè) led 燈for(i=0;i8;i+)iic_write_8led(0x70, 0x10+i,0xfc);/8 個(gè)燈全 0for(i=0;i29|ucChar=0) iic_init_8led();while(1)if(rBCDYEAR=0x99)/ 獲

9、取系統(tǒng)日期及時(shí)間g_nYear = 0x1999;elseg_nYear = 0x2000 + rBCDYEAR;g_nMonth = rBCDMON;g_nWeekday = rBCDDAY;g_nDate = rBCDDATE;g_nHour = rBCDHOUR;g_nMin = rBCDMIN;g_nSec = rBCDSEC;if(g_nSec!=nTmp)/ 相同時(shí)間不顯示節(jié)約資源nTmp = g_nSec;break;3、 *鍵功能實(shí)現(xiàn)if(st2=1)/ 按 *鍵執(zhí)行閃爍for(a=0;a8;a+)iic_write_8led(0x70,0x10+a,0x00);/8 個(gè)燈熄滅

10、delay(1000); / 延時(shí) 1sdisplay_Time(); / 再顯示elsedisplay_Time(); / 未按下不變4、按鍵判斷函數(shù)void display(void)if(ucChar=0x01) / 判斷是否按下0 鍵uart_printf( n 按鍵 0, 數(shù)碼管顯示時(shí)間:n );rtc_display1(); / 顯示時(shí)間函數(shù) else if(ucChar=0x02) / 判斷是否按下1 鍵uart_printf( n 按鍵 1, 數(shù)碼管顯示日期:n );rtc_display2(); / 顯示日期函數(shù) else if(ucChar=0x14) / 判斷是否按下D鍵

11、uart_printf( n 按下鍵 D,進(jìn)入日期設(shè)置,請(qǐng)先輸入日期(格式 年年年年月月日日) 。輸入完成后按fun 鍵確認(rèn)。 n );setDate(); / 設(shè)置時(shí)間函數(shù) else if(ucChar=0x1c) / 判斷是否按下*鍵if(st3=1)/ 若按下 *鍵,數(shù)碼管閃爍顯示uart_printf( n 按下鍵 *, 數(shù)碼管停止閃爍顯示。n );st3=0;ss(); / 調(diào)用閃爍 /不閃爍切換else / 再次按下*鍵,數(shù)碼管停止閃爍uart_printf( n 按下鍵 *, 數(shù)碼管閃爍顯示。n );st3=1;ss(); else if(ucChar=0x11) / 判斷是否按

12、下A鍵uart_printf( n 按下鍵 A, 設(shè)置鬧鐘。請(qǐng)輸入鬧鐘時(shí)間, 按 fun 鍵確認(rèn)。n );isAlam=1; / 已設(shè)置了鬧鐘 alam_jiao(); / 調(diào)用鬧鈴函數(shù) else if(st1=1)/ 判斷當(dāng)前是否顯示時(shí)間,調(diào)用顯示時(shí)間函數(shù)rtc_display1(); else if(st1=2)/ 判斷當(dāng)前是否顯示日期,調(diào)用顯示日期函數(shù)rtc_display2();5、時(shí)間及日期設(shè)置函數(shù)void setDate(void)int i,u;ucChar=0;for(u=0;u8;u+)iic_write_8led(0x70,0x10+u,0x00);/ 燈滅 i=0;whi

13、le(1)iic_init_8led();while(g_nKeyPress-)keyboard_init();g_nKeyPress = 0; / 按鍵值置0while(g_nKeyPress = 0);/ 空循環(huán),等待有鍵按下iic_read_keybd(0x70, 0x1, &ucChar);if(i=8|i=17)/ 判斷日期和時(shí)間輸入完成while(1)while(g_nKeyPress-) keyboard_init(); g_nKeyPress=0; while(g_nKeyPress=0);iic_read_keybd(0x70, 0x1, &ucChar); ucChar=k

14、ey_set(ucChar);if(ucChar=0xff) / 按下FUN鍵確認(rèn)if(i=8)uart_printf( n 完成日期設(shè)置,繼續(xù)設(shè)置時(shí)間(格式 星期 - 時(shí)時(shí)分分秒秒)n );elseuart_printf( n 完成時(shí)間設(shè)置。n ); i+; break;if(i=9|i=18)/ 輸入超出,跳出程序break;if(ucChar != 0)/ 判斷是否有鍵按下,并對(duì)應(yīng)LED燈 8 位按位顯示ucChar= key_set(ucChar);switch(i)case 0:iic_write_8led(0x70, 0x10+4, numucChar);g_nYear=ucCha

15、r*4096; / 設(shè)置年i+;break;case 1:iic_write_8led(0x70, 0x10+5, numg_nYear/4096);iic_write_8led(0x70, 0x10+4, numucChar);g_nYear=g_nYear+ucChar*256;i+;break;case 2:iic_write_8led(0x70, 0x10+6, numg_nYear/4096);iic_write_8led(0x70, 0x10+5, numg_nYear/256%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nYear=

16、g_nYear+ucChar*16;i+;break;case 3:iic_write_8led(0x70, 0x10+7, numg_nYear/4096);iic_write_8led(0x70, 0x10+6, numg_nYear/256%16);iic_write_8led(0x70, 0x10+5, numg_nYear/16%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nYear=g_nYear+ucChar;i+;break;case 4:iic_write_8led(0x70, 0x10+0, numg_nYear/4096);

17、iic_write_8led(0x70, 0x10+7, numg_nYear/256%16);iic_write_8led(0x70, 0x10+6, numg_nYear/16%16);iic_write_8led(0x70, 0x10+5, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMonth=ucChar*16; / 設(shè)置月 i+;break;case 5:iic_write_8led(0x70, 0x10+1, numg_nYear/4096);iic_write_8led(0x70, 0x1

18、0+0, numg_nYear/256%16);iic_write_8led(0x70, 0x10+7, numg_nYear/16%16);iic_write_8led(0x70, 0x10+6, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+5, numg_nMonth/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMonth= g_nMonth+ucChar;i+;break;case 6:iic_write_8led(0x70, 0x10+2, numg_nYear/4096);iic

19、_write_8led(0x70, 0x10+1, numg_nYear/256%16);iic_write_8led(0x70, 0x10+0, numg_nYear/16%16);iic_write_8led(0x70, 0x10+7, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+6, numg_nMonth/16);iic_write_8led(0x70, 0x10+5, numg_nMonth%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nDate=ucChar*16; / 設(shè)置日i

20、+;break;case 7:iic_write_8led(0x70, 0x10+3, numg_nYear/4096);iic_write_8led(0x70, 0x10+2, numg_nYear/256%16);iic_write_8led(0x70, 0x10+1, numg_nYear/16%16);iic_write_8led(0x70, 0x10+0, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+7, numg_nMonth/16);iic_write_8led(0x70, 0x10+6, numg_nMonth%16);i

21、ic_write_8led(0x70, 0x10+5, numg_nDate/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nDate=g_nDate+ucChar;i+;break;case 9:for(u=0;u8;u+)iic_write_8led(0x70,0x10+u,0x00);/8 個(gè)燈滅i+;break;case 10:iic_write_8led(0x70, 0x10+5, numucChar);iic_write_8led(0x70, 0x10+4, 0x02);g_nWeekday=ucChar/;/ 設(shè)置星期i+;break

22、;case 11:iic_write_8led(0x70, 0x10+6, numg_nWeekday);iic_write_8led(0x70, 0x10+5, 0x02);iic_write_8led(0x70, 0x10+4, numucChar);g_nHour=ucChar*16; / 設(shè)置小時(shí)i+;break;case 12:iic_write_8led(0x70, 0x10+7, numg_nWeekday);iic_write_8led(0x70, 0x10+6, 0x02);iic_write_8led(0x70, 0x10+5, numg_nHour/16);iic_wri

23、te_8led(0x70, 0x10+4, numucChar);g_nHour=g_nHour+ucChar;i+;break;case 13:iic_write_8led(0x70, 0x10+0, numg_nWeekday);iic_write_8led(0x70, 0x10+7, 0x02);iic_write_8led(0x70, 0x10+6, numg_nHour/16);iic_write_8led(0x70, 0x10+5, numg_nHour%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMin=ucChar*16; /

24、設(shè)置分鐘i+;break;case 14:iic_write_8led(0x70, 0x10+1, numg_nWeekday);iic_write_8led(0x70, 0x10+0, 0x02);iic_write_8led(0x70, 0x10+7, numg_nHour/16);iic_write_8led(0x70, 0x10+6, numg_nHour%16);iic_write_8led(0x70, 0x10+5, numg_nMin/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMin=g_nMin+ucChar;i+;break

25、;case 15:iic_write_8led(0x70, 0x10+2, numg_nWeekday);iic_write_8led(0x70, 0x10+1, 0x02);iic_write_8led(0x70, 0x10+0, numg_nHour/16);iic_write_8led(0x70, 0x10+7, numg_nHour%16);iic_write_8led(0x70, 0x10+6, numg_nMin/16);iic_write_8led(0x70, 0x10+5, numg_nMin%16);iic_write_8led(0x70, 0x10+4, numucChar

26、);g_nSec=ucChar*16; / 設(shè)置秒鐘i+;break;case 16:iic_write_8led(0x70, 0x10+3, numg_nWeekday);iic_write_8led(0x70, 0x10+2, 0x02);iic_write_8led(0x70, 0x10+1, numg_nHour/16);iic_write_8led(0x70, 0x10+0, numg_nHour%16);iic_write_8led(0x70, 0x10+7, numg_nMin/16);iic_write_8led(0x70, 0x10+6, numg_nMin%16);iic_

27、write_8led(0x70, 0x10+5, numg_nSec/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nSec=g_nSec+ucChar;i+;break;case 18:rRTCCON =r RTCCON & (0xf) |0x1;/ No reset, Merge BCDcounters, 1/32768, RTC Control enablerBCDYEAR = rBCDYEAR & (0xff) | g_nYear;rBCDMON = rBCDMON & (0x1f) | g_nMonth;rBCDDAY = rBCDDAY

28、 & (0x7) | g_nWeekday;rBCDDATE = rBCDDATE & (0x3f) | g_nDate;rBCDHOUR = rBCDHOUR & (0x3f) | g_nHour;rBCDMIN = rBCDMIN & (0x7f) | g_nMin;rBCDSEC = rBCDSEC & (0x7f) | g_nSec;rRTCCON = 0x0;rtc_display1(); / 顯示時(shí)間函數(shù)break;6、閃爍/不閃爍切換函數(shù)void ss(void)if(st3=0) / 若按下 *鍵if(st1=1)/ 判斷當(dāng)前是否顯示時(shí)間,調(diào)用顯示時(shí)間函數(shù)st2=0;rtc_d

29、isplay1();else if(st1=2)/ 判斷當(dāng)前是否顯示日期,調(diào)用顯示日期函數(shù)st2=0;rtc_display2();else / 未按下鍵,再次判斷顯示日期還是時(shí)間,再進(jìn)行調(diào)用當(dāng)前顯示函數(shù)if(st1=1)st2=1;rtc_display1();else if(st1=2)st2=1;rtc_display2();7、發(fā)聲函數(shù)void jiao() int u;rGPFCON=0x5500;rGPFUP=0;rGPBCON = rGPBCON & 0xFFFFFC|1;rGPBDAT &= 0xFFFFFE;rGPFDAT=0/;/ 初始化蜂鳴器設(shè)置for(u=0;u1000

30、00;u+);rGPFDAT=0xF0;for(u=0;u100000;u+);delay(5000); / 延時(shí) 5srGPBDAT |= 1;delay(5000);rGPFCON = 0x55aa;8、鍵值對(duì)應(yīng)到鍵盤(pán)函數(shù)UINT8T key_set(UINT8T ucChar)switch(ucChar)case 1:case 2:case 3:case 4:case 5:ucChar-=1; break;case 9:case 10:case 11:case 12:case 13:ucChar-=4; break;case 17:case 18:case 19:case 20:case

31、 21:ucChar-=7; break;case 25: ucChar = 0xF; break;case 26: ucChar = +; break;case 27: ucChar = -; break;case 28: ucChar = *; break;case 29: ucChar = 0xFF; break; default: ucChar = 0;return ucChar;9、中斷函數(shù)void _irq rtc_int0_int(void)ClearPending(BIT_EINT0); rRTCRST = (13) | 3;than 30 g_nSecvoid _irq rt

32、c_int(void) / 到達(dá)設(shè)定鬧鐘時(shí)間,觸發(fā)中斷 int i;ClearPending(BIT_RTC); f_nIsRtcInt = 1;void _irq rtc_tick(void)ClearPending(BIT_TICK); f_unTickCount+;三、鬧鐘功能實(shí)現(xiàn)模塊1、 A鍵設(shè)置鬧鐘功能實(shí)現(xiàn)if(isAlam=1) / 按下A鍵設(shè)置鬧鐘/ 在超級(jí)終端上顯示已設(shè)定的鬧鐘為-uart_printf( %x:%x:%x%s,%x/%x/%x 已 設(shè) 定 鬧鐘 %x:%x:%x,%x/%x/%xr ,g_nHour,g_nMin,g_nSec,dayg_nWeekday,g_

33、nMonth,g_nDate,g_nYear,rALMHOUR,rALMMIN,rALMSEC,rALMYEAR,rALMMON,rALMDATE);if(f_nIsRtcInt=1) / 判斷到了設(shè)定的鬧鐘f_nIsRtcInt=0; / 到了鬧鐘時(shí)間久置為初始值isAlam=0; / 將設(shè)置的鬧鐘置0(已設(shè)置鬧鐘)uart_printf( n 鬧鐘叫了, 請(qǐng)按FUN鍵停止。n );naoz(); / 調(diào)用鬧鐘函數(shù)else / 未按下A鍵就不變uart_printf( %x:%x:%x %s,%x/%x/%xr,g_nHour,g_nMin,g_nSec,dayg_nWeekday,g_nM

34、onth,g_nDate,g_nYear);keyboard_init(); / 接受鍵盤(pán)的輸入,并且將值放在ucCharg_nKeyPress = 0;iic_read_keybd(0x70, 0x1, &ucChar);display(); / 按鍵判斷函數(shù)rRTCCON = 0x0;/ No reset, Merge BCD counters, 1/32768, RTCControl disable(for power consumption)void naoz(void) / 鬧鐘函數(shù)int i;while(1) / 鬧鐘響后,按FUN鍵停止while(g_nKeyPress-)key

35、board_init(); / 接受鍵盤(pán)的輸入,并且將值放在ucCharg_nKeyPress=0;iic_read_keybd(0x70, 0x1, &ucChar);ucChar=key_set(ucChar);if(ucChar=0xff) / 按下FUN鍵ucChar=0; / 給按鍵值置0uart_printf( n 鬧鐘已停止。n );return;iic_init_8led();/8 個(gè) LED燈全滅for(i=0;i8;i+)iic_write_8led(0x70,0x10+i,0x00);display_Time(); / 調(diào)用系統(tǒng)時(shí)間顯示jiao(); / 調(diào)用發(fā)聲函數(shù)2、

36、鬧鐘設(shè)置函數(shù)void alam(void)int i,u;ucChar=0;for(u=0;u8;u+)iic_write_8led(0x70,0x10+u,0x00);/8 個(gè) LED燈全滅i=0;while(1)iic_init_8led();while(g_nKeyPress-)keyboard_init();g_nKeyPress = 0; / 接受鍵盤(pán)的輸入,并且將值放在ucCharwhile(g_nKeyPress = 0);iic_read_keybd(0x70, 0x1, &ucChar);if(i=6)/ 判斷時(shí)間輸入是否完成while(1)while(g_nKeyPress

37、-)keyboard_init();g_nKeyPress=0; / 接受鍵盤(pán)的輸入,并且將值放在ucCharwhile(g_nKeyPress=0);iic_read_keybd(0x70, 0x1, &ucChar);ucChar=key_set(ucChar);if(ucChar=0xff) / 按下FUN鍵確認(rèn)輸入時(shí)間i+;break;if(i=7) / 判斷是否8 個(gè) LED燈都設(shè)置好了return; / 跳出程序if(ucChar != 0)/ 判斷有鍵按下,并且在相應(yīng)位上顯示ucChar= key_set(ucChar);switch(i)case 0:iic_write_8le

38、d(0x70, 0x10+6, 0x02);iic_write_8led(0x70, 0x10+5, 0x02);iic_write_8led(0x70, 0x10+4, numucChar);rALMHOUR=ucChar*16/;/ 設(shè)置鬧鐘的小時(shí)i+;break;case 1:iic_write_8led(0x70, 0x10+7, 0x02);iic_write_8led(0x70, 0x10+6, 0x02);iic_write_8led(0x70, 0x10+5, numrALMHOUR/16);iic_write_8led(0x70, 0x10+4, numucChar);rAL

39、MHOUR=rALMHOUR+ucChar;i+;break;case 2:iic_write_8led(0x70, 0x10+0, 0x02);iic_write_8led(0x70, 0x10+7, 0x02);iic_write_8led(0x70, 0x10+6, numrALMHOUR/16);iic_write_8led(0x70, 0x10+5, numrALMHOUR%16);iic_write_8led(0x70, 0x10+4, numucChar);rALMMIN=ucChar*16; / 設(shè)置鬧鐘的分鐘i+;break;case 3:iic_write_8led(0x7

40、0, 0x10+1, 0x02);iic_write_8led(0x70, 0x10+0, 0x02);iic_write_8led(0x70, 0x10+7, numrALMHOUR/16);iic_write_8led(0x70, 0x10+6, numrALMHOUR%16);iic_write_8led(0x70, 0x10+5, numrALMMIN/16);iic_write_8led(0x70, 0x10+4, numucChar);rALMMIN=rALMMIN+ucChar;i+;break;case 4:iic_write_8led(0x70, 0x10+2, 0x02);iic_write_8led(0x70, 0x10+1, 0x02);iic_write_8led(0x70, 0x10+0, numrALMHOUR/16);iic_write_8led(0x70, 0x10+7, numrALMHOUR%16); iic_write_8led(0x70, 0x1

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論