嵌入式課程設(shè)計報告具有日歷功能的電子時鐘_第1頁
嵌入式課程設(shè)計報告具有日歷功能的電子時鐘_第2頁
嵌入式課程設(shè)計報告具有日歷功能的電子時鐘_第3頁
嵌入式課程設(shè)計報告具有日歷功能的電子時鐘_第4頁
嵌入式課程設(shè)計報告具有日歷功能的電子時鐘_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 1 -嵌嵌入入式式系系統(tǒng)統(tǒng)開開發(fā)發(fā)課課程程設(shè)設(shè)計計專專周周報報告告題題目目:具具有有日日歷歷功功能能的的電電子子時時鐘鐘系系別別及及專專業(yè)業(yè):計計算算機機工工程程系系 計計算算機機應(yīng)應(yīng)用用技技術(shù)術(shù)班班級級:1 10 05 51 11 1學(xué)學(xué)生生姓姓名名:權(quán)權(quán)勝勝(1 14 4) 王王希希(0 05 5) 嚴(yán)嚴(yán)家家強強(2 23 3)指指導(dǎo)導(dǎo)老老師師:宋宋國國明明完完成成時時間間:2 20 01 12 2- -1 12 2- -2 24 4/ /2 20 01 12 2- -1 12 2- -2 28 8嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 2 -課

2、程設(shè)計(報告)課程設(shè)計(報告)、課程設(shè)計題目:具有日歷功能的電子時鐘具有日歷功能的電子時鐘、課程設(shè)計步驟及內(nèi)容一、課程設(shè)計目標(biāo)一、課程設(shè)計目標(biāo) 1、培養(yǎng)綜合運用知識和獨立開展實踐創(chuàng)新的能力;2、培養(yǎng)學(xué)生將理論知識與實際應(yīng)用結(jié)合在一起;3、培養(yǎng)學(xué)生的自我學(xué)習(xí)能力和解決問題的能力;4、培養(yǎng)學(xué)生的協(xié)作意識和團(tuán)隊合作能力;5、培養(yǎng)學(xué)生的總結(jié)經(jīng)驗的能力。二、研究方法及手段應(yīng)用二、研究方法及手段應(yīng)用1、問題解決模塊化,將任務(wù)分成若干模塊,分模塊調(diào)試和完成任務(wù);2、查閱網(wǎng)上的相關(guān)素材,查閱相關(guān)論文資料,進(jìn)行比較、研究;3、在獨立思考的基礎(chǔ)上,請教老師,和同組同學(xué)討論、學(xué)習(xí);4、反復(fù)調(diào)試、總結(jié)經(jīng)驗、排除差錯;

3、5、連接 PC 和 EDUKIT-III ARM 嵌入式開發(fā)實驗箱,完成整個實驗環(huán)境搭建;6、運用 Vision4 和超級終端軟件進(jìn)行軟件編譯和進(jìn)行調(diào)試查看;7、使用 ULINK2 仿真器下載至實驗箱進(jìn)行觀察、調(diào)試。三、課程設(shè)計預(yù)期效果三、課程設(shè)計預(yù)期效果1、程序啟動后,蜂鳴器響三聲,8 位 LED 數(shù)碼管顯示初始值“0” ,1 秒后顯示當(dāng)前日期和時間,日期格式:*年*月*日,時間格式:*(星期)-*時*分*秒。PC 機超級終端同時顯示相關(guān)的信息。嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 3 -2、按下“D”鍵,可進(jìn)行日期、時間的修改、設(shè)置:有按鍵時,把鍵值顯示到最右側(cè),后續(xù)按鍵時,把以前的按

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

5、率打印到超級終端,如“100Hz” 。采集 AIN1 的 ADC 值,根據(jù) ADC 的值,控制蜂鳴器的音量??刂?PWM1 的占空比。 (為 0% 至 100%,最低值和最高值可以根據(jù)實際效果調(diào)整).并把實際調(diào)整的占空比打印到超級終端上,如“50%” 。按“FUN”鍵結(jié)束設(shè)置。學(xué)生姓名: 權(quán)勝 王希 嚴(yán)家強 專業(yè)年級: 計算機應(yīng)用技術(shù) 10511 嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 4 -目錄目錄前言前言.5 5第一章系統(tǒng)設(shè)計第一章系統(tǒng)設(shè)計.6 6第一節(jié)課題目標(biāo)及總體方案第一節(jié)課題目標(biāo)及總體方案.6 6第二節(jié)項目設(shè)計模塊描述及流程圖第二節(jié)項目設(shè)計模塊描述及流程圖.5 51、模塊描述、模塊

