2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩28頁(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、<p><b>  課程設(shè)計(jì)實(shí)習(xí)報(bào)告</b></p><p>  課程名稱:語(yǔ)音鬧鐘及定時(shí)器</p><p><b>  組員:** **</b></p><p>  學(xué)號(hào): ****** </p><p>  專業(yè)班級(jí):*****</p><p>  指導(dǎo)老師:*

2、*****</p><p>  學(xué)院:信息科學(xué)與技術(shù)學(xué)院</p><p>  完成時(shí)間:2011年7月30日</p><p>  一、課程設(shè)計(jì)題目要求</p><p>  自己焊接凌陽(yáng)十六位單片機(jī)實(shí)驗(yàn)板;</p><p>  利用實(shí)驗(yàn)板完成以下電路設(shè)計(jì);</p><p>  外圍電路實(shí)現(xiàn)以下功能

3、:</p><p>  a、定時(shí)器功能:(1)、能設(shè)置定時(shí)時(shí)間并語(yǔ)音播報(bào);(2)、外擴(kuò)電路顯示定時(shí)時(shí)間。</p><p>  b、語(yǔ)音鬧鐘:在原有萬(wàn)年歷程序基礎(chǔ)上,修改程序使之具有如下功能:開(kāi)機(jī)時(shí)間為當(dāng)前日期和時(shí)間;設(shè)置鬧鐘時(shí)間;語(yǔ)音或音樂(lè)鬧鈴。</p><p><b>  二、設(shè)計(jì)方案與論證</b></p><p>&

4、lt;b>  2.1系統(tǒng)原理框圖</b></p><p>  本課題是基于凌陽(yáng)十六位單片機(jī)的語(yǔ)音鬧鐘定時(shí)器的開(kāi)發(fā),由于之前我們組員都未曾接觸過(guò)單片機(jī)知識(shí),我們首先通過(guò)查閱凌陽(yáng)單片機(jī)的相關(guān)資料學(xué)習(xí)單片機(jī)相關(guān)知識(shí)。由于凌陽(yáng)十六位單片機(jī)自帶了語(yǔ)音錄放功能,這在很大程度上減小了我們的課題難度,我們首先考慮到實(shí)現(xiàn)鬧鐘定時(shí)器功能分兩個(gè)部分,即軟件部分和硬件部分,通過(guò)編程可以實(shí)現(xiàn)對(duì)單片機(jī)外圍接口的定義,將想要

5、傳送的內(nèi)容(包括語(yǔ)音部分和顯示部分)傳輸出去,而外圍電路的設(shè)計(jì)包括語(yǔ)音部分、顯示部分以及輸入部分(鍵盤(pán));由于要求只顯示年月日時(shí)分秒,我們采用數(shù)碼管即可實(shí)現(xiàn)顯示功能。此外我們還要做的就是語(yǔ)音采集及時(shí)間顯示和鬧鐘的切換。系統(tǒng)設(shè)計(jì)框圖如下</p><p>  圖2.1.1、系統(tǒng)設(shè)計(jì)框圖</p><p>  SPCE061A最小系統(tǒng)框圖:</p><p><b>

6、;  圖2.1.2</b></p><p>  2.2主要電路設(shè)計(jì)與參數(shù)計(jì)算</p><p>  61板硬件框圖如圖所示:</p><p>  圖2.2.1、 61硬件板框圖</p><p><b>  框圖說(shuō)明:</b></p><p>  表2.2.2、框圖說(shuō)明</p>

7、<p><b>  61板接口說(shuō)明圖:</b></p><p>  圖2.2.3、61板接口說(shuō)明</p><p><b>  2.2.1基本參數(shù)</b></p><p>  工作電壓:4.5V(三節(jié)干電池);</p><p>  時(shí)間采用24小時(shí)制;</p><p&

8、gt;  采用六位數(shù)碼管動(dòng)態(tài)顯示年月日/時(shí)分秒。</p><p>  2.2.2所需元件及元件參數(shù)</p><p>  凌陽(yáng)十六位單片機(jī)組套;</p><p>  三節(jié)1.5V干電池;</p><p>  一片SR420561K四位數(shù)碼管和兩片SM420501K一位數(shù)碼管;</p><p>  20位插排、數(shù)據(jù)傳輸線、

9、一些導(dǎo)線和焊錫。</p><p><b>  2.2.3注意事項(xiàng)</b></p><p>  將61板上的J5跳線選擇3.3V;</p><p>  在安裝電池時(shí)注意正負(fù)極,否則容易燒壞芯片;</p><p>  在印制電路板上的焊接元器件前要認(rèn)真對(duì)照原理圖,仔細(xì)查看印制電路板,找到對(duì)應(yīng)的元器件功能區(qū);</p>

10、;<p>  在電源測(cè)試期間請(qǐng)勿將單片機(jī)芯片插入座中,以免電源部分有問(wèn)題造成芯片燒壞。</p><p>  連接外接電路時(shí)一定要注意端口對(duì)應(yīng)關(guān)系,以免連接錯(cuò)誤不能正常顯示;</p><p>  在焊接外圍電路時(shí),要仔細(xì)認(rèn)真,以免造成個(gè)別焊點(diǎn)焊接不良。</p><p>  2.3輸入/輸出(I/O)接口</p><p>  61板

11、將SPCE061A的IOB端口引出,IOB的所有端口均設(shè)置為輸出端口,IOA的低八位端口設(shè)置為輸入端口,其中IOA端口的IOA0~IOA2為默認(rèn)的Key1、Key2、Key3按鍵接口,IOB端口的IOB7~IOB2設(shè)置為數(shù)碼管的位選端口,高八位IOB15~IOB8設(shè)置為數(shù)碼管的段選接口。</p><p><b>  調(diào)試步驟</b></p><p><b>

12、  3.1 軟件部分</b></p><p>  3.1.1時(shí)間顯示函數(shù)</p><p>  題目要求我們?cè)谠械娜f(wàn)年歷的基礎(chǔ)上更改程序使之滿足鬧鐘定時(shí)器功能,而原有萬(wàn)年歷程序部分并未給出外圍顯示部分,因此我們小組在此基礎(chǔ)上添加了時(shí)鐘時(shí)間顯示函數(shù)display(),程序如下:</p><p>  //===========================

