版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> IEC計算機(jī)14級《單片機(jī)系統(tǒng)概論》</p><p><b> 期末設(shè)計報告</b></p><p> 2017年 月 日</p><p> 設(shè)計題目</p><p> 院 系</p><p> 班 級</p><p> 姓
2、名</p><p> 學(xué) 號</p><p><b> 目 錄</b></p><p> 1 系統(tǒng)方案設(shè)計3</p><p> 1.1 系統(tǒng)整體設(shè)計工作框圖3</p><p> 1.2 系統(tǒng)設(shè)計元器件清單3</p><p> 2 硬件電路設(shè)計4
3、</p><p> 2.1 系統(tǒng)總電路原理圖4</p><p> 2.2 AD鍵盤的設(shè)計4</p><p> 2.3 Lcd1602電路的設(shè)計5</p><p> 2.4 蜂鳴器驅(qū)動電路的設(shè)計5</p><p> 2.5 流水燈的設(shè)計6</p><p> 2.6 DS18B
4、20電路的設(shè)計7</p><p><b> 3 程序流程圖8</b></p><p> 3.1 程序主流程圖設(shè)計8</p><p><b> 8</b></p><p> 3.2 LCD顯示子程序流程圖設(shè)計8</p><p> 4 C語言源程序清單9<
5、;/p><p><b> 5 參考文獻(xiàn)11</b></p><p><b> 1 系統(tǒng)方案設(shè)計</b></p><p> 1.1 系統(tǒng)整體設(shè)計工作框圖</p><p> 圖1-1 系統(tǒng)整體設(shè)計工作框圖</p><p> 1.2 系統(tǒng)設(shè)計元器件清單</p>
6、<p> 表1-1 系統(tǒng)設(shè)計元器件清單</p><p><b> 51單片機(jī)開發(fā)板</b></p><p><b> 2 硬件電路設(shè)計</b></p><p> 2.1 系統(tǒng)總電路原理圖</p><p> 圖2-1 系統(tǒng)總電路原理圖</p><p>
7、2.2 AD鍵盤的設(shè)計</p><p> 1.引腳連接:與單片機(jī)的AD采集IO口相連</p><p> 2.功能: 采集AD值來判斷哪個鍵被按下</p><p> 圖2-2 AD鍵盤電路</p><p> 2.3 Lcd1602電路的設(shè)計</p><p> 1.引腳連接:數(shù)據(jù)口為單片機(jī)的P0口 通信口為&l
8、t;/p><p> LCD1602_RS : P1^1;</p><p> LCD1602_RW :P1^2;</p><p> LCD1602_EN : P1^3;</p><p> 2.功能:LCD1602作用是顯示出兩排 每排16個字符包括26個英文字母,10個數(shù)字和英文標(biāo)點(diǎn)符號,在這里我們顯示體溫和狀態(tài)</p>&l
9、t;p> 圖2-3 Lcd1602顯示電路</p><p> 2.3 DH11電路的設(shè)計</p><p> 1.引腳連接:通信連P3.7口。</p><p> 2.功能:可測量環(huán)境溫度和濕度。其電路如圖2-4所示。</p><p> 圖2-4 DS18B20電路圖</p><p> 2.5 閃爍燈的
10、設(shè)計</p><p> 1.引腳連接:8個二極管分別于單片機(jī)的P2的8個口相連</p><p> 圖2-5 流水燈電路圖</p><p><b> 3 程序流程圖</b></p><p> 3.1 程序主流程圖設(shè)計</p><p> 圖3-1 程序主流程圖</p><
11、;p> 3.2 LCD顯示子程序流程圖設(shè)計</p><p> 圖3-2 LCD顯示程序流程圖</p><p> 4 C語言源程序清單</p><p> 4.1主函數(shù)程序清單</p><p> #include "reg52.h"</p><p> #include "LC
12、D1602.h"</p><p> #include "DS18B20.h"</p><p> #include "jianpan.h"</p><p> sbit Buzzer = P2^5;</p><p><b> //定義變量</b></p>
13、<p> unsigned int Temp_Buffer = 0;</p><p> unsigned int warning = 360;</p><p> bit flag = 0;</p><p> //****************************************************</p><
14、p> //MS延時函數(shù)(12M晶振下測試)</p><p> //****************************************************</p><p> void Delay_ms(unsigned int m)</p><p><b> {</b></p><p>
15、unsigned int i;</p><p> unsigned long j;</p><p> for(i = 0; i < m; i++)</p><p> for(j = 0; j < 123; j++);</p><p><b> }</b></p><p>
16、//****************************************************</p><p><b> //顯示函數(shù)</b></p><p> //****************************************************</p><p> void distmp()</
17、p><p><b> {</b></p><p> Temp_Buffer = Get_temp(); //讀取DS18B20的值</p><p> LCD1602_write_com(0x80+0x40);//設(shè)置LCD1602指針到第二行第一列</p><p> LCD1602_wri
18、te_word("TEMP = ");</p><p> if(flag_temper == 1)//根據(jù)溫度標(biāo)志位顯示溫度正負(fù)</p><p><b> {</b></p><p> LCD1602_write_data('-');</p><p><b
19、> }</b></p><p> if( Temp_Buffer/1000 != 0 )//如果第一位為0,忽略顯示</p><p><b> {</b></p><p> LCD1602_write_data(Temp_Buffer/1000+0X30);//顯示溫度百位值</p>&
20、lt;p><b> }</b></p><p> if( Temp_Buffer/1000 == 0 && Temp_Buffer%1000/100 == 0 )//千位百位都為0,忽略顯示</p><p><b> {</b></p><p><b> }</b><
21、;/p><p><b> else</b></p><p><b> {</b></p><p> LCD1602_write_data(Temp_Buffer%1000/100+0X30); //顯示溫度百位值</p><p><b> }</b></p>
22、<p> LCD1602_write_data(Temp_Buffer%100/10+0X30); //顯示溫度十位值</p><p> LCD1602_write_data('.'); //顯示小數(shù)點(diǎn)</p><p> LCD1602_write_data(Temp_Buffer%10+0X30); //顯示溫度個位值<
23、/p><p> LCD1602_write_word("C"); //顯示字符C</p><p> Delay_ms(10);</p><p><b> }</b></p><p> void distmp2()</p><p><b>
24、 {</b></p><p> LCD1602_write_com(0x80);//設(shè)置LCD1602指針到第二行第一列</p><p> LCD1602_write_word("WARNING : ");</p><p> LCD1602_write_data(warning%1000/100+0X30); /
25、/顯示溫度百位值</p><p> LCD1602_write_data(warning%100/10+0X30); //顯示溫度十位值</p><p> LCD1602_write_data('.'); //顯示小數(shù)點(diǎn)</p><p> LCD1602_write_data(warning%10+0X30); /
26、/顯示溫度個位值</p><p> LCD1602_write_word("C"); //顯示字符C</p><p><b> }</b></p><p> //****************************************************</p><p&g
27、t;<b> //主函數(shù)</b></p><p> //****************************************************</p><p> void main()</p><p><b> {</b></p><p> Init_LCD1602();
28、//初始化LCD1602</p><p> LCD1602_write_com(0x80);//指針設(shè)置到第一行第1列</p><p> Delay_ms(100);</p><p> LCD1602_write_word("Welcome to use!");</p><p>
29、 Temp_Buffer = Get_temp(); //讀取DS18B20的值</p><p> Delay_ms(1000);//等待1s等待DS18B20數(shù)據(jù)穩(wěn)定。否則可能會出現(xiàn)85℃。</p><p> LCD1602_write_com(0x01);</p><p><b> whi
30、le(1)</b></p><p><b> {</b></p><p><b> distmp();</b></p><p> distmp2();</p><p> if(KEY_Scan() == 15) flag = 1;</p><p> i
31、f(warning<=Temp_Buffer&&flag == 0)</p><p><b> {</b></p><p> Buzzer = 1; </p><p><b> }</b></p><p><b> }</b></p&g
32、t;<p><b> }</b></p><p> 4.2 LCD驅(qū)動函數(shù)</p><p> #include "LCD1602.h"</p><p> //****************************************************</p><p>
33、 //MS延時函數(shù)(12M晶振下測試)</p><p> //****************************************************</p><p> void LCD1602_delay_ms(unsigned int n)</p><p><b> {</b></p><p>
34、; unsigned int i,j;</p><p> for(i = 0; i < n; i++)</p><p> for(j = 0; j < 123; j++);</p><p><b> }</b></p><p> //********************************
35、********************</p><p><b> //寫指令</b></p><p> //****************************************************</p><p> void LCD1602_write_com(unsigned char com)</p>
36、<p><b> {</b></p><p> LCD1602_RS = 0;</p><p> LCD1602_delay_ms(1);</p><p> LCD1602_EN = 1;</p><p> LCD1602_PORT = com;</p><p> LCD16
37、02_delay_ms(1);</p><p> LCD1602_EN = 0;</p><p><b> }</b></p><p> //****************************************************</p><p><b> //寫數(shù)據(jù)</b>
38、</p><p> //****************************************************</p><p> void LCD1602_write_data(unsigned char dat)</p><p><b> {</b></p><p> LCD1602_RS =
39、 1;</p><p> LCD1602_delay_ms(1);</p><p> LCD1602_PORT = dat;</p><p> LCD1602_EN = 1;</p><p> LCD1602_delay_ms(1);</p><p> LCD1602_EN = 0;</p>
40、<p><b> }</b></p><p> //****************************************************</p><p><b> //連續(xù)寫字符</b></p><p> //**************************************
41、**************</p><p> void LCD1602_write_word(unsigned char *s)</p><p><b> {</b></p><p> while(*s>0)</p><p><b> {</b></p><p&g
42、t; LCD1602_write_data(*s);</p><p><b> s++;</b></p><p><b> }</b></p><p><b> }</b></p><p> void Init_LCD1602()</p><p&g
43、t;<b> {</b></p><p> LCD1602_EN = 0;</p><p> LCD1602_RW = 0;//設(shè)置為寫狀態(tài)</p><p> LCD1602_write_com(0x38);//顯示模式設(shè)定</p><p> LCD1602_write_com(0x0c);
44、//開關(guān)顯示、光標(biāo)有無設(shè)置、光標(biāo)閃爍設(shè)置</p><p> LCD1602_write_com(0x06);//寫一個字符后指針加一</p><p> LCD1602_write_com(0x01);//清屏指令</p><p><b> }</b></p><p> 4.3DHT11驅(qū)動程序&l
45、t;/p><p> #include "DHT11.h"</p><p><b> //定義變量</b></p><p> unsigned char HUMI_Buffer_Int_H = 0;</p><p> unsigned char HUMI_Buffer_Int_L = 0;</
46、p><p> unsigned char TEM_Buffer_Int_H = 0;</p><p> unsigned char TEM_Buffer_Int_L = 0;</p><p> unsigned char CHECK_VALUE = 0;</p><p> //*******************************
47、*********************</p><p> //MS延時函數(shù)(12M晶振下測試)</p><p> //****************************************************</p><p> void DHT11_delay_ms(unsigned int m)</p><p>&l
48、t;b> {</b></p><p> unsigned int i;</p><p> unsigned long j;</p><p> for(i = 0; i < m; i++)</p><p> for(j = 0; j < 123; j++);</p><p>&l
49、t;b> }</b></p><p> //****************************************************</p><p><b> //延時函數(shù)</b></p><p> //**************************************************
50、**</p><p> void DHT11_10us( unsigned int n )</p><p><b> {</b></p><p> unsigned char i, j;</p><p> for(j = 0; j < n; j++)</p><p><b>
51、; {</b></p><p> i = 17;//3是5us,17是10us</p><p> while (--i);</p><p><b> }</b></p><p><b> }</b></p><p> //*********
52、*******************************************</p><p> //初始化DHT11</p><p> //****************************************************</p><p> bit DHT11_Init()</p><p><b&g
53、t; {</b></p><p> bit Flag_DHT11 = 1;</p><p> DHT11_DQ = 0;//CPU發(fā)開始信號</p><p> DHT11_delay_ms(30);//延時>18ms</p><p> DHT11_DQ = 1;//CPU拉高信號,等待D
54、HT11響應(yīng)信號</p><p> DHT11_10us(3);//延時20~40us</p><p> Flag_DHT11 = DHT11_DQ;</p><p> DHT11_10us(8);//DHT11響應(yīng)總時間80us</p><p> DHT11_10us(9);//DHT11拉高信號8
55、0us</p><p> return Flag_DHT11;</p><p><b> }</b></p><p> //****************************************************</p><p> //讀一個字節(jié)DHT11數(shù)據(jù)</p><p
56、> //****************************************************</p><p> unsigned char DHT11_Read_Byte()</p><p><b> {</b></p><p> unsigned char i, dat, j;</p><
57、p><b> dat = 0;</b></p><p> while( DHT11_DQ == 1 );</p><p> for( i = 0 ; i < 8 ; i++ )</p><p><b> {</b></p><p> while( DHT11_DQ == 0 )
58、;</p><p> dat <<= 1;</p><p> for( j = 0 ; DHT11_DQ == 1 ; j++);</p><p> if( j < 80 )</p><p> dat &= 0xfe;//低位清零</p><p><b> e
59、lse</b></p><p> dat |= 0x01;//低位置一</p><p><b> }</b></p><p> dat &= 0xff;</p><p> return dat;</p><p><b> }</b>&
60、lt;/p><p> //****************************************************</p><p> //讀取溫濕度值,存放在TEM_Buffer和HUMI_Buffer</p><p> //****************************************************</p>
61、<p> void DHT11_Read()</p><p><b> {</b></p><p> if( DHT11_Init() == 0 )</p><p><b> {</b></p><p> HUMI_Buffer_Int_H = DHT11_Read_Byte
62、(); //讀取濕度的整數(shù)值</p><p> HUMI_Buffer_Int_L = DHT11_Read_Byte();//讀取濕度的小數(shù)值</p><p> TEM_Buffer_Int_H = DHT11_Read_Byte();//讀取溫度的整數(shù)值</p><p> TEM_Buffer_Int_L = DHT11_Read_Byte(
63、);//讀取溫度的小數(shù)值</p><p> CHECK_VALUE = DHT11_Read_Byte();//讀取校驗(yàn)和</p><p> DHT11_10us(5);//DHT11拉低總線50us</p><p> DHT11_DQ = 1;//釋放總線</p><p> if(CHEC
64、K_VALUE != (HUMI_Buffer_Int_H + HUMI_Buffer_Int_L + TEM_Buffer_Int_H + TEM_Buffer_Int_L))</p><p><b> {</b></p><p> HUMI_Buffer_Int_H = 99;</p><p> TEM_Buffer_Int_H =
65、99;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> HUMI_Buffer_Int_H =
66、 0;</p><p> TEM_Buffer_Int_H = 9;</p><p><b> }</b></p><p><b> }</b></p><p><b> 4.4小燈控制程序</b></p><p> void timer0()
67、 interrupt 1 using 1</p><p><b> { </b></p><p> TH0 = 0x3C;</p><p> TL0 = 0xB0;// 50ms</p><p><b> ms++;</b></p><p> if(ms =
68、= 20 )</p><p><b> {</b></p><p><b> ms = 0;</b></p><p> LED = ~LED;</p><p><b> }</b></p><p><b> }</b>
69、</p><p><b> 5 參考文獻(xiàn)</b></p><p> 【格式】[序號]作者.書名[M].出版地:出版社,出版年份:起止頁碼.</p><p><b> 例如:</b></p><p> [1] 葛家澍.現(xiàn)代西方財務(wù)會計理論[M].廈門:廈門大學(xué)出版社,2001:42.</
70、p><p><b> 說明:</b></p><p> 1.正文部分采用宋體小四,1.5倍行距。</p><p> 2.一級標(biāo)題黑體小三號加黑,二級標(biāo)題黑體四號加黑,三級標(biāo)題黑體小四號加黑。全部標(biāo)題均不居中,段前段后都為0行,行間距為1.5倍。</p><p> 3.封皮頁、設(shè)計概述與成績頁、目錄頁各自獨(dú)占一頁。一級
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)畢業(yè)設(shè)計---基于單片機(jī)簡易計算機(jī)
- 單片機(jī)外文文獻(xiàn)翻譯---微型計算機(jī)控制系統(tǒng)(單片機(jī)控制系統(tǒng))
- 基于51單片機(jī)的計算機(jī)可鎖定加密鍵盤設(shè)計
- 采用單片機(jī)控制的計算機(jī)校時裝置設(shè)計.pdf
- 基于51單片機(jī)的計算機(jī)可鎖定加密鍵盤設(shè)計
- 單片機(jī)課程設(shè)計--基于單片計算機(jī)的溫度控制器
- 單片機(jī)課程設(shè)計報告---單片機(jī)秒表系統(tǒng)設(shè)計
- 計算機(jī)控制課程設(shè)計---單片機(jī)的爐溫控制設(shè)計
- 基于51單片機(jī)的計算機(jī)可鎖定加密鍵盤設(shè)計.doc
- 基于51單片機(jī)的計算機(jī)可鎖定加密鍵盤設(shè)計.doc
- 計算機(jī)畢業(yè)設(shè)計---單片機(jī)智能小車設(shè)計
- 計算機(jī)控制課程設(shè)計報告--基于單片機(jī)的直流伺服電機(jī)速度控制系統(tǒng)
- 計算機(jī)畢業(yè)設(shè)計---單片機(jī)智能小車設(shè)計
- 基于單片機(jī)和pc計算機(jī)通信系統(tǒng)的設(shè)計畢業(yè)設(shè)計(含外文翻譯)
- 計算機(jī)控制課程設(shè)計---基于單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)
- 計算機(jī)單片機(jī)設(shè)計課程設(shè)計--簡易計算器
- 單片機(jī)課程設(shè)計報告---單片機(jī)控制秒表系統(tǒng)
- 計算機(jī)概論
- 計算機(jī)專業(yè)畢業(yè)論文--基于單片機(jī)的銀行自動門系統(tǒng)的設(shè)計
- 單片機(jī)做溫控系統(tǒng)設(shè)計報告
評論
0/150
提交評論