6、描述.6 62、總體設(shè)計流程圖、總體設(shè)計流程圖.6 63、功能設(shè)計流程圖、功能設(shè)計流程圖.7 74、鬧鐘功能程序流程圖、鬧鐘功能程序流程圖.8 8一、主函數(shù)模塊一、主函數(shù)模塊.9 9二、功能實現(xiàn)模塊二、功能實現(xiàn)模塊.10101、8 8 個個 LEDLED 燈燈的的按位顯示程序按位顯示程序 .10102、獲取系統(tǒng)時間、獲取系統(tǒng)時間.11113、* *鍵功能實現(xiàn)鍵功能實現(xiàn).12124、按鍵判斷函數(shù)、按鍵判斷函數(shù).12125、時間及日期設(shè)置、時間及日期設(shè)置.13136、閃爍、閃爍/ /不閃爍切換函數(shù)不閃爍切換函數(shù).17177、發(fā)聲函數(shù)、發(fā)聲函數(shù).18188、鍵值對應(yīng)到鍵盤函數(shù)、鍵值對應(yīng)到鍵盤函數(shù).1

7、8189、中斷函數(shù)、中斷函數(shù).1919三、鬧鐘功能實現(xiàn)模塊三、鬧鐘功能實現(xiàn)模塊.20201、A A 鍵設(shè)置鬧鐘功能實現(xiàn)鍵設(shè)置鬧鐘功能實現(xiàn) .20202、鬧鐘設(shè)置函數(shù)、鬧鐘設(shè)置函數(shù).21213、鬧鈴函數(shù)、鬧鈴函數(shù).2323第二章第二章結(jié)果與顯示結(jié)果與顯示.2424結(jié)果顯示結(jié)果顯示.2424心得體會心得體會.2424參考文獻(xiàn)參考文獻(xiàn).2525嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 5 -前前 言言近年來,隨著計算機技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來越重要的作用。嵌入式系統(tǒng)無疑成為當(dāng)前最熱門最有發(fā)展前途的 IT 應(yīng)用領(lǐng)域之一。實時時鐘(RT

8、C)器件是一種能提供日歷/時鐘、數(shù)據(jù)存儲等功能的專用集成電路,常用作各種計算機系統(tǒng)的時鐘信號源和參數(shù)設(shè)置存儲電路。RTC 具有計時準(zhǔn)確、耗電低和體積小等特點,特別適用于在各種嵌入式系統(tǒng)忠記錄事件發(fā)生的時間和相關(guān)信息,尤其是在通信工程、電力自動化、工業(yè)控制等自動化程度較高領(lǐng)域的無人職守環(huán)境。隨著集成電路技術(shù)的不斷發(fā)展,RTC 器件的新品也不斷推出。這些新品不僅具有準(zhǔn)確的 RTC,還有大容量的存儲器、溫度傳感器和 A/D 數(shù)據(jù)采集通道等,已成為集 RTC、數(shù)據(jù)采集和存儲于一體的綜合功能器件,特別適用于以微控制器為核心的嵌入式系統(tǒng)。關(guān)鍵字:嵌入式系統(tǒng)、實時時鐘 RTC嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No

9、.11- 6 -第一章系統(tǒng)設(shè)計第一章系統(tǒng)設(shè)計第一節(jié)課題目標(biāo)及總體方案第一節(jié)課題目標(biāo)及總體方案隨著嵌入式技術(shù)的發(fā)展,我們身邊充斥著各類各樣的嵌入式電子產(chǎn)品。實時時鐘(RTC)就是一種在現(xiàn)代電子設(shè)備中應(yīng)用非常普遍,可以幫助人們實時、準(zhǔn)確的掌握時間的器件,如手機、PDA 及一些智能儀表都提供了時鐘顯示。我們本次課題的目標(biāo)就是要基于 SAMSUNG S3C2410AL-20 芯片設(shè)計出一個實時時鐘,編寫 C 語言可以通過 Vision4 和超級終端軟件調(diào)試,然后通過ULINK2 仿真器下載至實驗箱內(nèi)進(jìn)行觀察。在試驗箱中的 LED 顯示燈上顯示出時間和日歷。另外,我們將要實現(xiàn)的系統(tǒng)分為三個模塊實現(xiàn),每個