13、===========================</p><p>  // 文件名稱:Clock_Display.c</p><p>  // 功能描述:調(diào)整日期和時(shí)間的函數(shù)集</p><p>  //======================================================</p><p>  #

14、include"spce061a.h"</p><p>  #include "Key.h"</p><p>  static int LED1[10] = {0xfcfb,0x60fb,0xdafb,0xf2fb,0x66fb,0xb6fb,0xbefb,0xe0fb,0xfefb,0xf6fb};</p><p>  st

15、atic int LED2[10] = {0xfcf7,0x60f7,0xdaf7,0xf2f7,0x66f7,0xb6f7,0xbef7,0xe0f7,0xfef7,0xf6f7};</p><p>  static int LED3[10] = {0xfdef,0x61ef,0xdbef,0xf3ef,0x67ef,0xb7ef,0xbfef,0xe1ef,0xffef,0xf7ef};</p>

16、<p>  static int LED4[10] = {0xfcdf,0x60df,0xdadf,0xf27f,0x66df,0xb6df,0xbedf,0xe07f,0xfedf,0xf6df};</p><p>  static int LED5[10] = {0xfdbf,0x61bf,0xdbbf,0xf3bf,0x67bf,0xb7bf,0xbfbf,0xe1bf,0xffbf,0xf7b

17、f};</p><p>  static int LED6[10] = {0xfc7f,0x607f,0xda7f,0xf27f,0x667f,0xb67f,0xbe7f,0xe07f,0xfe7f,0xf67f};</p><p>  //IOB口的高八位接段選,低六位接位選</p><p>  //共陰接法'0''1''2

18、''3''4''5''6''7''8''9'的代碼</p><p>  void display(unsigned Hour,unsigned Min,unsigned Sec)</p><p><b>  {</b></p><

19、p><b>  int i;</b></p><p>  unsigned int Fir_hour;</p><p>  unsigned int Sec_hour;</p><p>  unsigned int Fir_min;</p><p>  unsigned int Sec_min;</p>

20、<p>  unsigned int Fir_sec;</p><p>  unsigned int Sec_sec; </p><p>  Fir_hour=Hour/10;//時(shí)鐘十位要顯示的數(shù)字</p><p>  Sec_hour=Hour%10;//時(shí)鐘個(gè)位要顯示的數(shù)字</p><p>  Fir_min=Min/

21、10; //分鐘十位要顯示的數(shù)字</p><p>  Sec_min=Min%10; //分鐘個(gè)位要顯示的數(shù)字</p><p>  Fir_sec=Sec/10; //秒鐘十位要顯示的數(shù)字</p><p>  Sec_sec=Sec%10; //秒鐘個(gè)位要顯示的數(shù)字</p><p>  *P_IOB_Attrib = 0xffff;

22、 //初始化IOB0~I(xiàn)OB15帶數(shù)據(jù)緩存的高電平輸出口 </p><p>  *P_IOB_Dir = 0xffff;</p><p>  *P_IOB_Data = 0xffff; </p><p>  *P_IOB_Data = LED1[Sec_sec];</p><p>  *P_Watchdog_Clea

23、r = 0x0001;</p><p>  for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED2[Fir_sec];</p><p>  *P_Wat

24、chdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; } </p><p>  *P_IOB_Data = LED3[Sec_min];</p><p&

25、gt;  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED4[Fir_min];</p&g

26、t;<p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED5[Sec_hou

27、r];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; } </p><p>  *P_IOB_Data

28、= LED6[Fir_hour];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x0011;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>&l

29、t;b>  } </b></p><p>  3.1.1日期顯示函數(shù)</p><p>  但是題目要求我們還要顯示日期,這樣既要求顯示日期又要求顯示時(shí)間,如果我們選擇12個(gè)數(shù)碼管當(dāng)然理論上是可以實(shí)現(xiàn)的,但是一方面這樣太浪費(fèi)資源,另一方面在引腳控制上也過(guò)于繁瑣(要至少有12個(gè)位選端口8個(gè)段選端口共20個(gè)端口),因此我們考慮添加日期顯示函數(shù)displaydata

30、(),具體程序如下:</p><p>  void displaydata(unsigned Year,unsigned Mon,unsigned Day)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  unsigned int Fir

31、_year;</p><p>  unsigned int Sec_year;</p><p>  unsigned int Fir_mon;</p><p>  unsigned int Sec_mon;</p><p>  unsigned int Fir_day;</p><p>  unsigned int S

32、ec_day; </p><p>  Fir_year=Year/10%10;//年十位要顯示的數(shù)字</p><p>  Sec_year=Year%10;//年個(gè)位要顯示的數(shù)字</p><p>  Fir_mon=Mon/10; //月十位要顯示的數(shù)字</p><p>  Sec_mon=Mon%10; //月個(gè)位要顯示的數(shù)字<

