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

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計(jì)總結(jié)報告</b></p><p>  課程名稱 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì) </p><p>  設(shè)計(jì)題目 基于STC89C52的溫度測控系統(tǒng)設(shè)計(jì) </p><p>  專 業(yè) 電子與信息工程 </p><p>  班

2、級 </p><p>  姓 名 </p><p>  學(xué) 號 </p><p>  指導(dǎo)教師 </p><p>  報告成績 </p><p><b> 

3、 信息與工程學(xué)院</b></p><p>  二〇一一年六月十二日</p><p>  《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》課程設(shè)計(jì)任務(wù)書</p><p><b>  一、課題名稱</b></p><p>  《溫度測量與報警系統(tǒng)》</p><p><b>  二、設(shè)計(jì)任務(wù)</b&g

4、t;</p><p>  1、利用四位數(shù)碼管顯示當(dāng)前溫度;</p><p>  2、通過鍵盤修改報警溫度上限與下限值;</p><p>  3、具有報警功能,報警溫度上限與下限值能修改,利用蜂鳴器實(shí)現(xiàn)報警;上限溫度值到達(dá)時發(fā)出“嘀-嘀-嘀-嘀”的報警音。</p><p>  三、設(shè)計(jì)報告撰寫規(guī)范</p><p>  單

5、片微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)總結(jié)報告正文,主要含以下內(nèi)容(硬件、軟件各部分內(nèi)容也可組合起來進(jìn)行撰寫說明):</p><p>  1、系統(tǒng)總體設(shè)計(jì)方案(畫出系統(tǒng)原理框圖、方案的論證與比較等內(nèi)容);</p><p>  2、硬件系統(tǒng)分析與設(shè)計(jì)(各模塊或單元電路的設(shè)計(jì)、工作原理闡述、參數(shù)計(jì)算、元器件選擇、完整的系統(tǒng)電路圖、系統(tǒng)所需的元器件清單。等內(nèi)容);</p><p>  3、軟

6、件系統(tǒng)分析與設(shè)計(jì)(各功能模塊的程序設(shè)計(jì)流程圖與說明、軟件系統(tǒng)設(shè)計(jì)、軟件抗干擾措施、完整的程序等內(nèi)容);</p><p>  4、系統(tǒng)仿真調(diào)試與參數(shù)測量(使用儀器儀表、故障排除、電路硬件和軟件調(diào)試的方法和技巧、指標(biāo)測試的參數(shù)和波形、測量誤差分析);</p><p>  5、總結(jié)(本課題核心內(nèi)容及使用價值、電路設(shè)計(jì)、軟件設(shè)計(jì)的特點(diǎn)和選擇方案的優(yōu)缺點(diǎn)、改進(jìn)方向和意見等);</p>

7、<p>  6、按統(tǒng)一格式列出主要參考文獻(xiàn)。</p><p>  《溫度測量與報警系統(tǒng)》</p><p>  一、系統(tǒng)總體設(shè)計(jì)方案</p><p><b>  1.1 方案一</b></p><p>  由于本設(shè)計(jì)是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫</p><

8、;p>  度變化的電壓或電流采集過來,進(jìn)行A/D 轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示</p><p>  電路上,就可以將被測溫度顯示出來,這種設(shè)計(jì)需要用到A/D 轉(zhuǎn)換電路,其中還涉及到電阻</p><p>  與溫度的對應(yīng)值的計(jì)算,感溫電路比較麻煩。而且在對采集的信號進(jìn)行放大時容易受溫度的</p><p>  影響出現(xiàn)較大的偏差。</p>

9、;<p><b>  1.2 方案二</b></p><p>  進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常</p><p>  容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測</p><p>  溫度值,進(jìn)行轉(zhuǎn)換,電路簡單,精度高,軟硬件都以實(shí)現(xiàn),而且使用

10、單片機(jī)的接口便于系統(tǒng)</p><p>  的再擴(kuò)展,滿足設(shè)計(jì)要求。</p><p>  從以上兩種方案,很容易看出,采用方案二,電路比較簡單,費(fèi)用較低,可靠性高,軟件設(shè)計(jì)也比較簡單,故采用了方案二。</p><p>  方案二系統(tǒng)主要包括單片機(jī)模塊、溫度采集模塊、溫度顯示模塊,溫度上下限調(diào)整模塊等四部分。系統(tǒng)總體框架如圖1所示。</p><p&g