10、模塊間相對獨立而又相互聯(lián)系。 第第二二節(jié)項目設(shè)計模塊描述及流程圖節(jié)項目設(shè)計模塊描述及流程圖1. .模塊描述:模塊描述:我先進(jìn)行了整個系統(tǒng)的規(guī)劃,將整個系統(tǒng)分為兩大模塊:第一,主函數(shù)模塊;第二,功能實現(xiàn)模塊(進(jìn)行時間和鬧鐘的設(shè)定,以及其他一些顯示功能) ;第三,鬧鐘功能實現(xiàn)模塊。 2.總體設(shè)計流程圖總體設(shè)計流程圖:嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 7 -開始課程目標(biāo)確定總體方案規(guī)劃流程圖設(shè)計查閱資料模塊化設(shè)計編譯程序仿真硬件觀察調(diào)試得到預(yù)期效果優(yōu)化結(jié)束NY3、功能設(shè)計流程圖、功能設(shè)計流程圖嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 8 -開始程序主界面0 按鍵1 按鍵D 按鍵A 按鍵*按鍵

11、顯示時間顯示日期時間設(shè)置設(shè)置鬧鐘閃爍顯示按 FUN 鍵確認(rèn)再按*不閃爍顯示系統(tǒng)時間結(jié)束NNNN4、鬧鐘功能程序流程圖、鬧鐘功能程序流程圖嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 9 -開始程序主界面到達(dá)鬧鈴時間設(shè)置鬧鐘FUN 鍵確定鬧鈴響FUN 鍵停止顯示系統(tǒng)時間結(jié)束A 鍵按下?NNYY嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 10 -一、主函數(shù)模塊一、主函數(shù)模塊int i;int main(int argc,char *argv)sys_init(); /初始化系統(tǒng)iic_init_8led(); /初始化 8 個 led 燈for(i=0;i8;i+)iic_write_8led(0 x7

12、0, 0 x10+i,0 xfc); /8 個燈全 0for(i=0;i29|ucChar=0) iic_init_8led(); while(1) if(rBCDYEAR=0 x99) /獲取系統(tǒng)日期及時間 g_nYear = 0 x1999; else g_nYear = 0 x2000 + rBCDYEAR; g_nMonth = rBCDMON; g_nWeekday = rBCDDAY; g_nDate = rBCDDATE; g_nHour = rBCDHOUR; g_nMin = rBCDMIN; g_nSec = rBCDSEC; if(g_nSec!=nTmp) / 相同時間

13、不顯示 節(jié)約資源 nTmp = g_nSec;嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 12 - break; 3 3、* *鍵功能實現(xiàn)鍵功能實現(xiàn)if(st2=1) /按*鍵執(zhí)行閃爍for(a=0;a8;a+)iic_write_8led(0 x70,0 x10+a,0 x00); /8 個燈熄滅delay(1000);/延時 1sdisplay_Time();/再顯示elsedisplay_Time();/未按下不變4 4、按鍵判斷函數(shù)、按鍵判斷函數(shù)void display(void)if(ucChar=0 x01) /判斷是否按下 0 鍵 uart_printf(n 按鍵 0,數(shù)碼管顯示時

14、間:n); rtc_display1();/顯示時間函數(shù) else if(ucChar=0 x02) /判斷是否按下 1 鍵 uart_printf(n 按鍵 1,數(shù)碼管顯示日期:n);rtc_display2();/顯示日期函數(shù) else if(ucChar=0 x14) /判斷是否按下 D 鍵uart_printf(n 按下鍵 D,進(jìn)入日期設(shè)置,請先輸入日期(格式 年年年年月月日日)。輸入完成后按 fun 鍵確認(rèn)。n);setDate();/設(shè)置時間函數(shù) else if(ucChar=0 x1c) /判斷是否按下*鍵if(st3=1) /若按下*鍵,數(shù)碼管閃爍顯示 uart_printf(

15、n 按下鍵*,數(shù)碼管停止閃爍顯示。n);st3=0;ss(); /調(diào)用閃爍/不閃爍切換else /再次按下*鍵,數(shù)碼管停止閃爍 uart_printf(n 按下鍵*,數(shù)碼管閃爍顯示。n);st3=1;ss(); else if(ucChar=0 x11) /判斷是否按下 A 鍵uart_printf(n 按下鍵 A,設(shè)置鬧鐘。請輸入鬧鐘時間,按 fun 鍵確認(rèn)。n);嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 13 -isAlam=1;/已設(shè)置了鬧鐘alam_jiao();/調(diào)用鬧鈴函數(shù) else if(st1=1) /判斷當(dāng)前是否顯示時間,調(diào)用顯示時間函數(shù)rtc_display1(); els