33、;/p><p>  Fir_day=Day/10; //日十位要顯示的數(shù)字</p><p>  Sec_day=Day%10; //日個(gè)位要顯示的數(shù)字</p><p>  *P_IOB_Attrib = 0xffff; //初始化IOB0~I(xiàn)OB15帶數(shù)據(jù)緩存的高電平輸出口 </p><p>  *P_IOB_Di

34、r = 0xffff;</p><p>  *P_IOB_Data = 0xffff; </p><p>  *P_IOB_Data = LED1[Sec_day];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;i++)

35、 //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED2[Fir_day];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;i++)

36、 //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED3[Sec_mon];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i<0x00ef;

37、i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED4[Fir_mon];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p>  for(i=0;i&

38、lt;0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p>  *P_IOB_Data = LED5[Sec_year];</p><p>  *P_Watchdog_Clear = 0x0001;</p><p> 

39、 for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; } </p><p>  *P_IOB_Data = LED6[Fir_year];</p><p>  *P_Watchdog_Clear = 0x0001;</p&g

40、t;<p>  for(i=0;i<0x00ef;i++) //延時(shí)</p><p>  { *P_Watchdog_Clear = 0x0001; }</p><p><b>  }</b></p><p>  3.1.1時(shí)間日期實(shí)現(xiàn)交替</p><p&g