11、t;<b>  二、電路設(shè)計(jì)</b></p><p>  2.1 單片機(jī)處理模塊</p><p>  處理模塊是整個設(shè)計(jì)方案的核心,它控制了溫度的采集、處理與顯示、溫度上下限值的設(shè)定。</p><p>  本文采用STC89C52RC作為處理模塊。這是STC公司推出的8051系列微處理器。它的特點(diǎn)是價格低、功耗低、高可靠、無法解密,內(nèi)部Flas

12、h擦寫次數(shù)為100,000次以上。</p><p>  圖2是該芯片的引腳圖。</p><p>  圖3是STC89C52的最小系統(tǒng)。</p><p>  2.2 溫度采集模塊</p><p>  溫度由Dallas 半導(dǎo)體公司的一線數(shù)字化溫度傳感器DS18B20采集。DS18B20測溫范圍為-55℃~+125℃,測溫分辨率可達(dá)0.0625℃

13、,被測溫度用16位二進(jìn)制形式串行輸出。用戶設(shè)定的上下限溫度儲存在EEPROM中,掉電后依然保存。CPU只需一根端口線就能與諸多DS18B20通信。占用微處理器的端口少,可節(jié)省大量的引線和邏輯電路。圖4為DS18B20的引腳圖。</p><p>  圖4 DS18B20圖</p><p>  DS18B20是通過一種片上溫度測量技術(shù)來測量溫度的。圖5示出了溫度測量電路的方框圖。</p&

14、gt;<p>  圖4 DS18B20溫度測量電路的方框圖</p><p>  由圖5可知DS18B20用一個高溫度系數(shù)的振蕩器確立一個門周期,內(nèi)部計(jì)數(shù)器在這個門周期內(nèi)對一個低溫度系數(shù)的振蕩器的脈沖進(jìn)行計(jì)數(shù)來得到溫度值。計(jì)數(shù)器被預(yù)置到對應(yīng)與-55℃的一個值。如果計(jì)數(shù)器在門周期結(jié)束前到達(dá)0,則溫度寄存器(同樣被預(yù)置到-55℃)的值增加,表明所測的溫度大于-55℃。同時計(jì)數(shù)器被復(fù)位到一個值,這個值由斜

15、坡式累加器電路確定,斜坡式累加器電路用來補(bǔ)償感溫振蕩器的拋物線特性。然后計(jì)數(shù)器又開始計(jì)數(shù)直到0,如果門周期仍未結(jié)束,將重復(fù)這一過程。</p><p>  斜坡式累加器用來補(bǔ)償感溫振蕩器的非線性,以及在測溫時獲得比較高的分辨力。這是通過改變計(jì)數(shù)器對溫度每增加一度所需計(jì)數(shù)的值來實(shí)現(xiàn)的。因此,要想獲得所需的分辨力,必須同時知道給定溫度下計(jì)數(shù)器的值和每一度的計(jì)數(shù)值。</p><p>  DS18B

16、20內(nèi)部對此計(jì)算的結(jié)果可提供0.0625℃的分辨力。溫度以16bit帶符號位擴(kuò)展的二進(jìn)制補(bǔ)碼形式讀出。表1給出了溫度值和輸出數(shù)據(jù)的關(guān)系。</p><p>  表1:溫度值和輸出數(shù)據(jù)的關(guān)系</p><p>  二進(jìn)制的低四位是小數(shù)數(shù)據(jù),高五位是符號位。正溫度時,讀到的16位數(shù)據(jù)乘以0.0625就可以得到實(shí)際溫度。若是負(fù)溫度則要把讀到的數(shù)據(jù)按位取反再加1,之后按正溫度轉(zhuǎn)換,前面加符號就行了。另

17、一種轉(zhuǎn)換方法就是分離出低四位,中間七位和高五位。低四位乘以0.0625就可以得到小數(shù)部分的值,中間八位直接就是整數(shù)部分的值。高四位就是判斷符號的。</p><p>  DS18B20內(nèi)部有一個9字節(jié)的高速存儲器用于存儲溫度值。其中前兩個字節(jié)是測得的溫度數(shù)據(jù),第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位,第三和第四字節(jié)是溫度上限TH與溫度下限TL的易失性拷貝,第五字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,第6,7,

