2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩21頁(yè)未讀 繼續(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>  智能裝置課程設(shè)計(jì)報(bào)告</p><p>  一、設(shè)計(jì)題目 空調(diào)控制系統(tǒng)</p><p><b>  二、設(shè)計(jì)目的</b></p><p>  1. 深入了解PIC16F877單片機(jī)的工作原理,熟練掌握匯編語(yǔ)言程序設(shè)計(jì)方法,熟練使用MPLAB-ICD仿真器及MPLAB-IDE仿真調(diào)試軟件。</p><p

2、>  通過該課程設(shè)計(jì)使學(xué)生初步掌握以單片機(jī)為核心的智能裝置設(shè)計(jì)的簡(jiǎn)單原則、步驟和方法。</p><p>  熟悉智能裝置設(shè)計(jì)中有關(guān)的硬件設(shè)計(jì)調(diào)試,如人機(jī)界面等。</p><p>  熟悉智能裝置設(shè)計(jì)中相關(guān)軟件的設(shè)計(jì)、編程和調(diào)試。</p><p><b>  三、設(shè)計(jì)內(nèi)容</b></p><p>  以16F877單

3、片機(jī)為核心,結(jié)合給出的其他原器件和智能裝置實(shí)驗(yàn)系統(tǒng)原有的內(nèi)容設(shè)計(jì)空調(diào)遙控系統(tǒng)硬件電路。</p><p>  利用實(shí)驗(yàn)系統(tǒng)提供的電機(jī)模擬空調(diào)的壓縮機(jī),按鍵及LED顯示模擬遙控器,可調(diào)電阻模擬溫度傳感器(可調(diào)電阻輸出電壓1-3V代表10-30℃)。</p><p>  編制軟件實(shí)現(xiàn)設(shè)置溫度、起??照{(diào)、溫度控制、風(fēng)速控制等功能。</p><p>  利用MAX515實(shí)現(xiàn)低

4、、中、高3檔風(fēng)速調(diào)整。</p><p>  實(shí)現(xiàn)空調(diào)溫度自動(dòng)控制,溫度高于設(shè)定溫度2度啟動(dòng)低風(fēng),高于4度啟動(dòng)中風(fēng),4度以上啟動(dòng)高風(fēng)。(選做)</p><p><b>  四、設(shè)計(jì)要求</b></p><p>  根據(jù)實(shí)驗(yàn)指導(dǎo)書的設(shè)計(jì)內(nèi)容及所給出的元件,設(shè)計(jì)空調(diào)系統(tǒng)硬件原理圖。</p><p>  按照設(shè)計(jì)好的硬件原理圖在

5、實(shí)驗(yàn)板上用導(dǎo)線搭建硬件電路。</p><p>  用萬用表檢查硬件電路連接是否正確,檢查無誤后上電并編制簡(jiǎn)單的測(cè)試程 序分步調(diào)試各部分功能。</p><p>  在各部分功能實(shí)現(xiàn)后,編制完整的空調(diào)系統(tǒng)軟件,并進(jìn)行軟硬件聯(lián)調(diào),直到達(dá)到設(shè)計(jì)要求。</p><p>  按照設(shè)計(jì)內(nèi)容要求測(cè)試儀表誤差并做分析,給出儀表精度,完成后由教師進(jìn)行驗(yàn)收檢查。</p>&

6、lt;p><b>  五、實(shí)驗(yàn)設(shè)備</b></p><p>  1. MPLAB-ICD模塊與仿真頭</p><p>  2. 智能裝置實(shí)驗(yàn)系統(tǒng)</p><p>  3. 安裝了MPLAB-IDE開發(fā)軟件的計(jì)算機(jī)</p><p><b>  4. 數(shù)字萬用表</b></p>

7、<p><b>  5. 導(dǎo)線若干</b></p><p><b>  六、實(shí)驗(yàn)項(xiàng)目</b></p><p>  1. 設(shè)計(jì)空調(diào)系統(tǒng)硬件電路</p><p> ?、?采用16F877單片機(jī),利用實(shí)驗(yàn)板上提供的電機(jī)、MAX515構(gòu)成空調(diào)系統(tǒng),利用按鍵及LED構(gòu)成控制器,可調(diào)電阻模擬溫度(可調(diào)電阻輸出電壓1-3

8、V代表10-30℃)。</p><p> ?。?)將設(shè)置的溫度值、空調(diào)工作狀態(tài)通過LED顯示</p><p> ?。?)利用MAX515輸出調(diào)整電壓,控制轉(zhuǎn)速。</p><p><b>  硬件電路連接與檢查</b></p><p> ?、艑⒃O(shè)計(jì)好的電路由指導(dǎo)老師檢查完畢后,在實(shí)驗(yàn)系統(tǒng)上用導(dǎo)線將實(shí)際的電路連接出來。<

9、;/p><p> ?、平泳€完成后對(duì)照原理圖用萬用表逐根連線檢查電路連接是否正確,特別是電源VCC和VDD有無短路。</p><p> ?、菣z查無誤后連接仿真頭后通電。</p><p>  編制軟件對(duì)硬件電路分步調(diào)試</p><p>  對(duì)數(shù)碼管顯示電路進(jìn)行調(diào)試,編制簡(jiǎn)單程序?qū)崿F(xiàn)將數(shù)據(jù)在數(shù)碼管上顯示</p><p>  #i