41、t;  然而我們會(huì)發(fā)現(xiàn)在主程序中要想調(diào)用這兩個(gè)函數(shù)顯示日期和時(shí)間并不是那么容易的,那么如何讓數(shù)碼管既能顯示日期又能顯示時(shí)間呢?我們考慮到兩種方案:1、通過(guò)按鍵設(shè)置來(lái)實(shí)現(xiàn)日期和時(shí)間的切換顯示;2、通過(guò)時(shí)間條件來(lái)交替顯示日期和時(shí)間。這里我們選擇了第二種方案。調(diào)用程序如下:</p><p>  if(Clock_GetSec()/5)</p><p>  display(Clock_GetHou

42、r(),Clock_GetMin(),Clock_GetSec());</p><p><b>  else</b></p><p>  displaydata(Clock_GetYear(),Clock_GetMon(),Clock_GetDay();</p><p>  即每隔一分鐘顯示一次日期,日期的顯示時(shí)間長(zhǎng)度為5s。</p>

43、;<p>  其他部分這里就不贅述了,完整程序見(jiàn)附錄8.1。</p><p><b>  3.2硬件部分</b></p><p>  硬件部分主要是六位數(shù)碼管,在連接數(shù)碼管時(shí)要分清位選端和片選段,對(duì)數(shù)碼管的各個(gè)引腳應(yīng)該熟悉。我們采用的是SR420561K四位數(shù)碼管和兩個(gè)SM420501K數(shù)碼管,他們都是共陰極數(shù)碼管,他們的引腳圖如下:</p>

44、<p>  圖3.2.1、SM420501K數(shù)碼管 圖3.2.2、SR420561K四位數(shù)碼管</p><p>  外圍電路接口控制圖如下:</p><p>  圖3.2.3、IOB端口引腳連接圖</p><p>  圖3.2.4、六位數(shù)碼管動(dòng)態(tài)顯示原理圖</p><p>  圖3.2.5、按鍵控制電路</p&

45、gt;<p><b>  總體電路圖:</b></p><p>  圖3.2.6 總體電路圖</p><p><b>  實(shí)物圖連接圖如下:</b></p><p>  圖3.2.7 實(shí)物連接圖</p><p><b>  測(cè)試結(jié)果</b></p>

46、<p>  測(cè)試步驟及結(jié)果如下:</p><p>  連接好電路并檢查無(wú)誤后,打開(kāi)電源開(kāi)關(guān),此時(shí)顯示的時(shí)間為程序設(shè)定的初始時(shí)間和日期;</p><p>  按Key1第一次,播報(bào)時(shí)間(Clock_Speech.c);</p><p>  按Key1第二次,調(diào)整鬧鐘(main.c);再按Key2鍵為加,按Key3鍵為減;</p><p&g

47、t;  Key1鍵長(zhǎng)按,調(diào)整日期和時(shí)間(Clock_Adjust.c);再按Key2鍵為加,按Key3鍵為減;</p><p>  按Key2鍵,播報(bào)日期(Clock_Speech.c);</p><p>  按Key3鍵,播報(bào)鬧鐘時(shí)間;</p><p>  如果達(dá)到設(shè)定時(shí)間 鬧鈴響最長(zhǎng)一分鐘,若在鬧鐘時(shí)間按Key1鍵,停止鬧鈴。</p><p

48、><b>  結(jié)論</b></p><p><b>  5.1本方案的特點(diǎn)</b></p><p>  本方案設(shè)計(jì)思路簡(jiǎn)單易懂,非常適合新手入門(mén);</p><p>  數(shù)碼管顯示采用動(dòng)態(tài)顯示方法,便于理解和掌握;</p><p>  程序中對(duì)輸入輸出端口的定義對(duì)剛剛接觸單片機(jī)的同學(xué)在理解上有很

49、大幫助;</p><p>  外圍電路簡(jiǎn)單實(shí)用,沒(méi)有過(guò)多的器件;</p><p>  凌陽(yáng)單片機(jī)自帶的語(yǔ)音功能幫助我們很好的實(shí)現(xiàn)了語(yǔ)音播報(bào)鬧鈴等。</p><p><b>  5.2本方案的缺點(diǎn)</b></p><p>  外圍電路數(shù)碼管顯示亮度不均較暗,這是由于我們程序采用的是循環(huán)延時(shí)方式,使得各個(gè)數(shù)碼管的亮滅時(shí)間長(zhǎng)短

50、不同;</p><p>  鬧鈴與數(shù)碼管顯示沖突,不能同時(shí)進(jìn)行;</p><p>  按鍵過(guò)少,使得初次實(shí)用者操作不便;</p><p>  5.3本方案的改進(jìn)擴(kuò)展部分</p><p>  如果仍采用循環(huán)延時(shí)顯示方法,需要改進(jìn)的是將各個(gè)數(shù)碼管延時(shí)時(shí)間調(diào)成一致,從而使數(shù)碼管亮度均勻;</p><p>  可以減小外電路的

51、保護(hù)電阻阻值,或者通過(guò)加入三極管放大電路放大電流,從而提高數(shù)碼管的亮度;</p><p>  可以采用中斷機(jī)制,從而達(dá)到亮度均勻,以及鬧鈴與數(shù)碼管顯示互不干擾的目的;</p><p>  可以外接鍵盤(pán)組模,從而更加便于操作;</p><p>  語(yǔ)音鬧鐘部分可以拓展為音樂(lè)盒,鬧鐘鈴聲可以外接鍵盤(pán)選擇;</p><p>  數(shù)碼管顯示畢竟不如液

52、晶顯示更為先進(jìn),因此可以考慮改用液晶做外接顯示;</p><p><b>  5.5 小結(jié)</b></p><p>  雖然以上改進(jìn)部分可以使我們的課程設(shè)計(jì)更加完美,但是由于時(shí)間有限,并</p><p>  且我們組員都是初學(xué)者,沒(méi)有那么多時(shí)間補(bǔ)充完整,因此這部分我們將在以后的學(xué)習(xí)中繼續(xù)學(xué)習(xí)補(bǔ)充。此外,本方案設(shè)計(jì)也基本符合課程設(shè)計(jì)題目要求,達(dá)到

53、了預(yù)期目的。</p><p><b>  六、本作品使用說(shuō)明</b></p><p><b>  操作說(shuō)明:</b></p><p>  首先檢查焊接電路是否有問(wèn)題,確定連接線路無(wú)誤后方可打開(kāi)電源開(kāi)關(guān),此時(shí)顯示初始時(shí)間和日期;</p><p>  圖6.1 時(shí)分秒 (9:40:29)

54、 圖6.2 年月日(2011.7.26)</p><p>  2、按Key1第一次,播報(bào)時(shí)間——小時(shí)、分鐘;</p><p>  3、按Key1第二次,語(yǔ)音提示調(diào)整鬧鐘;再按Key2鍵為加,按Key3鍵為減;同時(shí)有語(yǔ)音提示;</p><p>  4、Key1鍵長(zhǎng)按,語(yǔ)音提示調(diào)整日期和時(shí)間;再按Key2鍵為加,按Key3鍵為減;同時(shí)有語(yǔ)音提示;</p&

55、gt;<p>  5、按Key2鍵,語(yǔ)音播報(bào)日期——年、月、日;</p><p>  6、按Key3鍵,播報(bào)鬧鐘時(shí)間;</p><p>  7、如果達(dá)到設(shè)定時(shí)間 鬧鈴響最長(zhǎng)一分鐘,鬧鈴為本組錄制,可通過(guò)程序更改鈴聲;若在鬧鐘時(shí)間按Key1鍵一次,停止鬧鈴。</p><p><b>  課程設(shè)計(jì)心得體會(huì)</b></p>

56、<p>  7.1馬守江的心得體會(huì):</p><p>  通過(guò)本次課程設(shè)計(jì)我學(xué)到了很多東西,單片機(jī)方面的知識(shí)我們?cè)谥敖佑|較少,因此在剛開(kāi)始做這個(gè)課程設(shè)計(jì)時(shí),我感覺(jué)有些吃力,但是經(jīng)過(guò)一個(gè)星期左右的學(xué)習(xí),我基本上掌握了單片機(jī)的基本原理和利用單片機(jī)做硬件開(kāi)發(fā)的相關(guān)思路。</p><p>  我們這次選的課題是利用凌陽(yáng)十六位單片機(jī)實(shí)習(xí)鬧鐘和定時(shí)器功能,可以說(shuō)這對(duì)于單片機(jī)開(kāi)發(fā)者來(lái)說(shuō)是

57、最基礎(chǔ)最簡(jiǎn)單的課題了,然而我在學(xué)習(xí)的過(guò)程中卻四處碰壁,對(duì)于網(wǎng)上的很多解答都不能想得很透徹,這樣郁悶的狀態(tài)大概持續(xù)了五六天的樣子,這期間我不斷的問(wèn),雖然有時(shí)候?qū)τ谒麄兪呛芎?jiǎn)單的問(wèn)題,有時(shí)候心里也確實(shí)有所顧忌,然而我知道不懂必須要問(wèn),即使被別人看不起也要厚著臉皮去問(wèn)去學(xué)。還好這樣最終我還是把課題的知識(shí)體系理清楚了,結(jié)合C語(yǔ)言知識(shí),后面我已經(jīng)可以自己對(duì)程序進(jìn)行調(diào)試修改補(bǔ)充了,直到昨天我還在對(duì)程序進(jìn)行最后的修正補(bǔ)充,我相信功夫不負(fù)有心人,最終我