18、8這三個字節(jié)用于內(nèi)部計(jì)算,第九個字節(jié)是冗余檢驗(yàn)字節(jié)CRC,可用來保證通信的正取性。當(dāng)溫度轉(zhuǎn)換命令發(fā)出后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在此存儲器的第1和第2個字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。</p><p>  通過單線總線端口訪問DS18B20的協(xié)議如下:初始化、ROM操作命令、存儲器操作命令、執(zhí)行/數(shù)據(jù)。</p><p><b>  R

19、OM操作命令:</b></p><p>  Read ROM [33H] 這個命令允許總線控制器讀到DS18B20的8位系列編碼、唯一的序列號和8位CRC碼。只有在總線上存在單只DS18B20的時候才能使用這個命令。如果總線上不止一個從機(jī)時,當(dāng)所有從機(jī)試圖同時傳送信號時就會發(fā)生數(shù)據(jù)沖突。</p><p>  Match ROM [55H] 匹配ROM命令,后跟64位ROM序列,

20、讓總線控制器在多點(diǎn)總線上定位一只特定的DS18B20。只有和64為ROM序列完全匹配的DS18B20才能響應(yīng)隨后的儲存操作命令。</p><p>  Skip ROM [CCH] 這條命令允許總線控制器不用提供64位ROM編碼就使用儲存器操作命令,在單點(diǎn)總線情況下用以節(jié)省時間。如果總線上不止一個從機(jī),在Skip ROM命令之后跟著發(fā)一條讀命令,由于多個從機(jī)同時傳送信號,總線上就會發(fā)生數(shù)據(jù)沖突。</p>

21、<p>  Search ROM [F0H] 當(dāng)一個系統(tǒng)初次啟動時,總線控制器可能不知道單線總線上有多少器件或它們的64位ROM編碼。搜索ROM命令允許總線控制器用排除法識別總線上的所有從機(jī)的64位編碼。</p><p>  Alarm Search [ECH] 這條命令的流程圖和Search ROM相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,DS18B20才會響應(yīng)這條命令。</p

22、><p>  表2:DS18B20的命令和時序圖</p><p>  圖6為DS18B20的電路連接圖。</p><p>  圖6 18B20電路圖</p><p>  DS18B20有兩種供電接法,圖6采用的是接入外部電源。這樣做的好處是I/O線上不需要加強(qiáng)上拉,而且總線控制器用在溫度轉(zhuǎn)換期間總保持高電平。這樣在轉(zhuǎn)換期間可以允許在單線總線上進(jìn)行

23、其他數(shù)據(jù)的往來。另外,在單總線上可以掛任意多片DS18B20,而且如果它們都使用外部電源的話,就可以先發(fā)一個Skip ROM命令,再接一個Convert T命令,讓它們同時進(jìn)行溫度轉(zhuǎn)換。注意當(dāng)加上外部電源時,GND引腳不能懸空。</p><p>  2.3 溫度顯示模塊</p><p>  由于此文重在說明DS18B20的功能及使用,所以顯示部分就采用簡單的數(shù)碼管顯示。只顯示兩位整數(shù)和一位

24、小數(shù),負(fù)溫度就不顯示了。圖7為數(shù)碼管的連接圖。</p><p>  圖7 數(shù)碼管顯示電路</p><p>  2.4 溫度上下限調(diào)整模塊</p><p>  圖8為溫度上下限調(diào)整模塊。</p><p>  所選按鍵是輕觸開關(guān)。按一次K1后,會在數(shù)碼管顯示DS18B20內(nèi)儲存的溫度上限。按第K2次后就能調(diào)節(jié)溫度的上限,通過K3和K4來調(diào)節(jié)。按下

25、第3次后恢復(fù)到溫度的顯示。K2是調(diào)節(jié)溫度下限的。操作方法和K1一樣。</p><p><b>  2.5 報警電路</b></p><p>  該模塊只是用蜂鳴器表示。蜂鳴器響就報警。如圖9</p><p><b>  圖9 報警電路圖</b></p><p><b>  總體原理圖<