16、e if(st1=2) /判斷當(dāng)前是否顯示日期,調(diào)用顯示日期函數(shù)rtc_display2();5 5、時間及日期設(shè)置函數(shù)、時間及日期設(shè)置函數(shù)void setDate(void) int i,u;ucChar=0;for(u=0;u8;u+)iic_write_8led(0 x70,0 x10+u,0 x00); /燈滅i=0;while(1) iic_init_8led(); while(g_nKeyPress-) keyboard_init(); g_nKeyPress = 0;/按鍵值置 0while(g_nKeyPress = 0);/空循環(huán),等待有鍵按下iic_read_keybd(0

17、 x70, 0 x1, &ucChar);if(i=8|i=17) /判斷日期和時間輸入完成while(1) while(g_nKeyPress-) keyboard_init();g_nKeyPress=0;while(g_nKeyPress=0);iic_read_keybd(0 x70, 0 x1, &ucChar);ucChar=key_set(ucChar);if(ucChar=0 xff) /按下 FUN 鍵確認(rèn)if(i=8) uart_printf(n 完成日期設(shè)置,繼續(xù)設(shè)置時間(格式 星期-時時分分秒秒)n);else uart_printf(n 完成時間設(shè)置。

18、n);i+; break;嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 14 -if(i=9|i=18)/輸入超出,跳出程序 break;if(ucChar != 0)/判斷是否有鍵按下,并對應(yīng) LED 燈 8 位按位顯示ucChar= key_set(ucChar);switch(i)case 0: iic_write_8led(0 x70, 0 x10+4, numucChar); g_nYear=ucChar*4096; /設(shè)置年 i+; break; case 1: iic_write_8led(0 x70, 0 x10+5, numg_nYear/4096); iic_write_8le

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

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

21、c_write_8led(0 x70, 0 x10+6, numg_nYear/16%16); iic_write_8led(0 x70, 0 x10+5, numg_nYear%4096%256%16); iic_write_8led(0 x70, 0 x10+4, numucChar); g_nMonth=ucChar*16;/設(shè)置月 i+;嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 15 - break;case 5:iic_write_8led(0 x70, 0 x10+1, numg_nYear/4096); iic_write_8led(0 x70, 0 x10+0, numg_nY

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

23、); iic_write_8led(0 x70, 0 x10+1, numg_nYear/256%16); iic_write_8led(0 x70, 0 x10+0, numg_nYear/16%16); iic_write_8led(0 x70, 0 x10+7, numg_nYear%4096%256%16); iic_write_8led(0 x70, 0 x10+6, numg_nMonth/16); iic_write_8led(0 x70, 0 x10+5, numg_nMonth%16); iic_write_8led(0 x70, 0 x10+4, numucChar); g

24、_nDate=ucChar*16;/設(shè)置日 i+; break;case 7:iic_write_8led(0 x70, 0 x10+3, numg_nYear/4096); iic_write_8led(0 x70, 0 x10+2, numg_nYear/256%16); iic_write_8led(0 x70, 0 x10+1, numg_nYear/16%16); iic_write_8led(0 x70, 0 x10+0, numg_nYear%4096%256%16); iic_write_8led(0 x70, 0 x10+7, numg_nMonth/16); iic_wri

25、te_8led(0 x70, 0 x10+6, numg_nMonth%16); iic_write_8led(0 x70, 0 x10+5, numg_nDate/16); iic_write_8led(0 x70, 0 x10+4, numucChar); g_nDate=g_nDate+ucChar; i+; break; case 9: for(u=0;u8;u+)iic_write_8led(0 x70,0 x10+u,0 x00);/8 個燈滅i+;break;case 10:iic_write_8led(0 x70, 0 x10+5, numucChar);iic_write_8