58、們還是順利完成了課程設(shè)計(jì)。</p><p>  說(shuō)說(shuō)在做課程設(shè)計(jì)過(guò)程中遇到的問(wèn)題吧,我不想說(shuō)的太繁瑣,只想提一點(diǎn),那就是單片機(jī)的輸入輸出(IO)接口問(wèn)題,這個(gè)問(wèn)題是我在做課程設(shè)計(jì)時(shí)一直困擾我的,如果把端口定義端口連接機(jī)制搞清楚了,那么我認(rèn)為這個(gè)單片機(jī)就已經(jīng)是你的了,你就可以隨心所欲的對(duì)外圍電路進(jìn)行控制了。我們鬧鐘定時(shí)器的外圍電路相當(dāng)簡(jiǎn)單,復(fù)雜一點(diǎn)也就是鍵盤(pán)組模、三極管放大電路、數(shù)碼管顯示三個(gè)部分而已,但是如果對(duì)外

59、圍接口不清楚,那就完全失去方向了,當(dāng)我搞清楚IO端口定義時(shí),這時(shí)我們的課題設(shè)計(jì)才有了實(shí)質(zhì)性的進(jìn)步,然后我們才設(shè)計(jì)出了數(shù)碼管的動(dòng)態(tài)顯示電路,鍵盤(pán)控制操作等等。因此我個(gè)人認(rèn)為,雖然我們做的是硬件,但是更多的知識(shí)卻是儲(chǔ)存在軟件編程里的,所以我認(rèn)為學(xué)習(xí)單片機(jī)不僅要學(xué)會(huì)設(shè)計(jì)各種電路系統(tǒng),還應(yīng)該掌握編程技術(shù),軟件與硬件結(jié)合起來(lái),就好比真理與實(shí)踐結(jié)合起來(lái)一樣的道理。</p><p>  可以說(shuō)這次實(shí)習(xí)的時(shí)間還是不夠用的,畢竟我

60、們既是在學(xué)習(xí)又是在實(shí)踐,短短的十多天時(shí)間畢竟不能完全掌握一門(mén)知識(shí),但是通過(guò)這種鍛煉學(xué)習(xí),我們卻掌握了硬件開(kāi)發(fā)的基本思路框架,這對(duì)于我們?cè)谝院蟮膶W(xué)習(xí)和工作都是非常有用的。在這次的課程設(shè)計(jì)過(guò)程中,我還學(xué)到的一點(diǎn)就是,多一個(gè)人多一份力,原本是打算一個(gè)人做的,但是到現(xiàn)在看來(lái),如果一個(gè)人的話中間會(huì)有多少不便就難說(shuō)了,就拿外圍電路來(lái)說(shuō),雖然說(shuō)軟件部分是我做的,但是我做硬件方面卻欠缺的很,電路連接布線布局很不美觀,最后的電路板是由我的隊(duì)友賀鵬同學(xué)全程

61、焊接的,在此謝謝他,辛苦了。實(shí)習(xí)即將結(jié)束,暑假即將開(kāi)始,真是一個(gè)充實(shí)的暑假生活。</p><p>  7.2賀鵬的心得體會(huì):</p><p>  本次課程設(shè)計(jì),我們組選的課題是:基于凌陽(yáng)61單片機(jī)可顯示時(shí)間的語(yǔ)音鬧鐘??傮w而言,此課題不算復(fù)雜。</p><p>  本課題的核心有兩部分:一是凌陽(yáng)單片機(jī),這是最為核心的部件;二是顯示時(shí)間的外圍電路,這一部分是需要我們動(dòng)

62、手設(shè)計(jì)的。</p><p>  焊接單片機(jī)是本次課程設(shè)計(jì)的第一步。當(dāng)時(shí),領(lǐng)到的器件有:①小個(gè)子元器件(20個(gè)),包括晶振(1個(gè))、二極管(3個(gè))、SPY0029A(1個(gè))、電阻(18個(gè));②中個(gè)子元器件(45個(gè)),包括瓷片電容(5個(gè))、獨(dú)石電容(19個(gè))、電解電容(12個(gè))、按鍵(4個(gè))、發(fā)光二級(jí)管(2個(gè))、芯片座(3個(gè));③大個(gè)子元器件(13個(gè)),包括排針(9個(gè))、接座(3個(gè))、電位器(1個(gè));④成型的PCB板

63、一塊;⑤芯片(3個(gè))。面對(duì)這一大堆凌亂的元器件,給我的感覺(jué)是無(wú)從著手。好在之前看過(guò)師兄師姐的單片機(jī)成品,并且我從互聯(lián)網(wǎng)上也查過(guò)單片機(jī)的資料,再加上跟隨器件一起的使用手冊(cè),于是我摸索著焊接自己的單片機(jī)。</p><p>  焊接61板,首先,需要進(jìn)行61裸板檢測(cè)。這一步很簡(jiǎn)單,也很重要,如果裸板存在問(wèn)題,那么以后的工作都將是徒勞。然后是檢測(cè)元器件,并做元器件的整形。這樣做的目的是確保以后用到的每一個(gè)元器件都是完整并

64、且正常工作的,否則某個(gè)元器件出了問(wèn)題,查找起來(lái)也不是件容易的事兒。再就是對(duì)元器件進(jìn)行分類,這樣做是為了后面進(jìn)行焊接工作時(shí)更為清晰,不容易遺漏元器件。最后是按照焊接單片機(jī)的18個(gè)步驟進(jìn)行焊接。這一步很復(fù)雜,花費(fèi)的時(shí)間也是最多的,往往一不小心就出錯(cuò)了。最終導(dǎo)致的結(jié)果是整個(gè)單片機(jī)無(wú)法工作。我在這個(gè)步驟中就犯了不少錯(cuò)誤。一是我將兩個(gè)電解電容的位置弄錯(cuò)了,修正時(shí)不得不把兩個(gè)電容重新拔出來(lái)對(duì)換位置,這樣一折騰,電容的性能就很讓人擔(dān)心了;二是我將兩個(gè)