26、;/b></p><p>  圖10為電路的總體原理圖。</p><p>  三、系統(tǒng)算法與程序流程圖</p><p>  系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,顯示數(shù)據(jù)刷新子程序,按鍵掃描處理子程序等。</p><p>  3.1 主程序流程圖</p><p>  主程序的

27、主要功能是負(fù)責(zé)溫度的實(shí)時顯示、讀出并處理DS18B20 的測量的當(dāng)前溫度值,</p><p>  溫度測量每1s 進(jìn)行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程如下:</p><p><b>  圖11主程序流程圖</b></p><p>  3.2 讀出溫度子程序</p><p>  讀出溫度子程序的主要功能

28、是讀出RAM 中的9 字節(jié),在讀出時需進(jìn)行CRC 校驗(yàn),校驗(yàn)有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如下:</p><p><b>  圖12 </b></p><p><b>  讀出溫度</b></p><p>  子程序3.3 溫度轉(zhuǎn)換命令子程序</p><p>  溫度轉(zhuǎn)換命令子程序主要是

29、發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12 位分辨率時轉(zhuǎn)換時間約為750ms,在本程序設(shè)計(jì)中采用1s 顯示程序延時法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程</p><p><b>  如:</b></p><p>  圖13溫度轉(zhuǎn)換命令子程序</p><p>  3.4 計(jì)算溫度子程序</p><p>  計(jì)算溫度子程序?qū)AM 中

30、讀取值進(jìn)行BCD 碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖。</p><p>  圖14計(jì)算溫度子程序</p><p>  3.5 顯示數(shù)據(jù)刷新子程序</p><p>  顯示數(shù)據(jù)刷新子程序主要是對分離后的溫度顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)標(biāo)志位位為1時將符號顯示位移入第一位。程序流程圖如下:</p><p>  圖15顯示數(shù)據(jù)刷新子程序

31、</p><p>  3.6 按鍵掃描處理子程序</p><p>  按鍵采用掃描查詢方式,設(shè)置標(biāo)志位,當(dāng)標(biāo)志位為1 時,顯示設(shè)置溫度,否則顯示當(dāng)前溫度。</p><p><b>  如下:</b></p><p>  圖16按鍵掃描處理子程序</p><p><b>  四、程序<

32、;/b></p><p><b>  /*功能說明</b></p><p>  按K1設(shè)定溫度上限,然后按K2調(diào)整小數(shù)位增加,按K4小數(shù)位減小</p><p>  按rd1確認(rèn),按rd復(fù)位</p><p>  按rd1設(shè)定溫度下限,然后按K2調(diào)整整數(shù)位增加,按K4整數(shù)位減小</p><p>

33、  按K1確認(rèn),按rd復(fù)位</p><p>  如果實(shí)際溫度超過上下限,則報警</p><p><b>  */</b></p><p>  #include <reg52.h></p><p>  #include <intrins.h></p><p>  #defin

34、e uchar unsigned char</p><p>  #define uint unsigned int </p><p>  sbit k1=P2^0; </p><p>  sbit k2=P2^1; </p><p>  sbit k3=P3^4;</p><p>  sbit k4=

35、P2^3; </p><p>  sbit DQ=P2^2; </p><p>  sbit rd=P2^4; </p><p>  sbit rd1=P2^5; </p><p>  sbit beep=P3^2;</p><p>  uchar buffer0,buffer1,zhi,

36、zhi1; </p><p>  uchar table[]={0x7f,0xbf,0xdf,0xef,0xff}; //設(shè)置位選</p><p>  uchar table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f}; //前兩位數(shù)碼管碼表</p><p> 

37、 uchar table2[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82,0x7f,0xf0}; //后兩位數(shù)碼管碼表</p><p>  uchar code table3[2]="00"; </p><p>  uchar value,num,num1,num2;</p>

38、<p>  uchar temp,temp3,temp1,tempH,tempL,temp5,flag,flag1;</p><p>  uchar temp55,temp33,tempxiaoH,tempxiaoL;</p><p><b>  uint qq;</b></p><p>  void delay(uint z)

39、 //延時子程序</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b&

40、gt;  }</b></p><p>  void delay_18B20(unsigned int i) //DS18B20延時子程序,延時1us</p><p><b>  {</b></p><p>  while(i--);</p><p><b>  }</b></p