26、led(0 x70, 0 x10+4, 0 x02);嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 16 -g_nWeekday=ucChar;/設(shè)置星期i+;break;case 11:iic_write_8led(0 x70, 0 x10+6, numg_nWeekday);iic_write_8led(0 x70, 0 x10+5, 0 x02);iic_write_8led(0 x70, 0 x10+4, numucChar);g_nHour=ucChar*16;/設(shè)置小時i+;break;case 12:iic_write_8led(0 x70, 0 x10+7, numg_nWeekd

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

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

29、6);iic_write_8led(0 x70, 0 x10+5, numg_nMin/16);iic_write_8led(0 x70, 0 x10+4, numucChar);g_nMin=g_nMin+ucChar;i+;break;case 15:iic_write_8led(0 x70, 0 x10+2, numg_nWeekday);iic_write_8led(0 x70, 0 x10+1, 0 x02);iic_write_8led(0 x70, 0 x10+0, numg_nHour/16);iic_write_8led(0 x70, 0 x10+7, numg_nHour%

30、16);iic_write_8led(0 x70, 0 x10+6, numg_nMin/16);iic_write_8led(0 x70, 0 x10+5, numg_nMin%16);嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 17 -iic_write_8led(0 x70, 0 x10+4, numucChar);g_nSec=ucChar*16;/設(shè)置秒鐘i+;break;case 16:iic_write_8led(0 x70, 0 x10+3, numg_nWeekday);iic_write_8led(0 x70, 0 x10+2, 0 x02);iic_write_8led(0

31、 x70, 0 x10+1, numg_nHour/16);iic_write_8led(0 x70, 0 x10+0, numg_nHour%16);iic_write_8led(0 x70, 0 x10+7, numg_nMin/16);iic_write_8led(0 x70, 0 x10+6, numg_nMin%16);iic_write_8led(0 x70, 0 x10+5, numg_nSec/16);iic_write_8led(0 x70, 0 x10+4, numucChar);g_nSec=g_nSec+ucChar;i+;break;case 18:rRTCCON =

32、 rRTCCON & (0 xf) | 0 x1;/ No reset, Merge BCD counters, 1/32768, RTC Control enable rBCDYEAR = rBCDYEAR & (0 xff) | g_nYear; rBCDMON = rBCDMON & (0 x1f) | g_nMonth;rBCDDAY = rBCDDAY & (0 x7) | g_nWeekday; rBCDDATE = rBCDDATE & (0 x3f) | g_nDate; rBCDHOUR = rBCDHOUR & (0 x3f)

33、 | g_nHour; rBCDMIN = rBCDMIN & (0 x7f) | g_nMin; rBCDSEC = rBCDSEC & (0 x7f) | g_nSec; rRTCCON = 0 x0;rtc_display1(); /顯示時間函數(shù)break;6 6、閃爍、閃爍/ /不閃爍切換函數(shù)不閃爍切換函數(shù)void ss(void)if(st3=0)/若按下*鍵 if(st1=1) /判斷當(dāng)前是否顯示時間,調(diào)用顯示時間函數(shù)嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 18 - st2=0;rtc_display1();else if(st1=2) /判斷當(dāng)前是否顯示日期,調(diào)

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

35、0;for(u=0;u100000;u+);delay(5000);/延時 5srGPBDAT |= 1; delay(5000);rGPFCON = 0 x55aa;8 8、鍵值對應(yīng)到鍵盤函數(shù)、鍵值對應(yīng)到鍵盤函數(shù)UINT8T key_set(UINT8T ucChar)switch(ucChar)case 1:case 2:嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 19 -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:c

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

