版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 嵌入式系統(tǒng)開發(fā)</b></p><p><b> 課程設(shè)計專周報告</b></p><p><b> 課程設(shè)計(報告)</b></p><p><b> Ⅰ、課程設(shè)計題目:</b></p><p> 具有日歷功能的電子
2、時鐘 </p><p> Ⅱ、課程設(shè)計步驟及內(nèi)容</p><p> 一、課程設(shè)計目標 </p><p> 1、培養(yǎng)綜合運用知識和獨立開展實踐創(chuàng)新的能力;</p><p> 2、培養(yǎng)學生將理論知識與實際應(yīng)用結(jié)合在一起;</p&
3、gt;<p> 3、培養(yǎng)學生的自我學習能力和解決問題的能力;</p><p> 4、培養(yǎng)學生的協(xié)作意識和團隊合作能力;</p><p> 5、培養(yǎng)學生的總結(jié)經(jīng)驗的能力。</p><p> 二、研究方法及手段應(yīng)用</p><p> 1、問題解決模塊化,將任務(wù)分成若干模塊,分模塊調(diào)試和完成任務(wù);</p>&l
4、t;p> 2、查閱網(wǎng)上的相關(guān)素材,查閱相關(guān)論文資料,進行比較、研究;</p><p> 3、在獨立思考的基礎(chǔ)上,請教老師,和同組同學討論、學習;</p><p> 4、反復調(diào)試、總結(jié)經(jīng)驗、排除差錯;</p><p> 5、連接PC和EDUKIT-III ARM嵌入式開發(fā)實驗箱,完成整個實驗環(huán)境搭建;</p><p> 6、運用
5、μVision4和超級終端軟件進行軟件編譯和進行調(diào)試查看;</p><p> 7、使用ULINK2仿真器下載至實驗箱進行觀察、調(diào)試。</p><p> 三、課程設(shè)計預期效果</p><p> 1、程序啟動后,蜂鳴器響三聲,8位LED數(shù)碼管顯示初始值“0”,1秒后顯示當前日期和時間,日期格式:****年**月**日,時間格式:*(星期)-**時**分**秒。PC
6、機超級終端同時顯示相關(guān)的信息。</p><p> 2、按下“D”鍵,可進行日期、時間的修改、設(shè)置:有按鍵時,把鍵值顯示到最右側(cè),后續(xù)按鍵時,把以前的按鍵左移,把當前按鍵值顯示到最右側(cè)數(shù)碼管。設(shè)置完畢后,按“FUN”鍵確認,退出設(shè)置,時鐘顯示修改后的時間。</p><p> 3、顯示控制和鬧鐘設(shè)置:</p><p> 按鍵“*”,進行數(shù)碼管閃爍/不閃爍的切換。&
7、lt;/p><p> 按鍵“A”,設(shè)置鬧鐘時間。時間到達后,鬧鈴(蜂鳴器)響,按“FUN”鍵,關(guān)閉鬧鈴。</p><p> 按鍵設(shè)置時,PC的超級終端顯示相應(yīng)的提示信息,同時把所按的鍵值,通過串口發(fā)送到超級終端顯示。</p><p> 4、鬧鈴聲音頻率及音量控制:</p><p> 按下“B”鍵時,進入鬧鈴聲音的設(shè)置。</p>
8、<p> 采集AIN2的ADC值,根據(jù)ADC的值,控制蜂鳴器的聲音頻率。控制PWM1的頻率。(為100Hz 至1KHz,最低值和最高值可以根據(jù)實際效果調(diào)整)。并把實際調(diào)整的頻率打印到超級終端,如“100Hz”。</p><p> 采集AIN1的ADC值,根據(jù)ADC的值,控制蜂鳴器的音量??刂芇WM1的占空比。(為0% 至100%,最低值和最高值可以根據(jù)實際效果調(diào)整).并把實際調(diào)整的占空比打印到超
9、級終端上,如“50%”。</p><p> 按“FUN”鍵結(jié)束設(shè)置。</p><p> 學生姓名: 權(quán)勝 王希 嚴家強 </p><p> 專業(yè)年級: 計算機應(yīng)用技術(shù)10511 </p><p><b> 目錄</b></p><p><b> 前
10、言5</b></p><p><b> 第一章系統(tǒng)設(shè)計6</b></p><p> 第一節(jié)課題目標及總體方案6</p><p> 第二節(jié)項目設(shè)計模塊描述及流程圖5</p><p><b> 1、模塊描述6</b></p><p> 2、總體設(shè)計
11、流程圖6</p><p> 3、功能設(shè)計流程圖7</p><p> 4、鬧鐘功能程序流程圖8</p><p><b> 一、主函數(shù)模塊9</b></p><p> 二、功能實現(xiàn)模塊10</p><p> 1、8個LED燈的按位顯示程序10</p><p&g
12、t; 2、獲取系統(tǒng)時間11</p><p> 3、*鍵功能實現(xiàn)12</p><p> 4、按鍵判斷函數(shù)12</p><p> 5、時間及日期設(shè)置13</p><p> 6、閃爍/不閃爍切換函數(shù)17</p><p><b> 7、發(fā)聲函數(shù)18</b></p>&
13、lt;p> 8、鍵值對應(yīng)到鍵盤函數(shù)18</p><p><b> 9、中斷函數(shù)19</b></p><p> 三、鬧鐘功能實現(xiàn)模塊20</p><p> 1、A鍵設(shè)置鬧鐘功能實現(xiàn)20</p><p> 2、鬧鐘設(shè)置函數(shù)21</p><p><b> 3、鬧鈴函
14、數(shù)23</b></p><p> 第二章結(jié)果與顯示24</p><p><b> 結(jié)果顯示24</b></p><p><b> 心得體會24</b></p><p><b> 參考文獻25</b></p><p><
15、;b> 前 言</b></p><p> 近年來,隨著計算機技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來越重要的作用。嵌入式系統(tǒng)無疑成為當前最熱門最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。</p><p> 實時時鐘(RTC)器件是一種能提供日歷/時鐘、數(shù)據(jù)存儲等功能的專用集成電路,常用作各種計算機系統(tǒng)的時鐘信號源和參數(shù)設(shè)置存
16、儲電路。RTC具有計時準確、耗電低和體積小等特點,特別適用于在各種嵌入式系統(tǒng)忠記錄事件發(fā)生的時間和相關(guān)信息,尤其是在通信工程、電力自動化、工業(yè)控制等自動化程度較高領(lǐng)域的無人職守環(huán)境。隨著集成電路技術(shù)的不斷發(fā)展,RTC器件的新品也不斷推出。這些新品不僅具有準確的RTC,還有大容量的存儲器、溫度傳感器和A/D數(shù)據(jù)采集通道等,已成為集RTC、數(shù)據(jù)采集和存儲于一體的綜合功能器件,特別適用于以微控制器為核心的嵌入式系統(tǒng)。</p>&
17、lt;p> 關(guān)鍵字:嵌入式系統(tǒng)、實時時鐘RTC</p><p><b> 第一章系統(tǒng)設(shè)計</b></p><p> 第一節(jié)課題目標及總體方案</p><p> 隨著嵌入式技術(shù)的發(fā)展,我們身邊充斥著各類各樣的嵌入式電子產(chǎn)品。實時時鐘(RTC)就是一種在現(xiàn)代電子設(shè)備中應(yīng)用非常普遍,可以幫助人們實時、準確的掌握時間的器件,如手機、PDA
18、及一些智能儀表都提供了時鐘顯示。</p><p> 我們本次課題的目標就是要基于SAMSUNG S3C2410AL-20芯片設(shè)計出一個實時時鐘,編寫C語言可以通過μVision4和超級終端軟件調(diào)試,然后通過ULINK2仿真器下載至實驗箱內(nèi)進行觀察。在試驗箱中的LED顯示燈上顯示出時間和日歷。另外,我們將要實現(xiàn)的系統(tǒng)分為三個模塊實現(xiàn),每個模塊間相對獨立而又相互聯(lián)系。 </p><p>
19、第二節(jié)項目設(shè)計模塊描述及流程圖</p><p> 1.模塊描述:我先進行了整個系統(tǒng)的規(guī)劃,將整個系統(tǒng)分為兩大模塊:第一,主函數(shù)模塊;第二,功能實現(xiàn)模塊(進行時間和鬧鐘的設(shè)定,以及其他一些顯示功能);第三,鬧鐘功能實現(xiàn)模塊。 </p><p> 2.總體設(shè)計流程圖:</p><p><b> 3、功能設(shè)計流程圖</b></p>
20、<p> 4、鬧鐘功能程序流程圖</p><p><b> 一、主函數(shù)模塊</b></p><p><b> int i;</b></p><p> int main(int argc,char **argv)</p><p><b> {</b><
21、/p><p> sys_init(); //初始化系統(tǒng)</p><p> iic_init_8led();//初始化8個led燈</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> iic_write_8led(0
22、x70, 0x10+i,0xfc); //8個燈全0</p><p><b> }</b></p><p> for(i=0;i<3;i++)</p><p><b> {</b></p><p> jiao(); //調(diào)用發(fā)聲函數(shù)</p><p> d
23、elay(5000);</p><p><b> }</b></p><p> uart_printf("歡迎使用具有日歷功能的電子時鐘\n請根據(jù)提示按鍵操作\n0鍵:顯示時鐘\n1鍵:顯示日期\nA鍵:設(shè)置鬧鐘\nD鍵:設(shè)置日期時間\n*鍵:數(shù)碼管閃爍/不閃爍的切換\n");</p><p> rtc_init();
24、 //實時時鐘初始化</p><p> rtc_display1(); //顯示時間</p><p><b> while(1){</b></p><p> rtc_init();</p><p> display();</p><p><b> } </b&g
25、t;</p><p><b> }</b></p><p><b> 二、功能實現(xiàn)模塊</b></p><p> 1、8個LED燈的按位對應(yīng)顯示程序</p><p> void display_Time(void) //對應(yīng)到8個LED燈按位顯示</p><p>
26、;<b> {</b></p><p> iic_init_8led(); //顯示時間</p><p> iic_write_8led(0x70, 0x10+0, num[g_nHour%16]);iic_write_8led(0x70, 0x10+1, num[g_nHour/16]);</p><p> iic_
27、write_8led(0x70, 0x10+2, 0x02);</p><p> iic_write_8led(0x70, 0x10+3, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+4, num[g_nSec%16]);</p><p> iic_write_8led(0x70, 0x10+5,
28、num[g_nSec/16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nMin%16]);</p><p> iic_write_8led(0x70, 0x10+7, num[g_nMin/16]);</p><p><b> } </b></p><p&g
29、t; void display_data(void)</p><p><b> {</b></p><p> iic_init_8led(); //顯示日期</p><p> iic_write_8led(0x70, 0x10+0, num[g_nYear%4096%256%16]);//取個位</p><p>
30、; iic_write_8led(0x70, 0x10+1, num[g_nYear/16%16]);//取十位</p><p> iic_write_8led(0x70, 0x10+2, num[g_nYear/256%16]);//取百位</p><p> iic_write_8led(0x70, 0x10+3, num[g_nYear/4096]);//取千位</p>
31、;<p> iic_write_8led(0x70, 0x10+4, num[g_nDate%16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nDate/16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nMonth%16]);</p><p>
32、 iic_write_8led(0x70, 0x10+7, num[g_nMonth/16]);</p><p><b> }</b></p><p><b> 2、獲取系統(tǒng)時間</b></p><p> void rtc_display1(void)</p><p><b>
33、{int a;</b></p><p> INT32T nTmp; </p><p> rRTCCON = 0x01;</p><p><b> ucChar=0;</b></p><p> st1=1; //代表正在顯示時鐘 st1=2代表正在顯示日期</p><p>
34、; while(ucChar>29||ucChar<=0)</p><p><b> { </b></p><p> iic_init_8led();</p><p><b> while(1)</b></p><p><b> {</b></p
35、><p> if(rBCDYEAR==0x99) //獲取系統(tǒng)日期及時間</p><p> g_nYear = 0x1999;</p><p><b> else </b></p><p> g_nYear = 0x2000 + rBCDYEAR;</p><p> g_nM
36、onth = rBCDMON;</p><p> g_nWeekday = rBCDDAY;</p><p> g_nDate = rBCDDATE;</p><p> g_nHour = rBCDHOUR;</p><p> g_nMin = rBCDMIN;</p><p> g_
37、nSec = rBCDSEC;</p><p> if(g_nSec!=nTmp) // 相同時間不顯示節(jié)約資源</p><p><b> {</b></p><p> nTmp = g_nSec;</p><p><b> break;</b></
38、p><p> } </p><p><b> }</b></p><p><b> 3、*鍵功能實現(xiàn)</b></p><p> if(st2==1){ //按*鍵執(zhí)行閃爍</p><p> for(a=0;a<8;a++){</p&
39、gt;<p> iic_write_8led(0x70,0x10+a,0x00); //8個燈熄滅</p><p><b> }</b></p><p> delay(1000);//延時1s</p><p> display_Time();//再顯示</p><p><b> }e
40、lse{</b></p><p> display_Time();//未按下不變</p><p><b> }</b></p><p><b> 4、按鍵判斷函數(shù)</b></p><p> void display(void)</p><p><b&
41、gt; {</b></p><p> if(ucChar==0x01){ //判斷是否按下0鍵</p><p> uart_printf("\n按鍵0,數(shù)碼管顯示時間:\n");</p><p> rtc_display1();//顯示時間函數(shù)</p><p> } else if(ucChar==0
42、x02){ //判斷是否按下1鍵</p><p> uart_printf("\n按鍵1,數(shù)碼管顯示日期:\n");</p><p> rtc_display2();//顯示日期函數(shù)</p><p> } else if(ucChar==0x14){ //判斷是否按下D鍵</p><p> uart_printf
43、("\n按下鍵D,進入日期設(shè)置,請先輸入日期(格式 年年年年月月日日)。輸入完成后按fun鍵確認。\n");</p><p> setDate();//設(shè)置時間函數(shù)</p><p> } else if(ucChar==0x1c){ //判斷是否按下*鍵</p><p> if(st3==1){ //若按下*鍵,數(shù)碼管閃爍顯示</p
44、><p> uart_printf("\n按下鍵*,數(shù)碼管停止閃爍顯示。\n");</p><p><b> st3=0;</b></p><p> ss(); //調(diào)用閃爍/不閃爍切換</p><p> }else{ //再次按下*鍵,數(shù)碼管停止閃爍</p><p>
45、 uart_printf("\n按下鍵*,數(shù)碼管閃爍顯示。\n");</p><p><b> st3=1;</b></p><p><b> ss();</b></p><p><b> }</b></p><p> } else if(ucCha
46、r==0x11){ //判斷是否按下A鍵</p><p> uart_printf("\n按下鍵A,設(shè)置鬧鐘。請輸入鬧鐘時間,按fun鍵確認。\n");</p><p> isAlam=1;//已設(shè)置了鬧鐘</p><p> alam_jiao();//調(diào)用鬧鈴函數(shù)</p><p> } else if(st1==
47、1){ //判斷當前是否顯示時間,調(diào)用顯示時間函數(shù)</p><p> rtc_display1();</p><p> } else if(st1==2){ //判斷當前是否顯示日期,調(diào)用顯示日期函數(shù)</p><p> rtc_display2();</p><p><b> }</b></p>
48、<p><b> }</b></p><p> 5、時間及日期設(shè)置函數(shù)</p><p> void setDate(void)</p><p><b> {</b></p><p><b> int i,u;</b></p><p>
49、; ucChar=0;</p><p> for(u=0;u<8;u++){</p><p> iic_write_8led(0x70,0x10+u,0x00); //燈滅</p><p><b> }</b></p><p><b> i=0;</b></p>&
50、lt;p><b> while(1)</b></p><p><b> { </b></p><p> iic_init_8led(); </p><p> while(g_nKeyPress--)</p><p> {keyboard_init();</p><
51、p> g_nKeyPress = 0;//按鍵值置0</p><p> while(g_nKeyPress == 0);//空循環(huán),等待有鍵按下</p><p> iic_read_keybd(0x70, 0x1, &ucChar);if(i==8||i==17){//判斷日期和時間輸入完成</p><p><b>
52、 while(1){</b></p><p> while(g_nKeyPress--){</p><p> keyboard_init();</p><p> g_nKeyPress=0;</p><p> while(g_nKeyPress==0);</p><p> iic_read_ke
53、ybd(0x70, 0x1, &ucChar);</p><p> ucChar=key_set(ucChar);</p><p> if(ucChar==0xff){ //按下FUN鍵確認</p><p><b> if(i==8){</b></p><p> uart_printf("\n完
54、成日期設(shè)置,繼續(xù)設(shè)置時間(格式 星期-時時分分秒秒)\n");</p><p><b> }else{</b></p><p> uart_printf("\n完成時間設(shè)置。\n");</p><p><b> }</b></p><p><b> i
55、++;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(i==9||i==18){//輸入超出,跳出程序</p><p>&l
56、t;b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(ucChar != 0)//判斷是否有鍵按下,并對應(yīng)LED燈8位按位顯示<
57、/p><p><b> {</b></p><p> ucChar= key_set(ucChar);</p><p> switch(i){</p><p><b> case 0:</b></p><p> iic_write_8led(0x70, 0x10+4,
58、num[ucChar]);</p><p> g_nYear=ucChar*4096; //設(shè)置年</p><p><b> i++;</b></p><p><b> break; </b></p><p><b> case 1:</b></p>&l
59、t;p> iic_write_8led(0x70, 0x10+5, num[g_nYear/4096]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nYear=g_nYear+ucChar*256;</p><p><b> i++;</b>&l
60、t;/p><p><b> break;</b></p><p><b> case 2:</b></p><p> iic_write_8led(0x70, 0x10+6, num[g_nYear/4096]);</p><p> iic_write_8led(0x70, 0x10+5, nu
61、m[g_nYear/256%16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nYear=g_nYear+ucChar*16;</p><p><b> i++;</b></p><p><b> break;<
62、;/b></p><p><b> case 3:</b></p><p> iic_write_8led(0x70, 0x10+7, num[g_nYear/4096]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nYear/256%16]);</p><p>
63、; iic_write_8led(0x70, 0x10+5, num[g_nYear/16%16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nYear=g_nYear+ucChar;</p><p><b> i++;</b></p>
64、<p><b> break;</b></p><p><b> case 4:</b></p><p> iic_write_8led(0x70, 0x10+0, num[g_nYear/4096]);</p><p> iic_write_8led(0x70, 0x10+7, num[g_nYear
65、/256%16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nYear/16%16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nYear%4096%256%16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucCh
66、ar]);</p><p> g_nMonth=ucChar*16;//設(shè)置月</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 5:</b></p><p> ii
67、c_write_8led(0x70, 0x10+1, num[g_nYear/4096]);</p><p> iic_write_8led(0x70, 0x10+0, num[g_nYear/256%16]);</p><p> iic_write_8led(0x70, 0x10+7, num[g_nYear/16%16]);</p><p> iic_wr
68、ite_8led(0x70, 0x10+6, num[g_nYear%4096%256%16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nMonth/16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nMonth= g_n
69、Month+ucChar;</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 6:</b></p><p> iic_write_8led(0x70, 0x10+2, num[g_nYear/
70、4096]);</p><p> iic_write_8led(0x70, 0x10+1, num[g_nYear/256%16]);</p><p> iic_write_8led(0x70, 0x10+0, num[g_nYear/16%16]);</p><p> iic_write_8led(0x70, 0x10+7, num[g_nYear%4096
71、%256%16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nMonth/16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nMonth%16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</
72、p><p> g_nDate=ucChar*16;//設(shè)置日</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 7:</b></p><p> iic_write_8le
73、d(0x70, 0x10+3, num[g_nYear/4096]);</p><p> iic_write_8led(0x70, 0x10+2, num[g_nYear/256%16]);</p><p> iic_write_8led(0x70, 0x10+1, num[g_nYear/16%16]);</p><p> iic_write_8led(0x
74、70, 0x10+0, num[g_nYear%4096%256%16]);</p><p> iic_write_8led(0x70, 0x10+7, num[g_nMonth/16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nMonth%16]);</p><p> iic_write_8led(0x70
75、, 0x10+5, num[g_nDate/16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nDate=g_nDate+ucChar;</p><p><b> i++;</b></p><p><b> brea
76、k;</b></p><p><b> case 9:</b></p><p> for(u=0;u<8;u++){</p><p> iic_write_8led(0x70,0x10+u,0x00);//8個燈滅</p><p><b> }</b></p>
77、<p><b> i++;</b></p><p><b> break;</b></p><p><b> case 10:</b></p><p> iic_write_8led(0x70, 0x10+5, num[ucChar]);</p><p>
78、 iic_write_8led(0x70, 0x10+4, 0x02);</p><p> g_nWeekday=ucChar;//設(shè)置星期</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 11:<
79、;/b></p><p> iic_write_8led(0x70, 0x10+6, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+5, 0x02);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p>
80、 g_nHour=ucChar*16;//設(shè)置小時</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 12:</b></p><p> iic_write_8led(0x70, 0x10+7
81、, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+6, 0x02);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nHour/16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p>
82、;<p> g_nHour=g_nHour+ucChar;</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 13:</b></p><p> iic_write_8led(0
83、x70, 0x10+0, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+7, 0x02);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nHour/16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nHour
84、%16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nMin=ucChar*16;//設(shè)置分鐘</p><p><b> i++;</b></p><p><b> break;</b></p>
85、;<p><b> case 14:</b></p><p> iic_write_8led(0x70, 0x10+1, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+0, 0x02);</p><p> iic_write_8led(0x70, 0x10+7,
86、num[g_nHour/16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nHour%16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nMin/16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);&
87、lt;/p><p> g_nMin=g_nMin+ucChar;</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 15:</b></p><p> iic_write_
88、8led(0x70, 0x10+2, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+1, 0x02);</p><p> iic_write_8led(0x70, 0x10+0, num[g_nHour/16]);</p><p> iic_write_8led(0x70, 0x10+7, num[g
89、_nHour%16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nMin/16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nMin%16]);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p&
90、gt;<p> g_nSec=ucChar*16;//設(shè)置秒鐘</p><p><b> i++;</b></p><p><b> break;</b></p><p><b> case 16:</b></p><p> iic_write_8led
91、(0x70, 0x10+3, num[g_nWeekday]);</p><p> iic_write_8led(0x70, 0x10+2, 0x02);</p><p> iic_write_8led(0x70, 0x10+1, num[g_nHour/16]);</p><p> iic_write_8led(0x70, 0x10+0, num[g_nHo
92、ur%16]);</p><p> iic_write_8led(0x70, 0x10+7, num[g_nMin/16]);</p><p> iic_write_8led(0x70, 0x10+6, num[g_nMin%16]);</p><p> iic_write_8led(0x70, 0x10+5, num[g_nSec/16]);</p&g
93、t;<p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> g_nSec=g_nSec+ucChar;</p><p><b> i++;</b></p><p><b> break;</b></p><p><
94、b> case 18:</b></p><p> rRTCCON = rRTCCON & ~(0xf) | 0x1;// No reset, Merge BCD counters, 1/32768, RTC Control enable</p><p> rBCDYEAR = rBCDYEAR & ~(0xff) | g_nYear;</
95、p><p> rBCDMON = rBCDMON & ~(0x1f) | g_nMonth;</p><p> rBCDDAY = rBCDDAY & ~(0x7) | g_nWeekday; rBCDDATE = rBCDDATE & ~(0x3f) | g_nDate;</p><p> rBCDHOUR = rB
96、CDHOUR & ~(0x3f) | g_nHour;</p><p> rBCDMIN = rBCDMIN & ~(0x7f) | g_nMin;</p><p> rBCDSEC = rBCDSEC & ~(0x7f) | g_nSec;</p><p> rRTCCON = 0x0;rtc_
97、display1(); //顯示時間函數(shù)</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>&l
98、t;b> }</b></p><p><b> }</b></p><p> 6、閃爍/不閃爍切換函數(shù)</p><p> void ss(void){</p><p> if(st3==0){//若按下*鍵</p><p> if(st1==1){ //判斷當前是否顯
99、示時間,調(diào)用顯示時間函數(shù)</p><p><b> st2=0;</b></p><p> rtc_display1();</p><p> }else if(st1==2){ //判斷當前是否顯示日期,調(diào)用顯示日期函數(shù)</p><p><b> st2=0;</b></p>
100、<p> rtc_display2();</p><p><b> }</b></p><p> }else{//未按下鍵,再次判斷顯示日期還是時間,再進行調(diào)用當前顯示函數(shù)</p><p> if(st1==1){</p><p><b> st2=1;</b></p>
101、;<p> rtc_display1();</p><p> }else if(st1==2){</p><p><b> st2=1;</b></p><p> rtc_display2();</p><p><b> }</b></p><p>&
102、lt;b> }</b></p><p><b> }</b></p><p><b> 7、發(fā)聲函數(shù)</b></p><p> void jiao()</p><p> { int u;</p><p> rGPFCON=0x5500;
103、</p><p> rGPFUP=0; </p><p> rGPBCON = rGPBCON & 0xFFFFFC|1;</p><p> rGPBDAT &= 0xFFFFFE;</p><p> rGPFDAT=0;//初始化蜂鳴器設(shè)置</p><p>
104、 for(u=0;u<100000;u++);</p><p> rGPFDAT=0xF0;</p><p> for(u=0;u<100000;u++);</p><p> delay(5000);//延時5s</p><p> rGPBDAT |= 1; </p><p> delay(50
105、00);</p><p> rGPFCON = 0x55aa;</p><p><b> }</b></p><p> 8、鍵值對應(yīng)到鍵盤函數(shù)</p><p> UINT8T key_set(UINT8T ucChar)</p><p><b> {</b><
106、/p><p> switch(ucChar)</p><p><b> {</b></p><p><b> case 1:</b></p><p><b> case 2:</b></p><p><b> case 3:</b&
107、gt;</p><p><b> case 4:</b></p><p><b> case 5:</b></p><p> ucChar-=1; break;</p><p><b> case 9:</b></p><p><b>
108、 case 10:</b></p><p><b> case 11:</b></p><p><b> case 12:</b></p><p><b> case 13:</b></p><p> ucChar-=4; break;</p>
109、<p><b> case 17:</b></p><p><b> case 18:</b></p><p><b> case 19:</b></p><p><b> case 20:</b></p><p><b>
110、 case 21:</b></p><p> ucChar-=7; break;</p><p> case 25: ucChar = 0xF; break;</p><p> case 26: ucChar = '+'; break;</p><p> case 27: ucChar = '-&
111、#39;; break;</p><p> case 28: ucChar = '*'; break;</p><p> case 29: ucChar = 0xFF; break;</p><p> default: ucChar = 0;</p><p><b> }</b></p>
112、;<p> return ucChar;</p><p><b> }</b></p><p><b> 9、中斷函數(shù)</b></p><p> void __irq rtc_int0_int(void)</p><p><b> {</b><
113、/p><p> ClearPending(BIT_EINT0);</p><p> rRTCRST = (1<<3) | 3;</p><p> than 30 g_nSec</p><p><b> }</b></p><p> void __irq rtc_int(
114、void)//到達設(shè)定鬧鐘時間,觸發(fā)中斷</p><p><b> { int i;</b></p><p> ClearPending(BIT_RTC); </p><p> f_nIsRtcInt = 1; </p><p><b> }</b></p><p
115、> void __irq rtc_tick(void)</p><p><b> {</b></p><p> ClearPending(BIT_TICK); </p><p> f_unTickCount++;</p><p><b> }</b></p>&
116、lt;p> 三、鬧鐘功能實現(xiàn)模塊</p><p> 1、A鍵設(shè)置鬧鐘功能實現(xiàn)</p><p> if(isAlam==1){//按下A鍵設(shè)置鬧鐘</p><p> //在超級終端上顯示已設(shè)定的鬧鐘為-</p><p> uart_printf(" %x:%x:%x %s,%x/%x/%x 已設(shè)定鬧鐘 %x:%x:
117、%x,%x/%x/%x\r",g_nHour,g_nMin,g_nSec,day[g_nWeekday],g_nMonth,g_nDate,g_nYear,rALMHOUR,rALMMIN,rALMSEC,rALMYEAR,rALMMON,rALMDATE);</p><p> if(f_nIsRtcInt==1){//判斷到了設(shè)定的鬧鐘</p><p> f_nIsRt
118、cInt==0; //到了鬧鐘時間久置為初始值</p><p> isAlam=0;//將設(shè)置的鬧鐘置0(已設(shè)置鬧鐘)</p><p> uart_printf("\n鬧鐘叫了,請按FUN鍵停止。\n");</p><p> naoz();//調(diào)用鬧鐘函數(shù)</p><p><b> }</b>
119、;</p><p> }else{ //未按下A鍵就不變</p><p> uart_printf(" %x:%x:%x %s,%x/%x/%x\r",g_nHour,g_nMin,g_nSec,day[g_nWeekday],g_nMonth,g_nDate,g_nYear);</p><p><b> }</b>
120、;</p><p> keyboard_init();//接受鍵盤的輸入,并且將值放在ucChar</p><p> g_nKeyPress = 0;</p><p> iic_read_keybd(0x70, 0x1, &ucChar);</p><p><b> }</b></p>&l
121、t;p> display();//按鍵判斷函數(shù)</p><p> rRTCCON = 0x0;// No reset, Merge BCD counters, 1/32768, RTC Control disable(for power consumption)</p><p><b> }</b></p><p> void
122、naoz(void){//鬧鐘函數(shù)</p><p><b> int i;</b></p><p> while(1){ //鬧鐘響后,按FUN鍵停止</p><p> while(g_nKeyPress--){</p><p> keyboard_init();//接受鍵盤的輸入,并且將值放在ucChar<
123、;/p><p> g_nKeyPress=0;</p><p> iic_read_keybd(0x70, 0x1, &ucChar);</p><p> ucChar=key_set(ucChar);</p><p> if(ucChar==0xff){ //按下FUN鍵</p><p> ucChar
124、=0; //給按鍵值置0</p><p> uart_printf("\n鬧鐘已停止。\n");</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p>&l
125、t;p> iic_init_8led();</p><p> for(i=0;i<8;i++){</p><p> iic_write_8led(0x70,0x10+i,0x00);//8個LED燈全滅</p><p><b> }</b></p><p> display_Time();//調(diào)用
126、系統(tǒng)時間顯示</p><p> jiao();//調(diào)用發(fā)聲函數(shù)</p><p><b> }</b></p><p><b> 2、鬧鐘設(shè)置函數(shù)</b></p><p> void alam(void){</p><p><b> int i,u;<
127、/b></p><p> ucChar=0;</p><p> for(u=0;u<8;u++){</p><p> iic_write_8led(0x70,0x10+u,0x00);//8個LED燈全滅</p><p><b> }</b></p><p><b&g
128、t; i=0;</b></p><p><b> while(1)</b></p><p><b> { </b></p><p> iic_init_8led();</p><p> while(g_nKeyPress--)</p><p> {ke
129、yboard_init();</p><p> g_nKeyPress = 0; //接受鍵盤的輸入,并且將值放在ucChar</p><p> while(g_nKeyPress == 0);</p><p> iic_read_keybd(0x70, 0x1, &ucChar);if(i==6){ //判斷時間輸入是否完成<
130、/p><p><b> while(1){</b></p><p> while(g_nKeyPress--){</p><p> keyboard_init();</p><p> g_nKeyPress=0; //接受鍵盤的輸入,并且將值放在ucChar</p><p> while(g
131、_nKeyPress==0); </p><p> iic_read_keybd(0x70, 0x1, &ucChar);</p><p> ucChar=key_set(ucChar);</p><p> if(ucChar==0xff){//按下FUN鍵確認輸入時間</p><p><b> i++;</b
132、></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(i==7){//判斷是否8個LED燈都設(shè)置好了</p><p> return;//跳
133、出程序</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(ucChar != 0)//判斷有鍵按下,并且在相應(yīng)位上顯示</p><p><b>
134、{</b></p><p> ucChar= key_set(ucChar);</p><p> switch(i){</p><p><b> case 0:</b></p><p> iic_write_8led(0x70, 0x10+6, 0x02);</p><p>
135、 iic_write_8led(0x70, 0x10+5, 0x02);</p><p> iic_write_8led(0x70, 0x10+4, num[ucChar]);</p><p> rALMHOUR=ucChar*16;//設(shè)置鬧鐘的小時</p><p><b> i++;</b></p><p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計報告---基于lcd的電子時鐘
- arm7電子時鐘嵌入式課程設(shè)計報告
- 嵌入式課程設(shè)計--基于lcd的電子時鐘
- 嵌入式課程設(shè)計--基于lcd的電子時鐘實驗
- 嵌入式課程設(shè)計-- 基于lcd的電子時鐘實驗
- 電子時鐘系統(tǒng)設(shè)計-《嵌入式系統(tǒng)》課程設(shè)計說明書
- 電子時鐘課程設(shè)計報告
- 電子時鐘課程設(shè)計--數(shù)字電子時鐘焊接調(diào)試報告
- 嵌入式系統(tǒng)原理及應(yīng)用課程設(shè)計--電子時鐘的設(shè)計與實現(xiàn)
- 數(shù)字電子時鐘 課程設(shè)計報告
- 倒計電子時鐘課程設(shè)計報告
- 數(shù)字電子時鐘課程設(shè)計報告
- 數(shù)字電子時鐘課程設(shè)計報告
- 數(shù)字電子時鐘課程設(shè)計報告
- 數(shù)字電子時鐘課程設(shè)計報告
- 電子時鐘課程設(shè)計
- 電子時鐘eda課程設(shè)計報告
- 電子時鐘 課程設(shè)計
- 電子時鐘課程設(shè)計
- labview電子時鐘設(shè)計課程設(shè)計報告
評論
0/150
提交評論