65、發(fā)光二極管的正負(fù)極性接反了,究其緣由是我當(dāng)初焊接電路是想當(dāng)然,沒(méi)有去查資料,也沒(méi)有用萬(wàn)用表檢測(cè)其極性,完全是憑著自己的主觀臆斷去焊接發(fā)光二極管,折騰一番后,兩個(gè)發(fā)光二極管都被我弄壞了,不得不用新的發(fā)光二極管替換;三是我將單排插針焊在了五針座的位置上,結(jié)果又是一番折騰。不過(guò)最后我焊接的單片機(jī)還是成功的運(yùn)行了自檢程序。</p><p>  對(duì)于單片機(jī)的焊接,我犯的這些錯(cuò)誤都是由于我不夠細(xì)心而造成的。不過(guò)我更為欣慰的是

66、:雖然錯(cuò)誤犯了不少,但經(jīng)過(guò)我的修正,最終我的單片機(jī)還是正常運(yùn)行起來(lái)了。正所謂,知識(shí)有時(shí)候是在不斷犯錯(cuò)誤中積累起來(lái)的。</p><p>  外圍電路的設(shè)計(jì)是本次課程設(shè)計(jì)的意義所在。第一步焊接單片機(jī)時(shí)有現(xiàn)成的原理圖可以參照,而外圍電路的每一個(gè)步驟都需要自己動(dòng)手完成。這是真正意義上從無(wú)到有的過(guò)程。因?yàn)橹皩?duì)單片機(jī)的整體構(gòu)造有了了解,所以在設(shè)計(jì)外圍電路時(shí),能夠大致確定外圍電路所需要的器件。</p><

67、p>  首先,數(shù)碼管是顯示電路必不可少的部件;其次,為了保證數(shù)碼管的亮度,我們?cè)O(shè)想使用三極管作為驅(qū)動(dòng)電路,但最后,經(jīng)過(guò)實(shí)踐發(fā)現(xiàn),增加三極管對(duì)于電路的布局有諸多的不利:第一,電路板的面積很有限;第二,數(shù)碼管采用的是一個(gè)四合一數(shù)碼管和兩個(gè)一位的數(shù)碼管,其引腳總共達(dá)到了32個(gè)!在有限的電路板上焊接32個(gè)引腳,并且引腳間的連接采用的是導(dǎo)線,這使得電路布局十分緊湊。如果再加上三極管和相應(yīng)的保護(hù)電阻,這無(wú)疑會(huì)增加焊接難度。更為重要的是,在不

68、使用三極管和保護(hù)電阻的情況下,數(shù)碼管的顯示亮度已經(jīng)達(dá)到了預(yù)定效果。因此,我們選擇舍棄了這些雞肋部件,就這樣焊接好了外圍電路。</p><p>  當(dāng)然在焊接外圍電路時(shí)也遇到過(guò)麻煩,究其原因是焊接的密度太大。另一方面,在焊接之前,我在紙上對(duì)電路進(jìn)行了詳細(xì)布局,所以在查找問(wèn)題時(shí),很容易就解決了。</p><p>  此次實(shí)習(xí),從其整個(gè)過(guò)程來(lái)看,是一次硬件設(shè)計(jì)的初體驗(yàn)。于我而言,硬件設(shè)計(jì)不是我最

69、佳的追求,但這的確是一次美好的體驗(yàn),至少讓我知道,有些東西注定要親身嘗試,沒(méi)有去嘗試,你永遠(yuǎn)不知道你的潛力有多大。</p><p><b>  附錄</b></p><p><b>  8.1主要程序</b></p><p><b>  Main()函數(shù):</b></p><p&g

70、t;  //=======================================================</p><p>  // 工程名稱:61_BardianClock</p><p>  // 功能描述:個(gè)性鬧鐘,用按鍵設(shè)定鬧鐘時(shí)間,到達(dá)設(shè)定時(shí)間揚(yáng)聲器發(fā)出音樂(lè)。</p><p>  //Key1 - 按一下,報(bào)時(shí);再按一下,定

71、時(shí);</p><p>  //長(zhǎng)按Key1鍵達(dá)到1.5秒,則進(jìn)入調(diào)時(shí)模式</p><p>  //Key2 - 在調(diào)時(shí)/定時(shí)模式下,使年、月、日、時(shí)、分、秒增加; </p><p>  //Key3 - 在調(diào)時(shí)/定時(shí)模式下,使年、月、日、時(shí)、分、秒減小</p><p>  // 涉及的庫(kù):SacmV26e.li

72、b</p><p>  // 組成文件:main.c, Sound.c, Clock.c, Clock_Speech.c, Clock_Adjust.c,</p><p>  // Clock_Display.c</p><p>  //Key.asm, hardware.asm, ISR.asm</p><

73、p>  // A2000.h, Sound.h, Clock.h, Clock_Speech.h, Clock_Adjust.h, </p><p>  // Key.h, SPCE061A.h </p><p>  //硬件連接:61板自帶的三個(gè)按鍵已經(jīng)連接在IOA0~IOA2上</p><p>  //

