版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 嵌入式系統(tǒng)開(kāi)發(fā)</b></p><p><b> 課程設(shè)計(jì)專(zhuān)周報(bào)告</b></p><p><b> 課程設(shè)計(jì)(報(bào)告)</b></p><p><b> ?、瘛⒄n程設(shè)計(jì)題目:</b></p><p> 具有日歷功能的電子
2、時(shí)鐘 </p><p> Ⅱ、課程設(shè)計(jì)步驟及內(nèi)容</p><p> 一、課程設(shè)計(jì)目標(biāo) </p><p> 1、培養(yǎng)綜合運(yùn)用知識(shí)和獨(dú)立開(kāi)展實(shí)踐創(chuàng)新的能力;</p><p> 2、培養(yǎng)學(xué)生將理論知識(shí)與實(shí)際應(yīng)用結(jié)合在一起;</p&
3、gt;<p> 3、培養(yǎng)學(xué)生的自我學(xué)習(xí)能力和解決問(wèn)題的能力;</p><p> 4、培養(yǎng)學(xué)生的協(xié)作意識(shí)和團(tuán)隊(duì)合作能力;</p><p> 5、培養(yǎng)學(xué)生的總結(jié)經(jīng)驗(yàn)的能力。</p><p> 二、研究方法及手段應(yīng)用</p><p> 1、問(wèn)題解決模塊化,將任務(wù)分成若干模塊,分模塊調(diào)試和完成任務(wù);</p>&l
4、t;p> 2、查閱網(wǎng)上的相關(guān)素材,查閱相關(guān)論文資料,進(jìn)行比較、研究;</p><p> 3、在獨(dú)立思考的基礎(chǔ)上,請(qǐng)教老師,和同組同學(xué)討論、學(xué)習(xí);</p><p> 4、反復(fù)調(diào)試、總結(jié)經(jīng)驗(yàn)、排除差錯(cuò);</p><p> 5、連接PC和EDUKIT-III ARM嵌入式開(kāi)發(fā)實(shí)驗(yàn)箱,完成整個(gè)實(shí)驗(yàn)環(huán)境搭建;</p><p> 6、運(yùn)用
5、μVision4和超級(jí)終端軟件進(jìn)行軟件編譯和進(jìn)行調(diào)試查看;</p><p> 7、使用ULINK2仿真器下載至實(shí)驗(yàn)箱進(jìn)行觀察、調(diào)試。</p><p> 三、課程設(shè)計(jì)預(yù)期效果</p><p> 1、程序啟動(dòng)后,蜂鳴器響三聲,8位LED數(shù)碼管顯示初始值“0”,1秒后顯示當(dāng)前日期和時(shí)間,日期格式:****年**月**日,時(shí)間格式:*(星期)-**時(shí)**分**秒。PC
6、機(jī)超級(jí)終端同時(shí)顯示相關(guān)的信息。</p><p> 2、按下“D”鍵,可進(jìn)行日期、時(shí)間的修改、設(shè)置:有按鍵時(shí),把鍵值顯示到最右側(cè),后續(xù)按鍵時(shí),把以前的按鍵左移,把當(dāng)前按鍵值顯示到最右側(cè)數(shù)碼管。設(shè)置完畢后,按“FUN”鍵確認(rèn),退出設(shè)置,時(shí)鐘顯示修改后的時(shí)間。</p><p> 3、顯示控制和鬧鐘設(shè)置:</p><p> 按鍵“*”,進(jìn)行數(shù)碼管閃爍/不閃爍的切換。&
7、lt;/p><p> 按鍵“A”,設(shè)置鬧鐘時(shí)間。時(shí)間到達(dá)后,鬧鈴(蜂鳴器)響,按“FUN”鍵,關(guān)閉鬧鈴。</p><p> 按鍵設(shè)置時(shí),PC的超級(jí)終端顯示相應(yīng)的提示信息,同時(shí)把所按的鍵值,通過(guò)串口發(fā)送到超級(jí)終端顯示。</p><p> 4、鬧鈴聲音頻率及音量控制:</p><p> 按下“B”鍵時(shí),進(jìn)入鬧鈴聲音的設(shè)置。</p>
8、<p> 采集AIN2的ADC值,根據(jù)ADC的值,控制蜂鳴器的聲音頻率??刂芇WM1的頻率。(為100Hz 至1KHz,最低值和最高值可以根據(jù)實(shí)際效果調(diào)整)。并把實(shí)際調(diào)整的頻率打印到超級(jí)終端,如“100Hz”。</p><p> 采集AIN1的ADC值,根據(jù)ADC的值,控制蜂鳴器的音量??刂芇WM1的占空比。(為0% 至100%,最低值和最高值可以根據(jù)實(shí)際效果調(diào)整).并把實(shí)際調(diào)整的占空比打印到超
9、級(jí)終端上,如“50%”。</p><p> 按“FUN”鍵結(jié)束設(shè)置。</p><p> 學(xué)生姓名: 權(quán)勝 王希 嚴(yán)家強(qiáng) </p><p> 專(zhuān)業(yè)年級(jí): 計(jì)算機(jī)應(yīng)用技術(shù)10511 </p><p><b> 目錄</b></p><p><b> 前
10、言5</b></p><p><b> 第一章系統(tǒng)設(shè)計(jì)6</b></p><p> 第一節(jié)課題目標(biāo)及總體方案6</p><p> 第二節(jié)項(xiàng)目設(shè)計(jì)模塊描述及流程圖5</p><p><b> 1、模塊描述6</b></p><p> 2、總體設(shè)計(jì)
11、流程圖6</p><p> 3、功能設(shè)計(jì)流程圖7</p><p> 4、鬧鐘功能程序流程圖8</p><p><b> 一、主函數(shù)模塊9</b></p><p> 二、功能實(shí)現(xiàn)模塊10</p><p> 1、8個(gè)LED燈的按位顯示程序10</p><p&g
12、t; 2、獲取系統(tǒng)時(shí)間11</p><p> 3、*鍵功能實(shí)現(xiàn)12</p><p> 4、按鍵判斷函數(shù)12</p><p> 5、時(shí)間及日期設(shè)置13</p><p> 6、閃爍/不閃爍切換函數(shù)17</p><p><b> 7、發(fā)聲函數(shù)18</b></p>&
13、lt;p> 8、鍵值對(duì)應(yīng)到鍵盤(pán)函數(shù)18</p><p><b> 9、中斷函數(shù)19</b></p><p> 三、鬧鐘功能實(shí)現(xiàn)模塊20</p><p> 1、A鍵設(shè)置鬧鐘功能實(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> 心得體會(huì)24</b></p><p><b> 參考文獻(xiàn)25</b></p><p><
15、;b> 前 言</b></p><p> 近年來(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)域之一。</p><p> 實(shí)時(shí)時(shí)鐘(RTC)器件是一種能提供日歷/時(shí)鐘、數(shù)據(jù)存儲(chǔ)等功能的專(zhuān)用集成電路,常用作各種計(jì)算機(jī)系統(tǒng)的時(shí)鐘信號(hào)源和參數(shù)設(shè)置存
16、儲(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)。</p>&
17、lt;p> 關(guān)鍵字:嵌入式系統(tǒng)、實(shí)時(shí)時(shí)鐘RTC</p><p><b> 第一章系統(tǒng)設(shè)計(jì)</b></p><p> 第一節(jié)課題目標(biāo)及總體方案</p><p> 隨著嵌入式技術(shù)的發(fā)展,我們身邊充斥著各類(lèi)各樣的嵌入式電子產(chǎn)品。實(shí)時(shí)時(shí)鐘(RTC)就是一種在現(xiàn)代電子設(shè)備中應(yīng)用非常普遍,可以幫助人們實(shí)時(shí)、準(zhǔn)確的掌握時(shí)間的器件,如手機(jī)、PDA
18、及一些智能儀表都提供了時(shí)鐘顯示。</p><p> 我們本次課題的目標(biāo)就是要基于SAMSUNG S3C2410AL-20芯片設(shè)計(jì)出一個(gè)實(shí)時(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)系。 </p><p>
19、第二節(jié)項(xiàng)目設(shè)計(jì)模塊描述及流程圖</p><p> 1.模塊描述:我先進(jìn)行了整個(gè)系統(tǒng)的規(guī)劃,將整個(gè)系統(tǒng)分為兩大模塊:第一,主函數(shù)模塊;第二,功能實(shí)現(xiàn)模塊(進(jìn)行時(shí)間和鬧鐘的設(shè)定,以及其他一些顯示功能);第三,鬧鐘功能實(shí)現(xiàn)模塊。 </p><p> 2.總體設(shè)計(jì)流程圖:</p><p><b> 3、功能設(shè)計(jì)流程圖</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個(gè)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個(gè)燈全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("歡迎使用具有日歷功能的電子時(shí)鐘\n請(qǐng)根據(jù)提示按鍵操作\n0鍵:顯示時(shí)鐘\n1鍵:顯示日期\nA鍵:設(shè)置鬧鐘\nD鍵:設(shè)置日期時(shí)間\n*鍵:數(shù)碼管閃爍/不閃爍的切換\n");</p><p> rtc_init();
24、 //實(shí)時(shí)時(shí)鐘初始化</p><p> rtc_display1(); //顯示時(shí)間</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> 二、功能實(shí)現(xiàn)模塊</b></p><p> 1、8個(gè)LED燈的按位對(duì)應(yīng)顯示程序</p><p> void display_Time(void) //對(duì)應(yīng)到8個(gè)LED燈按位顯示</p><p>
26、;<b> {</b></p><p> iic_init_8led(); //顯示時(shí)間</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]);//取個(gè)位</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)時(shí)間</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; //代表正在顯示時(shí)鐘 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)日期及時(shí)間</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) // 相同時(shí)間不顯示節(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、*鍵功能實(shí)現(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個(gè)燈熄滅</p><p><b> }</b></p><p> delay(1000);//延時(shí)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ù)碼管顯示時(shí)間:\n");</p><p> rtc_display1();//顯示時(shí)間函數(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,進(jìn)入日期設(shè)置,請(qǐng)先輸入日期(格式 年年年年月月日日)。輸入完成后按fun鍵確認(rèn)。\n");</p><p> setDate();//設(shè)置時(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è)置鬧鐘。請(qǐng)輸入鬧鐘時(shí)間,按fun鍵確認(rèn)。\n");</p><p> isAlam=1;//已設(shè)置了鬧鐘</p><p> alam_jiao();//調(diào)用鬧鈴函數(shù)</p><p> } else if(st1==
47、1){ //判斷當(dāng)前是否顯示時(shí)間,調(diào)用顯示時(shí)間函數(shù)</p><p> rtc_display1();</p><p> } else if(st1==2){ //判斷當(dāng)前是否顯示日期,調(diào)用顯示日期函數(shù)</p><p> rtc_display2();</p><p><b> }</b></p>
48、<p><b> }</b></p><p> 5、時(shí)間及日期設(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){//判斷日期和時(shí)間輸入完成</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鍵確認(rèn)</p><p><b> if(i==8){</b></p><p> uart_printf("\n完
54、成日期設(shè)置,繼續(xù)設(shè)置時(shí)間(格式 星期-時(shí)時(shí)分分秒秒)\n");</p><p><b> }else{</b></p><p> uart_printf("\n完成時(shí)間設(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)//判斷是否有鍵按下,并對(duì)應(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個(gè)燈滅</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è)置小時(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í)間函數(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){ //判斷當(dāng)前是否顯
99、示時(shí)間,調(diào)用顯示時(shí)間函數(shù)</p><p><b> st2=0;</b></p><p> rtc_display1();</p><p> }else if(st1==2){ //判斷當(dāng)前是否顯示日期,調(diào)用顯示日期函數(shù)</p><p><b> st2=0;</b></p>
100、<p> rtc_display2();</p><p><b> }</b></p><p> }else{//未按下鍵,再次判斷顯示日期還是時(shí)間,再進(jìn)行調(diào)用當(dāng)前顯示函數(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);//延時(shí)5s</p><p> rGPBDAT |= 1; </p><p> delay(50
105、00);</p><p> rGPFCON = 0x55aa;</p><p><b> }</b></p><p> 8、鍵值對(duì)應(yīng)到鍵盤(pán)函數(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)//到達(dá)設(shè)定鬧鐘時(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> 三、鬧鐘功能實(shí)現(xiàn)模塊</p><p> 1、A鍵設(shè)置鬧鐘功能實(shí)現(xiàn)</p><p> if(isAlam==1){//按下A鍵設(shè)置鬧鐘</p><p> //在超級(jí)終端上顯示已設(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; //到了鬧鐘時(shí)間久置為初始值</p><p> isAlam=0;//將設(shè)置的鬧鐘置0(已設(shè)置鬧鐘)</p><p> uart_printf("\n鬧鐘叫了,請(qǐng)按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();//接受鍵盤(pán)的輸入,并且將值放在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();//接受鍵盤(pán)的輸入,并且將值放在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個(gè)LED燈全滅</p><p><b> }</b></p><p> display_Time();//調(diào)用
126、系統(tǒng)時(shí)間顯示</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個(gè)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; //接受鍵盤(pán)的輸入,并且將值放在ucChar</p><p> while(g_nKeyPress == 0);</p><p> iic_read_keybd(0x70, 0x1, &ucChar);if(i==6){ //判斷時(shí)間輸入是否完成<
130、/p><p><b> while(1){</b></p><p> while(g_nKeyPress--){</p><p> keyboard_init();</p><p> g_nKeyPress=0; //接受鍵盤(pán)的輸入,并且將值放在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鍵確認(rèn)輸入時(shí)間</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個(gè)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è)置鬧鐘的小時(shí)</p><p><b> i++;</b></p><p>&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計(jì)報(bào)告---基于lcd的電子時(shí)鐘
- arm7電子時(shí)鐘嵌入式課程設(shè)計(jì)報(bào)告
- 嵌入式課程設(shè)計(jì)--基于lcd的電子時(shí)鐘
- 嵌入式課程設(shè)計(jì)--基于lcd的電子時(shí)鐘實(shí)驗(yàn)
- 嵌入式課程設(shè)計(jì)-- 基于lcd的電子時(shí)鐘實(shí)驗(yàn)
- 電子時(shí)鐘系統(tǒng)設(shè)計(jì)-《嵌入式系統(tǒng)》課程設(shè)計(jì)說(shuō)明書(shū)
- 電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 電子時(shí)鐘課程設(shè)計(jì)--數(shù)字電子時(shí)鐘焊接調(diào)試報(bào)告
- 嵌入式系統(tǒng)原理及應(yīng)用課程設(shè)計(jì)--電子時(shí)鐘的設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)字電子時(shí)鐘 課程設(shè)計(jì)報(bào)告
- 倒計(jì)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 電子時(shí)鐘課程設(shè)計(jì)
- 電子時(shí)鐘eda課程設(shè)計(jì)報(bào)告
- 電子時(shí)鐘 課程設(shè)計(jì)
- 電子時(shí)鐘課程設(shè)計(jì)
- labview電子時(shí)鐘設(shè)計(jì)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論