41、><p>  void Init_DS18B20(void) //Ds18b20初始化函數(shù)u</p><p><b>  {</b></p><p>  uchar x=0;</p><p>  DQ = 1; //DQ復(fù)位</p><p>  delay_18B20(8); //

42、稍做延時 ,穩(wěn)定數(shù)據(jù)</p><p>  DQ = 0; //單片機(jī)將DQ拉低</p><p>  delay_18B20(100); //精確延時 大于 480us</p><p>  DQ = 1; //拉高總線</p><p>  delay_18B20(14); //(15-60)us</p

43、><p>  x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗,采樣</p><p>  delay_18B20(20);</p><p><b>  }</b></p><p>  void Write_18b20byte(uchar dat)//向18B20寫一個節(jié),dat為

44、入口函數(shù)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for (i=8; i>0; i--)//一字節(jié)8位</p><p><b>  {</b></p><p><b&

45、gt;  DQ = 0;</b></p><p>  DQ = dat&0x01;</p><p>  delay_18B20(5);//18b20采樣</p><p>  DQ = 1;//拉高DQ</p><p>  dat>>=1;//出口函數(shù),dat為入口函數(shù)</p><p>

46、<b>  }</b></p><p><b>  }</b></p><p>  uchar Read_18b20byte(void)</p><p><b>  {</b></p><p><b>  uchar i;</b></p>&

47、lt;p>  uchar dat;</p><p>  for (i=8;i>0;i--)//判斷8次移位7次</p><p><b>  {</b></p><p>  DQ = 0; // 給脈沖信號,拉低總線</p><p>  dat>>=1;//可以起延時作用</p>&l

48、t;p>  DQ = 1; // 給脈沖信號,釋放總線后才可以采樣</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p>  delay_18B20(4);</p><p><b>  }</b></p><p> 

49、 return(dat);</p><p><b>  }</b></p><p>  void ReadTemp(void) //讀取ds18b20當(dāng)前溫度</p><p><b>  {</b></p><p>  uchar a,b;</p><p>  Init_D

50、S18B20();//18b20初始化</p><p>  Write_18b20byte(0xCC); // 跳過讀序號列號的操作</p><p>  Write_18b20byte(0x44); // 啟動溫度轉(zhuǎn)換</p><p>  delay_18B20(100); // 轉(zhuǎn)換需要時間,延時</p><p>  Init_D

51、S18B20();</p><p>  Write_18b20byte(0xCC); //跳過讀序號列號的操作</p><p>  Write_18b20byte(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度</p><p>  delay_18B20(100);</p><p>  a=Read_18b20

52、byte(); //讀取溫度值低位</p><p>  b=Read_18b20byte(); //讀取溫度值高位</p><p>  temp=b*16+a/16;</p><p>  temp1=(a%16)*10/16;</p><p><b>  }</b></p><p>

53、  void beepon(void)</p><p><b>  {</b></p><p><b>  beep=0;</b></p><p><b>  }</b></p><p>  void beepoff(void)</p><p><