37、than 30 g_nSecvoid _irq rtc_int(void)/到達(dá)設(shè)定鬧鐘時間,觸發(fā)中斷 int i;ClearPending(BIT_RTC); f_nIsRtcInt = 1; void _irq rtc_tick(void)ClearPending(BIT_TICK); f_unTickCount+;嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 20 -三、鬧鐘功能實現(xiàn)模塊三、鬧鐘功能實現(xiàn)模塊1 1、A A 鍵設(shè)置鬧鐘功能實現(xiàn)鍵設(shè)置鬧鐘功能實現(xiàn)if(isAlam=1)/按下 A 鍵設(shè)置鬧鐘 /在超級終端上顯示已設(shè)定的鬧鐘為-uart_printf( %x:%x:%x %s,%x

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

39、f( %x:%x:%x %s,%x/%x/%xr,g_nHour,g_nMin,g_nSec,dayg_nWeekday,g_nMonth,g_nDate,g_nYear);keyboard_init();/接受鍵盤的輸入,并且將值放在 ucChar g_nKeyPress = 0;iic_read_keybd(0 x70, 0 x1, &ucChar); display();/按鍵判斷函數(shù)rRTCCON = 0 x0;/ No reset, Merge BCD counters, 1/32768, RTC Control disable(for power consumption)v

40、oid naoz(void)/鬧鐘函數(shù)int i;while(1) /鬧鐘響后,按 FUN 鍵停止 while(g_nKeyPress-) keyboard_init();/接受鍵盤的輸入,并且將值放在ucCharg_nKeyPress=0;iic_read_keybd(0 x70, 0 x1, &ucChar);ucChar=key_set(ucChar);if(ucChar=0 xff) /按下 FUN 鍵ucChar=0; /給按鍵值置 0嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 21 -uart_printf(n 鬧鐘已停止。n); return;iic_init_8led()

41、;for(i=0;i8;i+) iic_write_8led(0 x70,0 x10+i,0 x00);/8 個 LED 燈全滅display_Time();/調(diào)用系統(tǒng)時間顯示jiao();/調(diào)用發(fā)聲函數(shù)2 2、鬧鐘設(shè)置函數(shù)、鬧鐘設(shè)置函數(shù)void alam(void) int i,u;ucChar=0;for(u=0;u8;u+)iic_write_8led(0 x70,0 x10+u,0 x00);/8 個 LED 燈全滅i=0;while(1) iic_init_8led(); while(g_nKeyPress-) keyboard_init(); g_nKeyPress = 0; /接

42、受鍵盤的輸入,并且將值放在 ucCharwhile(g_nKeyPress = 0);iic_read_keybd(0 x70, 0 x1, &ucChar);if(i=6) /判斷時間輸入是否完成while(1) while(g_nKeyPress-) keyboard_init();g_nKeyPress=0; /接受鍵盤的輸入,并且將值放在 ucCharwhile(g_nKeyPress=0); iic_read_keybd(0 x70, 0 x1, &ucChar);ucChar=key_set(ucChar);if(ucChar=0 xff)/按下 FUN 鍵確認(rèn)輸入

43、時間i+; break;嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 22 -if(i=7)/判斷是否 8 個 LED 燈都設(shè)置好了 return;/跳出程序if(ucChar != 0)/判斷有鍵按下,并且在相應(yīng)位上顯示ucChar= key_set(ucChar);switch(i)case 0: iic_write_8led(0 x70, 0 x10+6, 0 x02); iic_write_8led(0 x70, 0 x10+5, 0 x02); iic_write_8led(0 x70, 0 x10+4, numucChar); rALMHOUR=ucChar*16;/設(shè)置鬧鐘的小時 i

44、+; break;case 1: iic_write_8led(0 x70, 0 x10+7, 0 x02); iic_write_8led(0 x70, 0 x10+6, 0 x02); iic_write_8led(0 x70, 0 x10+5, numrALMHOUR/16); iic_write_8led(0 x70, 0 x10+4, numucChar); rALMHOUR=rALMHOUR+ucChar; i+; break;case 2: iic_write_8led(0 x70, 0 x10+0, 0 x02); iic_write_8led(0 x70, 0 x10+7,

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

46、 numrALMHOUR/16); iic_write_8led(0 x70, 0 x10+6, numrALMHOUR%16); iic_write_8led(0 x70, 0 x10+5, numrALMMIN/16); iic_write_8led(0 x70, 0 x10+4, numucChar); rALMMIN=rALMMIN+ucChar; i+; break;case 4:嵌入式系統(tǒng)開發(fā)課程設(shè)計報告 No.11- 23 - iic_write_8led(0 x70, 0 x10+2, 0 x02); iic_write_8led(0 x70, 0 x10+1, 0 x02); iic_write_8led(0 x70, 0 x10+0, numrALMHOUR/16); iic_write_8le

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論