74、 IOB的高八位接數(shù)碼管的段選,低四位的IOB7~4接位選</p><p>  //======================================================</p><p>  //======================================================</p><p>  //

75、文件名稱:main.c</p><p>  // 功能描述:主程序</p><p>  //======================================================</p><p>  #include "spce061a.h"</p><p>  #include "So

76、und.h"</p><p>  #include "Key.h"</p><p>  #include "Clock.h"</p><p>  #include "Clock_Speech.h"</p><p>  #include "Clock_Adjust.

77、h"</p><p>  #include "Clock_display.h"</p><p>  typedef struct STR_ALARM// 定義鬧鐘結(jié)構(gòu)體</p><p><b>  {</b></p><p>  unsigned int Hour;</p

78、><p>  unsigned int Min;</p><p>  unsigned int Sec;</p><p><b>  }ALARM;</b></p><p>  ALARM Alarm = {9, 41, 0};// 鬧鐘初始值9點(diǎn)41分0秒</p><p>  //=====

79、========================================================</p><p>  // 語(yǔ)法格式:unsigned int SetHour(unsigned int Hour);</p><p>  // 實(shí)現(xiàn)功能:設(shè)置小時(shí)</p><p>  // 參數(shù):Hour - 設(shè)置前的時(shí)</p>&

80、lt;p>  // 返回值:設(shè)置后的時(shí)</p><p>  //=============================================================</p><p>  unsigned int SetHour(unsigned int Hour)</p><p><b>  {</b></

81、p><p>  unsigned int KeyCode;</p><p>  unsigned int TempHour = Hour;</p><p>  PlayHour(TempHour);// 播報(bào)設(shè)置小時(shí)數(shù)</p><p><b>  while(1)</b></p><p&g

