2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  嵌入式系統(tǒng)開發(fā)</b></p><p><b>  課程設(shè)計(jì)專周報(bào)告</b></p><p><b>  課程設(shè)計(jì)(報(bào)告)</b></p><p><b> ?、?、課程設(shè)計(jì)題目:</b></p><p>  具有日歷功能的電子

2、時(shí)鐘 </p><p> ?、颉⒄n程設(shè)計(jì)步驟及內(nèi)容</p><p>  一、課程設(shè)計(jì)目標(biāo) </p><p>  1、培養(yǎng)綜合運(yùn)用知識(shí)和獨(dú)立開展實(shí)踐創(chuàng)新的能力;</p><p>  2、培養(yǎng)學(xué)生將理論知識(shí)與實(shí)際應(yīng)用結(jié)合在一起;</p&

3、gt;<p>  3、培養(yǎng)學(xué)生的自我學(xué)習(xí)能力和解決問題的能力;</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ù)分成若干模塊,分模塊調(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嵌入式開發(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í)把所按的鍵值,通過串口發(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>  專業(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)到鍵盤函數(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>  近年來,隨著計(jì)算機(jī)技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來越重要的作用。嵌入式系統(tǒng)無疑成為當(dāng)前最熱門最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。</p><p>  實(shí)時(shí)時(shí)鐘(RTC)器件是一種能提供日歷/時(shí)鐘、數(shù)據(jù)存儲(chǔ)等功能的專用集成電路,常用作各種計(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)域的無人職守環(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ā)展,我們身邊充斥著各類各樣的嵌入式電子產(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í)鐘,編寫C語言可以通過μVision4和超級(jí)終端軟件調(diào)試,然后通過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)到鍵盤函數(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();//接受鍵盤的輸入,并且將值放在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個(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; //接受鍵盤的輸入,并且將值放在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; //接受鍵盤的輸入,并且將值放在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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論