54、b>  {</b></p><p><b>  beep=1;</b></p><p><b>  }</b></p><p>  void display(uchar one,uchar two,uchar three) </p><p><b>  {&l

55、t;/b></p><p>  P1=table[0];//選中第一個數(shù)碼管</p><p>  P0=table1[one];//顯示10位</p><p><b>  delay(3);</b></p><p>  P1=table[1];//選中第二個數(shù)碼管</p><p>  P0=

56、table1[two]&0x7f;</p><p><b>  delay(3);</b></p><p>  P1=table[2];</p><p>  P0=table2[three];</p><p><b>  delay(3);</b></p><p> 

57、 P1=table[3];</p><p>  P0=table2[11]&0x7f;</p><p>  delay(3);</p><p><b>  }</b></p><p>  void keywendu()</p><p><b>  {</b>&

58、lt;/p><p>  uchar temp2,temp22;</p><p>  temp2=temp;//整數(shù)位</p><p>  temp22=temp1;//小數(shù)位</p><p><b>  rd=0;</b></p><p>  if(k1==0) //功能鍵</p>

59、;<p>  {delay(20);</p><p><b>  if(k1==0)</b></p><p>  { while(!k1);//按鍵消抖程序</p><p><b>  flag=1;</b></p><p>  P1=table[1];</p>&

60、lt;p><b>  P0=0xff;</b></p><p>  delay(10);//個位不顯示</p><p>  P1=table[2];</p><p><b>  P0=0xff;</b></p><p>  delay(10);//小數(shù)位不顯示</p><p

61、><b>  while(1)</b></p><p><b>  {</b></p><p>  display(temp2/10,temp2%10,temp22);</p><p>  if(k1==0) //K1功能鍵</p><p>  {delay(20);</p>

62、<p><b>  if(k1==0)</b></p><p>  { while(!k1);</p><p><b>  num1++;</b></p><p>  if(num1==2)</p><p>  num1=0;//num1=0修改小數(shù)位//num1=1修改個位<

63、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  switch(num1)</p><p><b>  {</b></p><p>  case 0://小數(shù)位</p><p>  i

64、f(k2==0) //case0,K2功能鍵</p><p>  {delay(20);</p><p><b>  if(k2==0)</b></p><p>  { while(!k2);</p><p><b>  temp22++;</b></p><p>

65、  if(temp22==10)</p><p><b>  temp22=0;</b></p><p>  delay(20);</p><p>  P1=table[2];</p><p>  P0=table2[temp22];</p><p>  delay(50);//顯示小數(shù)位

66、</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(k4==0) //case0 K4 鍵</p><p>  {delay(20);</p><p><b>  if(k4==0)</b&g

67、t;</p><p>  { while(!k4);</p><p><b>  temp22--;</b></p><p>  if(temp22==-1)</p><p><b>  temp22=9;</b></p><p>  delay(20);</p&g

68、t;<p>  P1=table[2];</p><p>  P0=table2[temp22];</p><p>  delay(50);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  b

69、reak;</b></p><p><b>  case 1:</b></p><p>  if(k2==0) //case1 K2鍵</p><p><b>  {</b></p><p>  delay(20);</p><p><b>  i

70、f(k2==0)</b></p><p>  { while(!k2);</p><p><b>  temp2++;</b></p><p>  delay(20);</p><p>  P1=table[0];</p><p>  P0=table1[temp2/10];<

71、;/p><p><b>  delay(5);</b></p><p>  P1=table[1];</p><p>  P0=table1[temp2%10]&0x7f;</p><p>  delay(5);</p><p><b>  }</b>

72、</p><p><b>  }</b></p><p>  if(k4==0) //case1 K4鍵</p><p>  {delay(20);</p><p><b>  if(k4==0)</b></p><p>  { while(!k4);</p&

73、gt;<p><b>  temp2--;</b></p><p>  delay(20);</p><p>  P1=table[0];</p><p>  P0=table1[temp2/10];</p><p><b>  delay(5);</b></p><

74、;p>  P1=table[1];</p><p>  P0=table1[temp2%10]&0x7f;</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  }</b></p>

75、<p><b>  break;</b></p><p><b>  }</b></p><p>  if(k3==0) </p><p>  {delay(20);</p><p><b>  if(k3==0)</b></p><p&g

76、t;  { while(!k3);</p><p>  tempH=temp2;</p><p>  tempxiaoH=temp22;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }&l

77、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void keywendu_L(

78、)</p><p><b>  {</b></p><p>  uchar temp2,temp22;</p><p>  temp2=temp;//調(diào)節(jié)整數(shù)位</p><p>  temp22=temp1;//調(diào)節(jié)小數(shù)位</p><p><b>  rd=0;</b>

79、</p><p>  if(k3==0) //K3鍵</p><p>  {delay(20);</p><p><b>  if(k3==0)</b></p><p>  { while(!k3);//消抖電路</p><p><b>  flag1=1;</b>

80、</p><p>  P1=table[1];</p><p><b>  P0=0xff;</b></p><p>  delay(10);</p><p>  P1=table[2];</p><p><b>  P0=0xff;</b></p><p

81、>  delay(10);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  display(temp2/10,temp2%10,temp22);</p><p>  if(k3==0) //功能鍵</p>&l

82、t;p>  {delay(20);</p><p><b>  if(k3==0)</b></p><p>  { while(!k3);</p><p><b>  num1++;</b></p><p>  if(num1==2)</p><p><b&

83、gt;  num1=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  switch(num1)</p><p><b>  {</b></p><p>  case 0://ca

84、se0時選擇小數(shù)位</p><p>  if(k2==0) </p><p>  {delay(20);</p><p><b>  if(k2==0)</b></p><p>  { while(!k2);</p><p><b>  temp22++;</b>&

85、lt;/p><p>  if(temp22==10)</p><p><b>  temp22=0;</b></p><p>  delay(20);</p><p>  P1=table[2];</p><p>  P0=table2[temp22];</p><p>  d

86、elay(50);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(k4==0) </p><p>  {delay(20);</p><p><b>  if(k4==0)<

87、/b></p><p>  { while(!k4);</p><p><b>  temp22--;</b></p><p>  if(temp22==-1)</p><p><b>  temp22=9;</b></p><p>  delay(20);<

88、/p><p>  P1=table[2];</p><p>  P0=table2[temp22];</p><p>  delay(50);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>

89、;  break;</b></p><p><b>  case 1:</b></p><p>  if(k2==0) //case1 調(diào)節(jié)K2鍵</p><p><b>  {</b></p><p>  delay(20);</p><p><b&

90、gt;  if(k2==0)</b></p><p>  { while(!k2);</p><p><b>  temp2++;</b></p><p>  delay(20);</p><p>  P1=table[0];</p><p>  P0=table1[temp2/1

91、0];</p><p><b>  delay(5);</b></p><p>  P1=table[1];</p><p>  P0=table1[temp2%10]&0x7f;</p><p>  delay(5);</p><p><b>  }<

92、/b></p><p><b>  }</b></p><p>  if(k4==0) //case1調(diào)節(jié)K4鍵</p><p>  {delay(20);</p><p><b>  if(k4==0)</b></p><p>  { while(!k4);

93、</p><p><b>  temp2--;</b></p><p>  delay(20);</p><p>  P1=table[0];</p><p>  P0=table1[temp2/10];</p><p><b>  delay(5);</b></p&g

94、t;<p>  P1=table[1];</p><p>  P0=table1[temp2%10]&0x7f;</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  }</b><

95、/p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(k1==0) </p><p>  {delay(20);</p><p><b>  if(k1==0)</b></p>

96、<p>  { while(!k1);</p><p>  tempL=temp2;</p><p>  tempxiaoL=temp22;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b&g

97、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main

98、()</p><p><b>  { </b></p><p>  uchar shi,ge; //十位和個位定義字符格式</p><p>  Init_DS18B20();//初始化18B20溫度傳感器</p><p><b>  while(1)</b></p><p>

99、;<b>  {</b></p><p>  ReadTemp();//讀取18B20傳感器溫度值</p><p>  shi=temp/10;</p><p>  ge=temp%10;</p><p><b>  delay(5);</b></p><p>  displ

100、ay(shi,ge,temp1);//顯示溫度值</p><p>  keywendu();//修改溫度上限</p><p>  keywendu_L();//修改溫度下限</p><p>  if(flag==1&&temp>tempH)//大于最高設(shè)定溫度報警</p><p>  {beepon();</p&

101、gt;<p>  delay(500);</p><p>  delay(500);</p><p>  beepoff();</p><p><b>  }</b></p><p>  if(flag==1&&temp==tempH&&tempxiaoH<temp

102、1)//蜂鳴器報警</p><p>  {beepon();</p><p>  delay(500);</p><p>  delay(500);</p><p>  beepoff();</p><p><b>  }</b></p><p>  if(flag1

103、==1&&temp<tempL)//小宇最低設(shè)定溫度報警</p><p>  {beepon();</p><p>  delay(500);</p><p>  delay(500);</p><p>  beepoff();</p><p><b>  }</b>&

104、lt;/p><p>  if(flag1==1&&temp==tempL&&tempxiaoL>temp1)//蜂鳴器報警</p><p>  {beepon();</p><p>  delay(500);</p><p>  delay(500);</p><p>  bee

105、poff();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  五、心得體會</b></p><p>  作為一名電子信息工程專業(yè)的

106、大三學(xué)生,我覺得做單片機(jī)課程設(shè)計(jì)是十分有意義的,而且是十分必要的。在已度過的大學(xué)時間里,我們大多數(shù)接觸的是專業(yè)課。我們在課堂上掌握的僅僅是專業(yè)課的理論知識,如何去鍛煉我們的實(shí)踐能力?如何把我們所學(xué)的專業(yè)基礎(chǔ)課理論知識運(yùn)用到實(shí)踐中去呢?我想做類似的課程設(shè)計(jì)就為我們提供了良好的實(shí)踐平臺。</p><p>  課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能

107、力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。</p><p>  這次單片機(jī)課程設(shè)計(jì)我們歷時兩個星期,從理論到實(shí)踐,學(xué)到了很多的東西。同時不僅鞏固了以前所學(xué)過的知識,而且還學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論

108、知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在這次課程設(shè)計(jì)后我發(fā)現(xiàn)自己在一點(diǎn)一滴的努力中對單片機(jī)的興趣也在逐漸增加。這次的課程設(shè)計(jì)還讓我學(xué)會了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。更重要的是,我在這一設(shè)計(jì)過程中,學(xué)會了堅(jiān)持不懈,不輕言放棄。</p><p>  回顧起此次單片機(jī)課程設(shè)計(jì),我感慨頗多,最重

109、要的是感觸是:遇到一個問題時,最重要的一件事就是馬上思考檢查問題出在哪邊,而不是抱怨或者馬上請教同學(xué)老師。只有這樣我們才能真正的學(xué)會單片機(jī),才能越學(xué)越會。自己的獨(dú)立處理問題的能力才會得到提高。還有無論編程中遇到什么問題,都不要怨天尤人。無論自己的程序有多好,都不能驕傲。只有這樣做到不驕不躁,力量才會源源不斷,才會有更多的靈感。</p><p>  在課程設(shè)計(jì)的過程中:遇到的最大的問題就是編程問題,在杠杠做設(shè)計(jì)時,

110、自己很快就把流程圖畫好了。但是在具體編程區(qū)實(shí)現(xiàn)功能的時候還是遇到了很多困難的。第一個問題就是到底是用匯編語言還是用C語言去完成這一個設(shè)計(jì),剛剛開始我選的是匯編語言,但是在做了一個上午之后我就發(fā)現(xiàn)自己對匯編語言的掌握存在著許多不足,后來改用C語言。這樣一步一步的把程序編出來。盡管用C語言的時候我也遇到了一些編程錯誤,但是在自己查資料和同學(xué)的熱情幫助下,最終還是成功的把程序編了出來,并且能夠成功運(yùn)行。</p><p>

111、;  此外,要做好一個課程設(shè)計(jì),就必須做到:在設(shè)計(jì)程序之前,對所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機(jī)內(nèi)有哪些資源;要有一個清晰的思路和一個完整的的軟件流程圖;在設(shè)計(jì)程序時,不能妄想一次就將整個程序設(shè)計(jì)好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實(shí)現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計(jì)課程過程中遇到問題是很正常的,但我們應(yīng)該將每次遇到

112、的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。</p><p>  在整個課程設(shè)計(jì)中我懂得了許多東西,也培養(yǎng)了我獨(dú)立工作的能力,樹立了對自己工作能力的信心,相信會對今后的學(xué)習(xí)工作生活有非常重要的影響。而且大大提高了動手的能力,使我充分體會到了在創(chuàng)造過程中探索的艱難和成功時的喜悅。雖然這個課程設(shè)計(jì)做的還是有一些遺憾,但是在設(shè)計(jì)過程中所學(xué)到的東西是這次課程設(shè)計(jì)的最大收獲和財(cái)富。</p><

113、p>  最后,無論如何都要好好的感謝指導(dǎo)老師的幫助,在整個課程設(shè)計(jì)過程中,老師都給了我很大的幫助。在老師的辛勤指導(dǎo)之下,學(xué)到了很多有用的經(jīng)驗(yàn)和使用的知識。而且還得感謝身邊同學(xué)的幫助和交流,在互相幫助和交流的過程中能夠?qū)W到很多很有創(chuàng)意的編程思想,更加擴(kuò)寬了自己的思想。</p><p><b>  六、參考文獻(xiàn)</b></p><p>  【1】張毅剛 彭喜元

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論