82、t;<b>  {</b></p><p>  *P_Watchdog_Clear = 0x01;</p><p>  KeyCode = Key_Get();</p><p>  switch(KeyCode)</p><p><b>  {</b></p><p>  c

83、ase KEY_1:</p><p>  return TempHour;// Key1,返回設(shè)置后的小時(shí)</p><p>  case KEY_2:</p><p>  TempHour++;// Key2,時(shí)數(shù)加1,到23后回復(fù)為0</p><p>  if(TempHour>23) TempHour = 0

84、;</p><p>  PlayHour(TempHour);</p><p><b>  break;</b></p><p>  case KEY_3:</p><p>  if(TempHour==0) TempHour = 23;// Key3,時(shí)數(shù)減1,到0后回復(fù)為23</p><p&g

85、t;  else TempHour--;</p><p>  PlayHour(TempHour);</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b>  break;</b></p>

86、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //=============================================================</p><

87、p>  // 語(yǔ)法格式:unsigned int SetMin(unsigned int Min);</p><p>  // 實(shí)現(xiàn)功能:設(shè)置分</p><p>  // 參數(shù):Min - 設(shè)置前的分</p><p>  // 返回值:設(shè)置后的分</p><p>  //===========================

88、==================================</p><p>  unsigned int SetMin(unsigned int Min)</p><p><b>  {</b></p><p>  unsigned int KeyCode;</p><p>  unsigned int Tem

89、pMin = Min;</p><p>  PlayNum(TempMin);// 播報(bào)調(diào)整前的分鐘數(shù)</p><p>  PlaySnd(S_Fen);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p&

90、gt;  *P_Watchdog_Clear = 0x01;</p><p>  KeyCode = Key_Get();</p><p>  switch(KeyCode)</p><p><b>  {</b></p><p>  case KEY_1:</p><p>  return Te

91、mpMin;// Key1,返回調(diào)整后的分</p><p>  case KEY_2:</p><p>  TempMin++;// Key2,分鐘數(shù)加1,到59后變?yōu)?</p><p>  if(TempMin>59) TempMin = 0;</p><p>  PlayNum(TempMin);</

92、p><p>  PlaySnd(S_Fen);</p><p><b>  break;</b></p><p>  case KEY_3:</p><p>  if(TempMin==0) TempMin = 59;// Key3,分鐘數(shù)減1,到0后變?yōu)?9</p><p>  else Tem

93、pMin--;</p><p>  PlayNum(TempMin);</p><p>  PlaySnd(S_Fen);</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b>  break

94、;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //======================================================

95、=======</p><p>  // 語(yǔ)法格式:unsigned int SetSec(unsigned int Sec);</p><p>  // 實(shí)現(xiàn)功能:設(shè)置秒</p><p>  // 參數(shù):Sec - 設(shè)置前的秒</p><p>  // 返回值:設(shè)置后的秒</p><p>  //====

96、=========================================================</p><p>  unsigned int SetSec(unsigned int Sec)</p><p><b>  {</b></p><p>  unsigned int KeyCode;</p><

97、p>  unsigned int TempSec = Sec;</p><p>  PlaySec(TempSec);// 播報(bào)調(diào)整前的秒數(shù)</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  *P_Watchdog

98、_Clear = 0x01;</p><p>  KeyCode = Key_Get();</p><p>  switch(KeyCode)</p><p><b>  {</b></p><p>  case KEY_1:</p><p>  return TempSec;// K

99、ey1,返回調(diào)整后的秒</p><p>  case KEY_2:</p><p>  TempSec++;// Key2,秒加1,到59后變?yōu)?</p><p>  if(TempSec>59) TempSec = 0;</p><p>  PlaySec(TempSec);</p><p>&l

100、t;b>  break;</b></p><p>  case KEY_3:</p><p>  if(TempSec==0) TempSec = 59;// Key3,秒減1,到0后變?yōu)?9</p><p>  else TempSec--;</p><p>  PlaySec(TempSec);</p>

101、<p><b>  break;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b&g

102、t;</p><p><b>  }</b></p><p>  //=============================================================</p><p>  // 語(yǔ)法格式:void Adjust(void);</p><p>  // 實(shí)現(xiàn)功能:設(shè)置時(shí)間<

103、;/p><p><b>  // 參數(shù):無(wú)</b></p><p>  // 返回值:無(wú)</p><p>  //=============================================================</p><p>  void Set()</p><p>

104、;<b>  {</b></p><p>  Alarm.Hour = SetHour(Alarm.Hour);// 設(shè)置時(shí)</p><p>  Alarm.Min = SetMin(Alarm.Min); // 設(shè)置分</p><p>  Alarm.Sec = SetSec(Alarm.Sec); // 設(shè)置

105、秒</p><p>  PlaySnd(S_DING);// 播報(bào)設(shè)置后的時(shí)間(Clock_Speech.c)</p><p>  PlayHour(Alarm.Hour);</p><p>  PlayMin(Alarm.Min);</p><p>  PlaySec(Alarm.Sec);</p><

106、p><b>  }</b></p><p>  //=============================================================</p><p>  // 語(yǔ)法格式:int main(void);</p><p>  // 實(shí)現(xiàn)功能:主函數(shù)</p><p><

107、b>  // 參數(shù):無(wú)</b></p><p>  // 返回值:無(wú)</p><p>  //=============================================================</p><p>  int main()</p><p><b>  3{</b&g

108、t;</p><p>  unsigned int KeyCode;</p><p>  unsigned int Flag = 0;</p><p>  unsigned int Flag1 = 0;</p><p>  Key_Init();// 初始化按鍵掃描程序(Key.asm)</p><p&

109、gt;  Clock_Start();// 初始化計(jì)時(shí)程序(Clock.c)</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  KeyCode = Key_Get();// 獲取按鍵值(Key.asm)</p>&l

110、t;p>  switch(KeyCode)</p><p><b>  {</b></p><p>  case KEY_1:</p><p>  if(Flag==0)</p><p><b>  {</b></p><p>  PlayTime();

111、 //按Key1第一次,播報(bào)時(shí)間(Clock_Speech.c)</p><p><b>  Flag = 1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

112、;/b></p><p>  Set(); //按Key1第二次,調(diào)整鬧鐘(main.c) </p><p><b>  Flag = 0;</b></p><p><b>  }</b></p><p><b>  break;&l

113、t;/b></p><p>  case KEY_LONG_1:// Key1鍵長(zhǎng)按,調(diào)整日期和時(shí)間(Clock_Adjust.c)</p><p><b>  Adjust();</b></p><p><b>  break;</b></p><p>  case KEY_2:

114、 </p><p>  { //按Key2鍵,播報(bào)日期(Clock_Speech.c)</p><p>  PlayDate();</p><p><b>  }</b></p><p><b>  break;</b><

115、/p><p>  case KEY_3: //按Key3鍵,播報(bào)鬧鐘時(shí)間</p><p><b>  {</b></p><p>  PlaySnd(S_DING);</p><p>  PlayHour(Alarm.Hour);</p><p>

116、;  PlayMin(Alarm.Min);</p><p>  PlaySec(Alarm.Sec);</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  default:</b></p>&

117、lt;p><b>  break;</b></p><p><b>  }</b></p><p>  if(Clock_GetSec()/5)</p><p>  display(Clock_GetHour(),Clock_GetMin(),Clock_GetSec());</p><p>

118、<b>  else</b></p><p>  displaydata(Clock_GetYear(),Clock_GetMon(),Clock_GetDay());</p><p>  if(Alarm.Hour==Clock_GetHour()) //如果達(dá)到設(shè)定時(shí)間 鬧鈴響最長(zhǎng)一分鐘</p><p>  if

119、(Alarm.Min==Clock_GetMin())</p><p>  if(Alarm.Sec==Clock_GetSec())</p><p>  for(Flag1=0;Flag1<=25;Flag1++)</p><p><b>  {</b></p><p>  PlaySnd(S_s);</p

120、><p>  if(Key_Get()==KEY_1) //如果按Key1鍵,停止鬧鈴</p><p><b>  Flag1=26;</b></p><p>  *P_Watchdog_Clear = 0x01;</p><p><b>  }</b></p>&l

121、t;p>  *P_Watchdog_Clear = 0x01;// 清看門(mén)狗</p><p>  *P_SystemClock = 0x001F;// 進(jìn)入睡眠模式</p><p><b>  }</b></p><p><b>  }</b></p><p><b&

122、gt;  顯示函數(shù)部分:</b></p><p>  //======================================================</p><p>  // 文件名稱:Clock_Display.c</p><p>  // 功能描述:調(diào)整日期和時(shí)間的函數(shù)集</p><p>  //====

123、==================================================</p><p>  #include"spce061a.h"</p><p>  #include "Key.h"</p><p>  static int LED1[10] = {0xfcfb,0x60fb,0xdafb,0

124、xf2fb,0x66fb,0xb6fb,0xbefb,0xe0fb,0xfefb,0xf6fb};</p><p>  static int LED2[10] = {0xfcf7,0x60f7,0xdaf7,0xf2f7,0x66f7,0xb6f7,0xbef7,0xe0f7,0xfef7,0xf6f7};</p><p>  static int LED3[10] = {0xfdef,0

溫馨提示

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