10、nclude <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  #define DECODE_MODE 0x09 //譯碼控制寄存器</p><p>  #define INTENSITY 0x0A //亮度控制寄存器</p><

11、;p>  #define SCAN_LIMIT 0x0B //掃描界限寄存器</p><p>  #define SHUT_DOWN 0x0C //關(guān)斷模式寄存器</p><p>  #define DISPLAY_TEST 0x0F //測(cè)試控制寄存器</p><p>  #define DIG0 0x02 //DIG0</p>

12、<p>  void max7219_write(unsigned char address,unsigned char dat);</p><p>  void max7219_init(void);</p><p>  void delay1();</p><p>  void delay();</p><p>  void

13、init();</p><p>  int get_ad();</p><p>  unsigned char a=0;</p><p>  void max7219_write(unsigned char address,unsigned char dat)</p><p><b>  { </b></p>

14、<p>  unsigned char i;</p><p>  MAX7219_LOAD=0; //拉低片選線,選中器件</p><p><b>  //發(fā)送地址</b></p><p>  for (i=0;i<8;i++) //移位循環(huán)8次,最高頻率為10MHz</p><p

15、><b>  { </b></p><p>  MAX7219_CLK=0; //清零時(shí)鐘總線</p><p>  if(address&(1<<7-i))</p><p>  MAX7219_DIN=1;//每次取高字節(jié)</p><p><b>  else&

16、lt;/b></p><p>  MAX7219_DIN=0;</p><p>  MAX7219_CLK=1;//時(shí)鐘上升沿,發(fā)送地址</p><p><b>  }</b></p><p><b>  //發(fā)送數(shù)據(jù)</b></p><p>  for

17、 (i=0;i<8;i++)</p><p><b>  {</b></p><p>  MAX7219_CLK=0;</p><p>  if(dat&(1<<7-i))</p><p>  MAX7219_DIN=1;//(bit)(data&0x80); //每次取高字節(jié)&

18、lt;/p><p><b>  else</b></p><p>  MAX7219_DIN=0;</p><p>  MAX7219_CLK=1;//時(shí)鐘上升沿,發(fā)送數(shù)據(jù)</p><p><b>  }</b></p><p>  MAX7219_LOAD=1;

19、//發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)</p><p><b>  }</b></p><p>  void max7219_init(void)</p><p><b>  {</b></p><p>  TRISD=0x00;</p><p>  PORTD=0x00;&

20、lt;/p><p>  MAX7219_LOAD=1;</p><p>  max7219_write(SHUT_DOWN,0x01); //開啟正常工作模式(0xX1)</p><p>  max7219_write(DISPLAY_TEST,0x00); //選擇工作模式(0xX0)</p><p>  max7219_write(DE

21、CODE_MODE,0xFF); //選用全譯碼模式</p><p>  max7219_write(SCAN_LIMIT,0x03); //只用前4只LED ;這里沒問題</p><p>  max7219_write(INTENSITY,0x04); //設(shè)置初始亮度</p><p><b>  }</b></p>

22、;<p>  void main(void)</p><p><b>  {</b></p><p>  unsigned char i; </p><p>  max7219_init();//MAX7219初始化</p><p><b>  init();</b><

23、/p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  a=get_ad();</p><p>  max7219_write(0x02,a);//數(shù)碼管顯示</p><p>  max7219_write(0x04,a)

24、;//數(shù)碼管顯示</p><p><b>  delay1();</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void delay1()</p><p><b>  {<

25、/b></p><p>  for(int i=20000;i>0;i--);</p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p><p>  TRISA=0x01;//A口RA0輸入

26、</p><p>  TRISC=0x00;</p><p>  PORTA=0x00;</p><p>  PORTC=0x00;</p><p>  ADCON0=0x41;//0100 0001 8倍fosc 0通道 開ad</p><p>  ADCON1=0x0e;//0000 1110 adfm=0 直

27、接讀低8位 1110 選擇RA0</p><p><b>  delay();</b></p><p><b>  }</b></p><p>  int get_ad()</p><p><b>  {</b></p><p>  int adval;

28、</p><p><b>  ADGO=1;</b></p><p>  while(ADGO)</p><p><b>  {;}</b></p><p>  adval=ADRESH;</p><p>  return adval;</p><p>

29、;<b>  }</b></p><p>  void delay()</p><p><b>  {</b></p><p>  for(int i=500;i>0;i--);</p><p><b>  }</b></p><p>  編制

30、MAX515程序,驅(qū)動(dòng)電機(jī)旋轉(zhuǎn)。</p><p>  #include <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  void max515_write(unsigned char data)</p><p><b>

31、  { </b></p><p>  unsigned char i;</p><p>  MAX515_CS=0; //拉低片選線,選中器件</p><p><b>  //發(fā)送地址</b></p><p>  for (i=0;i<8;i++) //移位循環(huán)8次,最高頻率為10

32、MHz</p><p><b>  { </b></p><p>  MAX515_SCLK=0; //清零時(shí)鐘總線</p><p>  if(data&(1<<11-i))</p><p>  MAX515_DIN=1;//每次取高字節(jié)</p><p>&

33、lt;b>  else</b></p><p>  MAX515_DIN=0;</p><p>  MAX515_SCLK=1;//時(shí)鐘上升沿,發(fā)送地址</p><p><b>  }</b></p><p>  MAX515_CS=1;//發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)</p&g

34、t;<p><b>  }</b></p><p>  void max515_init(void)</p><p><b>  {</b></p><p>  TRISD=0x00;</p><p>  PORTD=0x00;</p><p>  MAX515

35、_CS=1;</p><p>  MAX515_SCLK=0;</p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {</b></p><p>  max515_init();

36、 //MAX515初始化</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  max515_write(0x00AF);//0x00FF--4.69V,0x00CF--2.53V,0x00AF--1.27V,0x00--0V</p>

37、<p><b>  } </b></p><p><b>  }</b></p><p>  編制按鍵程序,控制顯示和電機(jī)的起停。</p><p>  #include <pic.h></p><p>  #include "temperature_header_f

38、ile.h"</p><p>  int ONOFF=0;//0--off,1--on</p><p>  int MANAUTO=0;//0--manual,1--auto</p><p>  int SPEEDCTRL=0;</p><p>  int TEMPCTRL=20;</p><p>

39、;  void key_init();</p><p>  void key_onoff();</p><p>  void key_ctrl();</p><p>  void key_manauto();</p><p>  void delay();</p><p>  void main(void)</p

40、><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {;}</b></p><p><b>  }</b></p><p>  void key_onoff()</p

41、><p><b>  {</b></p><p>  if(RC3==1 && ONOFF==0)//按下開</p><p><b>  {</b></p><p><b>  delay();</b></p><p>  if(RC3=

42、=1)</p><p>  {ONOFF=1;} </p><p><b>  }</b></p><p>  if(RC3==1 && ONOFF==1)//再按下關(guān)</p><p><b>  {</b></p><p><b>  del

43、ay();</b></p><p>  if(RC3==1)</p><p>  {ONOFF=0;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  void key_manauto()</p>

44、<p><b>  {</b></p><p>  if(ONOFF==1)</p><p><b>  {</b></p><p>  if(RC2==0 && MANAUTO==0)//手動(dòng)切自動(dòng)</p><p><b>  {</b><

45、;/p><p><b>  delay();</b></p><p>  if(RC2==0)</p><p>  {MANAUTO==1;}</p><p><b>  }</b></p><p>  if(RC2==0 && MANAUTO==1)//自動(dòng)

46、切手動(dòng)</p><p><b>  {</b></p><p><b>  delay();</b></p><p>  if(RC2==0)</p><p>  {MANAUTO==0;}</p><p><b>  }</b></p>

47、<p><b>  }</b></p><p><b>  }</b></p><p>  void key_ctrl()</p><p><b>  {</b></p><p>  if(ONOFF==1 && MANAUTO==0)//開

48、且為手動(dòng),上下鍵調(diào)整風(fēng)速</p><p><b>  {</b></p><p>  if(RC0==0 && SPEEDCTRL>=0)</p><p><b>  {</b></p><p><b>  delay();</b></p>

49、<p>  if(RC0==0)</p><p><b>  {</b></p><p>  SPEEDCTRL=SPEEDCTRL-1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  i

50、f(RC1==0 && SPEEDCTRL<=3)</p><p><b>  {</b></p><p><b>  delay();</b></p><p>  if(RC1==0)</p><p><b>  {</b></p><

51、;p>  SPEEDCTRL=SPEEDCTRL+1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(ONOFF==1 && MANAUTO==1)/

52、/開且為自動(dòng),上下鍵調(diào)整溫度</p><p><b>  {</b></p><p>  if(RC0==0 && SPEEDCTRL>=10)</p><p><b>  {</b></p><p><b>  delay();</b></p&g

53、t;<p>  if(RC0==0)</p><p><b>  {</b></p><p>  TEMPCTRL=TEMPCTRL-1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  

54、if(RC1==0 && SPEEDCTRL<=30)</p><p><b>  {</b></p><p><b>  delay();</b></p><p>  if(RC1==0)</p><p><b>  {</b></p>&

55、lt;p>  TEMPCTRL=TEMPCTRL+1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&

56、lt;p>  void key_init()</p><p><b>  {</b></p><p>  TRISC=0x00;</p><p>  PORTC=0xFF;</p><p>  TRISC=0xFF;</p><p><b>  }</b></p&

57、gt;<p>  void delay()</p><p><b>  {</b></p><p>  for(int i=2000;i>0;i--);</p><p><b>  }</b></p><p> ?、?每部分編制結(jié)束并調(diào)試通過后,與前面的程序依次連接成大程序并調(diào)

58、試出結(jié)果,最終完成整個(gè)程序的編制與調(diào)試。</p><p>  該部分程序?qū)⒃诘诰挪糠殖绦蚯鍐沃谐尸F(xiàn)。</p><p>  儀表軟硬件聯(lián)調(diào)實(shí)現(xiàn)要求的功能</p><p>  ⑴ 將各部分程序進(jìn)行組合,逐項(xiàng)實(shí)現(xiàn)設(shè)計(jì)要求的功能。</p><p>  我們編寫程序的順序與上述步驟不完全相同。首先,我們實(shí)現(xiàn)了四個(gè)按鍵的所有邏輯功能,并在按鍵子程序中提供

59、了其他模塊接入的接口。再按照先調(diào)試輸入部分、后調(diào)試輸出部分的順序進(jìn)行程序的編寫,第二步實(shí)現(xiàn)了電壓信號(hào)的A/D轉(zhuǎn)換并將數(shù)字信號(hào)輸入PIC單片機(jī),接下來實(shí)現(xiàn)了按鍵通過MAX515芯片及驅(qū)動(dòng)電路對(duì)電機(jī)的轉(zhuǎn)速有級(jí)調(diào)節(jié),最后實(shí)現(xiàn)了將溫度LED數(shù)碼管顯示的功能。</p><p>  ⑵ 功能完成后用萬用表對(duì)可調(diào)電阻輸出和溫度顯示對(duì)應(yīng)取若干個(gè)點(diǎn)記錄實(shí)驗(yàn)結(jié)果。</p><p>  利用MATLAB對(duì)以上數(shù)

60、據(jù)進(jìn)行分析,可以看出電壓與溫度采集的A/D信號(hào)呈線性關(guān)系。</p><p><b>  ⑶ 編制使用說明</b></p><p>  我組設(shè)計(jì)的溫度自動(dòng)控制空調(diào)裝置由以下幾部分組成:溫度傳感器(用電壓信號(hào)模擬)、溫度顯示、空調(diào)壓縮機(jī)(用電機(jī)模擬)、遙控器(用按鍵模擬)等幾部分組成。下面簡(jiǎn)要介紹遙控器(按鍵)部分的使用方法,并簡(jiǎn)要說明數(shù)碼管顯示功能。</p>

61、<p>  按鍵共有四個(gè),分別為開關(guān)鍵、自動(dòng)/手動(dòng)切換鍵、加溫度鍵(自動(dòng)模式)/加風(fēng)速鍵(手動(dòng)模式)、減溫度鍵(自動(dòng)模式)/減網(wǎng)速鍵(手動(dòng)模式)。初始狀態(tài)空調(diào)為關(guān),電機(jī)停轉(zhuǎn)。按下開關(guān)鍵一次,空調(diào)處于ON狀態(tài),再按開關(guān)鍵一次,空調(diào)處于OFF狀態(tài)。在空調(diào)處于ON狀態(tài)時(shí),默認(rèn)空調(diào)處于手動(dòng)模式,且風(fēng)速為最小。風(fēng)速分為0、1、2、3四個(gè)控制檔,0為停止,3為最大。當(dāng)空調(diào)處于手動(dòng)模式時(shí),每按下一次加風(fēng)速鍵,風(fēng)速增大一檔,達(dá)到3以后再按

62、下該鍵,風(fēng)速不再增大;每按下一次減風(fēng)速鍵,風(fēng)速減小一檔,達(dá)到0以后再按下該鍵,風(fēng)速不再減小。若在手動(dòng)模式時(shí)按下自動(dòng)/手動(dòng)切換鍵,則空調(diào)進(jìn)入自動(dòng)溫控工作模式,系統(tǒng)初始設(shè)定溫度為20度。每按下一次加溫度鍵,設(shè)定溫度增加一度,達(dá)到30度后不再增加;每按下一次減速溫度鍵,設(shè)定溫度減小一度,達(dá)到10度后不再減小。自動(dòng)溫控的方式為:當(dāng)環(huán)境溫度低于設(shè)定溫度時(shí),風(fēng)速置為0檔;當(dāng)環(huán)境溫度高于設(shè)定溫度2度以內(nèi)時(shí),風(fēng)速置為1檔;當(dāng)環(huán)境溫度高于設(shè)定溫度2度至4

63、度時(shí),風(fēng)速置為2檔;當(dāng)環(huán)境溫度高于設(shè)定溫度4度以上時(shí),風(fēng)速置為3檔。當(dāng)空調(diào)處于ON狀態(tài)時(shí),不論處于哪種工作狀態(tài),一旦按下開關(guān)鍵,系統(tǒng)停止運(yùn)行,并且</p><p>  數(shù)碼管顯示部分:左邊的兩個(gè)數(shù)碼管不論空調(diào)處于開/關(guān)狀態(tài),始終顯示環(huán)境溫度(10度~30度),起到溫度計(jì)的作用。右邊的兩個(gè)數(shù)碼管當(dāng)處于手動(dòng)模式時(shí),左側(cè)的數(shù)碼管將顯示風(fēng)速檔位,右側(cè)的始終顯示0;當(dāng)處于自動(dòng)模式時(shí),顯示設(shè)定溫度。</p>&

64、lt;p><b> ?、?誤差分析</b></p><p>  本套智能空調(diào)設(shè)置我們采用0~5V電壓信號(hào)作為模擬輸入信號(hào),經(jīng)PIC單片機(jī)的片內(nèi)集成A/D轉(zhuǎn)換后變?yōu)?位的數(shù)字信號(hào),相當(dāng)于0V對(duì)應(yīng)數(shù)字量0x00,5V對(duì)應(yīng)數(shù)字量0xFF。我們將數(shù)字量信號(hào)除以5,使得數(shù)字量變?yōu)?~50(51只對(duì)應(yīng)0xFF一個(gè)數(shù)字量,故忽略),正好對(duì)應(yīng)0℃至50℃溫度,即0V對(duì)應(yīng)0℃,5V對(duì)應(yīng)5℃,A/D轉(zhuǎn)換是

65、線性變換,故取一部分轉(zhuǎn)換結(jié)果,其對(duì)應(yīng)關(guān)系也為線性,即1V對(duì)應(yīng)10℃,3V對(duì)應(yīng)30℃,即符合設(shè)計(jì)要求。</p><p>  誤差分析:由于對(duì)數(shù)字信號(hào)除5取整,故顯示的溫度值為向下取整,損失了部分精度。最大測(cè)量誤差為:</p><p>  調(diào)試的步驟及調(diào)試過程中出現(xiàn)的問題和解決的方法</p><p>  調(diào)試步驟已經(jīng)在上一部分進(jìn)行過介紹,故不贅述。下面說明在調(diào)試過程中出

66、現(xiàn)的問題和解決的方法。這一次課程設(shè)計(jì)遇到的最大問題就是MAX7219的寫入問題。7219的寫入順序?yàn)椋合壤虲S片選信號(hào),在每個(gè)時(shí)鐘信號(hào)上升沿發(fā)送一位數(shù)據(jù),并將數(shù)據(jù)移位,循環(huán)16次。為使程序清晰易讀,對(duì)輸出端口采用宏定義方式,然而在調(diào)試中我們發(fā)現(xiàn)PICC編譯器無法識(shí)別該宏定義,導(dǎo)致MAX7219的控制時(shí)序邏輯錯(cuò)誤,浪費(fèi)了我們很多的時(shí)間。將宏定義去掉,改用實(shí)際端口表示后,該問題解決。</p><p>  八、軟件設(shè)

67、計(jì)流程圖及帶注釋的全部程序的清單</p><p>  ///////////////temperature_header_file.h///////////////</p><p>  #include <pic.h></p><p>  //Define MAX7219</p><p>  #define MAX7219_DIN

68、 RD2</p><p>  #define MAX7219_LOAD RD0</p><p>  #define MAX7219_CLK RD1</p><p>  //Define MAX515</p><p>  #define MAX515_DIN RD5</p><p>  #define MAX515_SC

69、LK RD4</p><p>  #define MAX515_CS RD3</p><p>  //Define Analog Input</p><p>  #define AINPUT RA0</p><p>  ///////////////ad.c///////////////</p><p>  #incl

70、ude <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  char get_ad()</p><p><b>  {</b></p><p>  char adval;</p><p>

71、<b>  ADGO=1;</b></p><p>  while(ADGO)</p><p><b>  {;}</b></p><p>  adval=ADRESH;</p><p>  return adval;</p><p><b>  }</b&

72、gt;</p><p>  ///////////////delay.c///////////////</p><p>  void delay_short(int x)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>

73、;  for(;x>0;x--)</p><p><b>  {</b></p><p>  for(i=100;i>0;i--)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b

74、>  }</b></p><p>  void delay_long(int x)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(;x>0;x--)</p><p><b&g

75、t;  {</b></p><p>  for(i=1000;i>0;i--)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /////

76、//////////init.c///////////////</p><p>  #include <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  void init()</p><p><b>  {</b&g

77、t;</p><p>  //AD輸入、按鍵輸入、LED顯示輸出 初始化</p><p>  TRISA=0x01;//RA0作為模擬量輸入接口</p><p>  PORTA=0x00;</p><p>  TRISC=0x0F;//RC0~RC3為四個(gè)按鍵輸入,RC4~RC7為四個(gè)LED燈顯示</p><p&g

78、t;  PORTC=0x00;</p><p>  ADCON0=0x41;//0100 0001 8倍fosc 0通道 開ad</p><p>  ADCON1=0x0e;//0000 1110 adfm=0 直接讀低8位 1110 選擇RA0</p><p>  //MAX515,MAX7219接口初始化</p><p>  TRIS

79、D=0x00;//RD0~RD2為MAX7219接口,RD3~RD5為MAX515接口</p><p>  PORTD=0x1B;//0b xx 011 011//要檢查!!!</p><p><b>  }</b></p><p>  ///////////////key.c///////////////</p>

80、<p>  #include <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  extern char ONOFF;//0--off,1--on</p><p>  extern char MANAUTO;//0--manual,1--

81、auto</p><p>  extern char SPEEDCTRL;//風(fēng)速控制,初始值為0檔(停轉(zhuǎn))</p><p>  extern char TEMPCTRL;//設(shè)定溫度值,初始值為20度</p><p>  extern char BTEMP;</p><p>  void delay_short(int x);<

82、;/p><p>  void delay_long(int x);</p><p>  /*void main(void)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {;}</b>

83、;</p><p><b>  }*/</b></p><p>  void key_onoff()</p><p><b>  {</b></p><p>  if(RC3==0 && ONOFF==0)//按下開</p><p><b>  

84、{</b></p><p>  delay_short(2);</p><p>  if(RC3==0 && ONOFF==0)</p><p><b>  {</b></p><p><b>  ONOFF=1;</b></p><p>  de

85、lay_long(20);//會(huì)不會(huì)延時(shí)太長(zhǎng)?</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(RC3==0 && ONOFF==1)//再按下關(guān)</p><p><b>  {</b><

86、/p><p>  delay_short(2);</p><p>  if(RC3==0 && ONOFF==1)</p><p><b>  {</b></p><p><b>  ONOFF=0;</b></p><p>  delay_long(20);&l

87、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void key_manauto()</p><p><b>  {</b></p&

88、gt;<p>  if(ONOFF==1)</p><p><b>  {</b></p><p>  if(RC2==0 && MANAUTO==0)//手動(dòng)切自動(dòng)</p><p><b>  {</b></p><p>  delay_short(2);<

89、/p><p>  if(RC2==0 && MANAUTO==0)</p><p><b>  {</b></p><p>  MANAUTO=1;</p><p>  delay_long(20);</p><p><b>  }</b></p>

90、<p><b>  }</b></p><p>  if(RC2==0 && MANAUTO==1)//自動(dòng)切手動(dòng)</p><p><b>  {</b></p><p>  delay_short(2);</p><p>  if(RC2==0 &&

91、 MANAUTO==1)</p><p><b>  {</b></p><p>  MANAUTO=0;</p><p>  delay_long(20);</p><p><b>  }</b></p><p><b>  }</b></

92、p><p><b>  }</b></p><p><b>  }</b></p><p>  void key_ctrl()</p><p><b>  {</b></p><p>  if(ONOFF==1 && MANAUTO==0

93、)//開且為手動(dòng),上下鍵調(diào)整風(fēng)速</p><p><b>  {</b></p><p>  if(RC0==0 && SPEEDCTRL>0)//原來為大于等于0,貌似不對(duì),因?yàn)榈扔?時(shí)不能再減1了</p><p><b>  {</b></p><p>  dela

94、y_short(2);</p><p>  if(RC0==0 && SPEEDCTRL>0)</p><p><b>  {</b></p><p>  SPEEDCTRL=SPEEDCTRL-1;</p><p>  delay_long(20);</p><p><

95、;b>  }</b></p><p><b>  }</b></p><p>  if(RC1==0 && SPEEDCTRL<3)//原來為小于等于3,貌似不對(duì),因?yàn)榈扔?時(shí)不能再加1了</p><p><b>  {</b></p><p>  de

96、lay_short(2);</p><p>  if(RC1==0 && SPEEDCTRL<3)</p><p><b>  {</b></p><p>  SPEEDCTRL=SPEEDCTRL+1;</p><p>  delay_long(20);</p><p>&

97、lt;b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(ONOFF==1 && MANAUTO==1)//開且為自動(dòng),上下鍵調(diào)整溫度</p><p><b>  {<

98、;/b></p><p>  if(RC0==0 && TEMPCTRL>10)//判斷條件改動(dòng)同上</p><p><b>  {</b></p><p>  delay_short(2);</p><p>  if(RC0==0 && TEMPCTRL>10)&l

99、t;/p><p><b>  {</b></p><p>  TEMPCTRL=TEMPCTRL-1;</p><p>  delay_long(20);</p><p><b>  }</b></p><p><b>  }</b></p>

100、<p>  if(RC1==0 && TEMPCTRL<30)//判斷條件改動(dòng)同上</p><p><b>  {</b></p><p>  delay_short(2);</p><p>  if(RC1==0 && TEMPCTRL<30)</p><p>

101、;<b>  {</b></p><p>  TEMPCTRL=TEMPCTRL+1;</p><p>  delay_long(20);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>

102、;  }</b></p><p><b>  }</b></p><p>  ///////////////max515.c///////////////</p><p>  #include <pic.h></p><p>  #include "temperature_head

103、er_file.h"</p><p>  void max515_write(unsigned char data)</p><p><b>  { </b></p><p>  unsigned char i;</p><p>  MAX515_CS=0; //拉低片選線,選中器件</p&g

104、t;<p><b>  //發(fā)送地址</b></p><p>  for (i=0;i<8;i++) //移位循環(huán)8次,最高頻率為10MHz</p><p><b>  { </b></p><p>  MAX515_SCLK=0; //清零時(shí)鐘總線</p><p

105、>  if(data&(1<<11-i))</p><p>  MAX515_DIN=1;//每次取高字節(jié)</p><p><b>  else</b></p><p>  MAX515_DIN=0;</p><p>  MAX515_SCLK=1;//時(shí)鐘上升沿,發(fā)送地址&

106、lt;/p><p><b>  }</b></p><p>  MAX515_CS=1;//發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)</p><p><b>  }</b></p><p>  ///////////////max7219.c///////////////</p><p&

107、gt;  #include <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  #define DECODE_MODE 0x09 //譯碼控制寄存器</p><p>  #define INTENSITY 0x0A //亮度控制寄存器</p&g

108、t;<p>  #define SCAN_LIMIT 0x0B //掃描界限寄存器</p><p>  #define SHUT_DOWN 0x0C //關(guān)斷模式寄存器</p><p>  #define DISPLAY_TEST 0x0F //測(cè)試控制寄存器</p><p>  void max7219_write(unsigned cha

109、r address,unsigned char dat)</p><p><b>  { </b></p><p>  unsigned char i;</p><p>  RD0=0; //拉低片選線,選中器件</p><p><b>  //發(fā)送地址</b></p>&

110、lt;p>  for (i=0;i<8;i++) //移位循環(huán)8次,最高頻率為10MHz</p><p><b>  { </b></p><p>  RD1=0; //清零時(shí)鐘總線</p><p>  if(address&(1<<7-i))</p><p>  

111、RD2=1;//(bit)(data&0x80); //每次取高字節(jié) ??????</p><p><b>  else</b></p><p><b>  RD2=0;</b></p><p>  RD1=1;//時(shí)鐘上升沿,發(fā)送地址</p><p><b

112、>  }</b></p><p><b>  //發(fā)送數(shù)據(jù)</b></p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  RD1=0;</b></p><p>

113、  if(dat&(1<<7-i))</p><p>  RD2=1;//(bit)(data&0x80); //每次取高字節(jié) ??????</p><p><b>  else</b></p><p><b>  RD2=0;</b></p><p>  R

114、D1=1;//時(shí)鐘上升沿,發(fā)送數(shù)據(jù)</p><p><b>  }</b></p><p>  RD0=1;//發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)</p><p><b>  }</b></p><p>  //MAX7219初始化</p><p>  vo

115、id max7219_init()</p><p><b>  {</b></p><p>  max7219_write(SHUT_DOWN,0x01); //開啟正常工作模式(0xX1)</p><p>  max7219_write(DISPLAY_TEST,0x00); //選擇工作模式(0xX0)</p><

116、p>  max7219_write(DECODE_MODE,0xFF); //選用全譯碼模式</p><p>  max7219_write(SCAN_LIMIT,0x03); //只用前4只LED ;這里沒問題</p><p>  max7219_write(INTENSITY,0x04); //設(shè)置初始亮度</p><p>  max721

117、9_write(0x04,0xF8);</p><p>  max7219_write(0x03,0xF8);</p><p>  max7219_write(0x02,0xF8);</p><p>  max7219_write(0x01,0xF8);</p><p><b>  }</b></p>

118、<p>  ///////////////////main.c//////////////////</p><p>  #include <pic.h></p><p>  #include "temperature_header_file.h"</p><p>  void init();</p><

119、;p>  void max7219_init();</p><p>  void delay_long(int x);</p><p>  void delay_short();</p><p>  void key_onoff();</p><p>  void key_manauto();</p><p> 

120、 void key_ctrl();</p><p>  void max515_write(unsigned char data);</p><p>  void max7219_write(unsigned char address,unsigned char dat);</p><p>  char get_ad();</p><p> 

121、 //這里的靜態(tài)變量定義有些問題!待解決!</p><p>  char ONOFF=0;//0--off,1--on</p><p>  char MANAUTO=0;//0--manual,1--auto</p><p>  char SPEEDCTRL=0;//風(fēng)速控制,初始值為0檔(停轉(zhuǎn))</p><p>  char

122、TEMPCTRL=20;//設(shè)定溫度值,初始值為20度(實(shí)際溫度)</p><p>  char TEMPOBSV=20;//實(shí)際檢測(cè)溫度,在ad.c中引用</p><p>  char oa=0;//存放環(huán)境溫度十位</p><p>  char ob=0;//存放環(huán)境溫度個(gè)位</p><p>  char ca=0

123、;//存放設(shè)定溫度十位</p><p>  char cb=0;//存放設(shè)定溫度個(gè)位</p><p>  void main()</p><p><b>  {</b></p><p><b>  init();</b></p><p>  max7219_i

124、nit();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  key_onoff();</p><p>  key_manauto();</p><p>  key_ctrl();</p><

125、;p>  ////////////溫度檢測(cè)及顯示轉(zhuǎn)換</p><p>  TEMPOBSV=get_ad();</p><p>  TEMPOBSV=TEMPOBSV/5;//測(cè)量環(huán)境溫度</p><p>  if(TEMPOBSV > 0x1D)</p><p>  {TEMPOBSV=30;}</p>&

126、lt;p>  if(TEMPOBSV < 0x0A)//使環(huán)境溫度測(cè)量范圍為10度至30度</p><p>  {TEMPOBSV=10;}</p><p>  oa=TEMPOBSV/10;//取環(huán)境溫度十位</p><p>  ob=TEMPOBSV%10;//取環(huán)境溫度個(gè)位</p><p>  ca=TE

127、MPCTRL/10;//取設(shè)定溫度十位</p><p>  cb=TEMPCTRL%10;//取設(shè)定溫度個(gè)位</p><p>  ////////////手動(dòng)模式控制風(fēng)速</p><p>  if(ONOFF==0)</p><p><b>  {</b></p><p>  max5

128、15_write(0x0000);</p><p>  max7219_write(0x04,0x0F);</p><p>  max7219_write(0x03,0x0F);</p><p>  max7219_write(0x02,0x0F);</p><p>  max7219_write(0x01,0x0F);</p&g

129、t;<p>  MANAUTO=0;</p><p>  SPEEDCTRL=0;</p><p><b>  }</b></p><p>  if(ONOFF==1 && MANAUTO==0)</p><p><b>  {</b></p><p

130、>  if(SPEEDCTRL==0)</p><p><b>  {</b></p><p>  max515_write(0x0000);</p><p>  max7219_write(0x02,0x00);//寫入DIG1</p><p>  max7219_write(0x01,0x00);//寫入

131、DIG0</p><p><b>  }</b></p><p>  if(SPEEDCTRL==1)</p><p><b>  {</b></p><p>  max515_write(0x00AF);</p><p>  max7219_write(0x

132、02,0x01);//寫入DIG1</p><p>  max7219_write(0x01,0x00);//寫入DIG0</p><p><b>  }</b></p><p>  if(SPEEDCTRL==2)</p><p><b>  {</b></p>&l

133、t;p>  max515_write(0x00CF);</p><p>  max7219_write(0x02,0x02);//寫入DIG1</p><p>  max7219_write(0x01,0x00);//寫入DIG0</p><p><b>  }</b></p><p>  if(SPEED

134、CTRL==3)</p><p><b>  {</b></p><p>  max515_write(0x00FF);</p><p>  max7219_write(0x02,0x03);//寫入DIG1</p><p>  max7219_write(0x01,0x00);//寫入DIG0</p>

135、;<p><b>  }</b></p><p><b>  }</b></p><p>  ///////////自動(dòng)模式控制溫度</p><p>  if(ONOFF==1 && MANAUTO==1)</p><p><b>  {</b>&

136、lt;/p><p>  if(TEMPOBSV-TEMPCTRL <= 0)</p><p>  {max515_write(0x0000);}</p><p>  else if(TEMPOBSV-TEMPCTRL < 2) </p><p>  {max515_write(0x00AF);}</p><

137、p>  else if(TEMPOBSV-TEMPCTRL < 4) </p><p>  {max515_write(0x00CF);}</p><p><b>  else </b></p><p>  {max515_write(0x00FF);}</p><p>  max7219_write

138、(0x02,ca);//寫入DIG1</p><p>  max7219_write(0x01,cb);//寫入DIG0</p><p><b>  }</b></p><p>  max7219_write(0x04,oa);//寫入DIG3</p><p>  max7219_write(0x03,ob);

139、//寫入DIG2</p><p>  ////////////////////////////////</p><p>  if(TEMPOBSV==30)</p><p><b>  {</b></p><p>  RC5=0;RC7=0;</p><p>  RC4=1;RC6=1;&l

140、t;/p><p>  delay_long(10);</p><p>  RC5=1;RC7=1;</p><p>  RC4=0;RC6=0;</p><p>  delay_long(10);</p><p><b>  }</b></p><p>  if(TEMPOBS

141、V<30)</p><p><b>  {</b></p><p>  RC4=0;RC5=0;RC6=0;RC7=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&l

142、t;/b></p><p>  九、課程設(shè)計(jì)中的心得體會(huì)、收獲</p><p>  這次智能裝置課程設(shè)計(jì)使我們學(xué)到了很多,收獲了很多。首先,我們重新復(fù)習(xí)了上學(xué)期智能裝置課程中的所學(xué)知識(shí),并對(duì)其有了更深層次的理解。其次,我們接觸了一些上學(xué)期實(shí)驗(yàn)沒有接觸過的裝置,比如MAX7219和MAX515,雖然難度并不大,但在短短的一周時(shí)間內(nèi)實(shí)現(xiàn)其功能對(duì)我們來說也是一個(gè)挑戰(zhàn)。再次,這次智能裝置課程

143、設(shè)計(jì)需要將多種功能整合起來,這就需要對(duì)PIC單片機(jī)的I/O端口和存儲(chǔ)空間進(jìn)行合理的分配。實(shí)驗(yàn)中,一開始我們將MAX7219的三個(gè)端口接到了RA口,但其功能無法實(shí)現(xiàn),后來才了解RA口是與到AD轉(zhuǎn)換功能復(fù)用的端口,如果使用了AD轉(zhuǎn)換功能,其I/O功能會(huì)受到影響。另外,由于這次課程設(shè)計(jì)我們使用C語(yǔ)言進(jìn)行編程,PICC編譯器的規(guī)則和ANSI-C有一定的區(qū)別,使用過程中我們有時(shí)只能根據(jù)出現(xiàn)的現(xiàn)象來推測(cè)遇到的問題,從而進(jìn)行程序的改進(jìn)。</p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論