|
里面是一整套,系統(tǒng)由單片機(jī)STC89C52、液晶顯示模塊LCD1602、溫度檢測(cè)模塊、按鍵模塊、報(bào)警模塊、加熱模塊、冷卻模塊所組成。系統(tǒng)能完成以下功能,系統(tǒng)采用DS18B20對(duì)溫度進(jìn)行檢測(cè),并且能在LCD1602上實(shí)時(shí)顯示溫度。用戶可以通過(guò)按鍵設(shè)置上限和下限溫度,當(dāng)溫度超過(guò)上限溫度時(shí),系統(tǒng)通過(guò)繼電器使冷卻器件導(dǎo)通工作,當(dāng)溫度低于下限溫度時(shí),系統(tǒng)通過(guò)繼電器使加熱器件工作。當(dāng)溫度在上限和下限之間時(shí)維持原狀態(tài)。
PPT模板(非本設(shè)計(jì)僅供參考)
仿真(使用PROTEUS軟件打開(kāi)文件里面后綴為DSN的文件)
元件清單
原理圖和PCB(使用PROTEL軟件打開(kāi)文件里面后綴為SCH和PCB的文件)
外文翻譯
程序(使用KEIL軟件打開(kāi)文件里面后綴為uvproj的文件)
系統(tǒng)簡(jiǎn)介
芯片資料
仿真(使用PROTEUS軟件打開(kāi)文件里面后綴為DSN的文件)
1.雙擊圖中間的單片機(jī)會(huì)出現(xiàn)以下界面
2.點(diǎn)擊ProgramFile一欄的文件夾圖標(biāo)。找到跟仿真文件同一個(gè)文件夾里面的”仿真中需要加載的程序.hex”,并點(diǎn)擊打開(kāi)按鍵。
3點(diǎn)擊下面第一個(gè)按鈕便可運(yùn)行成功。
題目名稱 | |
|
|
|
|
|
| 一、選題的目的和意義: 溫度控制無(wú)論是在工業(yè)生產(chǎn)過(guò)程中,還是在日常生活中都起著非常重要的作用,過(guò)低的溫度或過(guò)高的溫度都會(huì)使資源失去應(yīng)有的作用,從而造成資源的巨大浪費(fèi)。特別是在當(dāng)前全球資源極度缺乏的情況下,我們更應(yīng)該掌握好對(duì)溫度的控制,把身邊的資源好好地利用起來(lái)。 在計(jì)算機(jī)沒(méi)有發(fā)明之前,這些控制都是我們難以想象的。而當(dāng)今,隨著電子行業(yè)的迅猛發(fā)展,計(jì)算機(jī)技術(shù)和傳感器技術(shù)的不斷改進(jìn),而且計(jì)算機(jī)和傳感器的價(jià)格也日益降低,可靠性逐步提高,用信息技術(shù)來(lái)實(shí)現(xiàn)溫度控制并提高控制的精確度不僅是可以達(dá)到的而且是可以實(shí)現(xiàn)的,用高新技術(shù)解決生活用電問(wèn)題,實(shí)施對(duì)溫度控制已經(jīng)成為我們電子行業(yè)的任務(wù),以此來(lái)加強(qiáng)工業(yè)化建設(shè),提高人民的生活水平。 溫度控制在實(shí)際生活中有一定的實(shí)際意義,在工業(yè)生產(chǎn)中有著較為廣泛的應(yīng)用,用單片機(jī)實(shí)現(xiàn)自適應(yīng)控制,彌補(bǔ)了傳統(tǒng) PID控制結(jié)構(gòu)在特定場(chǎng)合下性能下降的不足,設(shè)計(jì)了一套實(shí)用的溫度測(cè)控系統(tǒng),使它在不同時(shí)間常數(shù)下均可以達(dá)到技術(shù)指標(biāo)。此外還有效減少了輸出繼電器的開(kāi)關(guān)次數(shù),適用于環(huán)境參數(shù)經(jīng)常變化的小型溫度控制系統(tǒng)。例如:在冶金工業(yè)、化工生產(chǎn)、電力工程、造紙行業(yè)、機(jī)械制造和食品加工等諸多領(lǐng)域中,人們都需要對(duì)各類加熱爐、熱處理爐、反應(yīng)爐和鍋爐中的溫度進(jìn)行檢測(cè)和控制。雖然溫度控制系統(tǒng)的制作方案有很多,但是經(jīng)過(guò)對(duì)比各個(gè)方案的優(yōu)劣,還是采用單片機(jī)更好,因?yàn)椴捎脝纹瑱C(jī)來(lái)對(duì)溫度進(jìn)行控制,不僅具有控制方便、組態(tài)簡(jiǎn)單和靈活性大等優(yōu)點(diǎn),而且可以大幅度提高被控溫度的技術(shù)指標(biāo),從而能夠大大提高產(chǎn)品的質(zhì)量和數(shù)量 | 二、研究概況及發(fā)展趨勢(shì)綜述 國(guó)內(nèi)現(xiàn)狀: 我國(guó)對(duì)于溫度控制技術(shù)的研究較晚,始于20世紀(jì)80年代。我國(guó)工程技術(shù)人員在吸收發(fā)達(dá)國(guó)家溫度控制技術(shù)的基礎(chǔ)上,才掌握了溫度室內(nèi)微機(jī)控制技術(shù),該技術(shù)僅限于對(duì)溫度的單項(xiàng)環(huán)境因子的控制。溫度控制設(shè)施計(jì)算機(jī)應(yīng)用,在總體上正從消化吸收、簡(jiǎn)單應(yīng)用階段向?qū)嵱没⒕C合性應(yīng)用階段過(guò)渡和發(fā)展。在技術(shù)上,以單片機(jī)控制的單參數(shù)單回路系統(tǒng)居多,尚無(wú)真正意義上的多參數(shù)綜合控制系統(tǒng),與發(fā)達(dá)國(guó)家相比,存在較大差距。我國(guó)溫度控制控制現(xiàn)狀還遠(yuǎn)遠(yuǎn)沒(méi)有達(dá)到工廠化的程度,生產(chǎn)實(shí)際中仍然有許多問(wèn)題困擾著我們,如軟硬件資源不能共享和可靠性比較差。 國(guó)外現(xiàn)狀: 國(guó)外對(duì)溫度控制技術(shù)研究較早,始于20世紀(jì)70年代。先是采用模擬式的組合儀表,采集現(xiàn)場(chǎng)信息并進(jìn)行指示、記錄和控制。80年代末出現(xiàn)了分布式控制系統(tǒng)。目前正開(kāi)發(fā)和研制計(jì)算機(jī)數(shù)據(jù)采集控制系統(tǒng)的多因子綜合控制系統(tǒng),F(xiàn)在世界各國(guó)的溫度控制技術(shù)發(fā)展很快,一些國(guó)家在實(shí)現(xiàn)自動(dòng)化的基礎(chǔ)上正向著完全自動(dòng)化、無(wú)人化的方向發(fā)展。 隨著科學(xué)技術(shù)的飛速發(fā)展,帶動(dòng)社會(huì)生產(chǎn)的發(fā)展,自動(dòng)控制系統(tǒng)在各個(gè)領(lǐng)域尤其是工業(yè)領(lǐng)域中有著及其廣泛的應(yīng)用,溫度控制是控制系統(tǒng)中最為常見(jiàn)的控制類型之一。隨著單片機(jī)技術(shù)的飛速發(fā)展,通過(guò)單片機(jī)對(duì)被控對(duì)象進(jìn)行控制日益成為今后自動(dòng)控制領(lǐng)域的一個(gè)重要發(fā)展方向,電流、電壓、溫度、壓力、流量、流速和開(kāi)關(guān)量都是常用的主要被控參數(shù) | 三、研究目標(biāo)、研究?jī)?nèi)容和擬解決的關(guān)鍵問(wèn)題 研究目標(biāo): 本設(shè)計(jì)主要采用MCS-51系列單片機(jī)作為主控芯片,能夠?qū)崿F(xiàn)溫度控制,數(shù)據(jù)顯示,參數(shù)設(shè)置等功能。 研究?jī)?nèi)容: 根據(jù)以上設(shè)計(jì)需要,系統(tǒng)擬采用以下技術(shù)方案,系統(tǒng)的結(jié)構(gòu)框圖如下圖所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖 系統(tǒng)由單片機(jī)STC89C52、液晶顯示模塊LCD1602、溫度檢測(cè)模塊、按鍵模塊、報(bào)警模塊、加熱模塊、冷卻模塊所組成。系統(tǒng)能完成以下功能,系統(tǒng)采用DS18B20對(duì)溫度進(jìn)行檢測(cè),并且能在LCD1602上實(shí)時(shí)顯示溫度。用戶可以通過(guò)按鍵設(shè)置上限和下限溫度,當(dāng)溫度超過(guò)上限溫度時(shí),系統(tǒng)通過(guò)繼電器使冷卻器件導(dǎo)通工作,當(dāng)溫度低于下限溫度時(shí),系統(tǒng)通過(guò)繼電器使加熱器件工作。當(dāng)溫度在上限和下限之間時(shí)維持原狀態(tài)。 擬解決的關(guān)鍵問(wèn)題: 1、完成鍵盤的設(shè)計(jì),分配好各個(gè)按鍵輸入對(duì)應(yīng)單片機(jī)各口的控制信息; 2、完成LCD顯示電路的設(shè)計(jì),實(shí)現(xiàn)具體的控制、提示信息的顯示; 3、完成溫度檢測(cè)電路的設(shè)計(jì),使其能夠準(zhǔn)確溫度值; | 四、研究的基本思路和方法、技術(shù)路線、實(shí)驗(yàn)方案及可行性分析 研究的基本思路和方法: 1、確定硬件系統(tǒng)的設(shè)計(jì)方案: (1)、根據(jù)系統(tǒng)的功能要求確定選用的元器件; (2)、分配單片機(jī)各個(gè)P口地址,以連接對(duì)應(yīng)的元器件,方便控制; (3)、利用protel軟件構(gòu)建系統(tǒng)的硬件圖; 2、確定軟件部分的設(shè)計(jì)方案: (1)、確定各部分模塊對(duì)應(yīng)要實(shí)現(xiàn)的功能,并根據(jù)連接圖寫出對(duì)應(yīng)程序中對(duì)應(yīng)的控制信息,便于軟件編寫; (2)、用keil軟件編寫程序,對(duì)應(yīng)各模塊功能模塊化編寫,便于程序的檢查和調(diào)試; 3、利用keil軟件生成hex文件,用PROTEL軟件繪制電路圖 4、依照電路圖,在電路板上焊接各元件,完成系統(tǒng)實(shí)物設(shè)計(jì); 5、將焊好的電路板反復(fù)進(jìn)行硬件調(diào)試和系統(tǒng)整體調(diào)試,直到實(shí)現(xiàn)系統(tǒng)要求的預(yù)定功能。 技術(shù)路線、實(shí)驗(yàn)方案及可行性分析: 1、設(shè)計(jì)用到的設(shè)備和軟件: 主要設(shè)備:電腦、單片機(jī)燒寫器 軟件:Protel仿真軟件、keil軟件 2、利用學(xué)習(xí)過(guò)的模擬電子技術(shù)、數(shù)字電路技術(shù)、單片機(jī)原理與應(yīng)用等知識(shí),了解溫度控制的原理,并選用合適的元器件和系統(tǒng)設(shè)計(jì)方案。 |
|
|
單片機(jī)源程序:
- //-----------------------------------------------------------------------
- //功能說(shuō)明:使用DS18B20測(cè)量室內(nèi)溫度,并將它顯示在1602液晶上。 核心:AT89S52
- //連接框圖: ___________________
- #include <reg52.h>
- //端口及函數(shù)聲明---------------------------------------------------------
- sbit LCD_RS=P1^0; //片選信號(hào)
- sbit LCD_RW=P1^1; //讀寫信號(hào)
- sbit LCD_E=P1^2; //使能信號(hào)
- sbit DQ = P2^2;
- sbit BEEP=P1^3; //高電平亮燈,超過(guò)設(shè)定值
- sbit RED = P2^0;
- sbit GREEN = P2^1;
- sbit Key_2 = P1^4; //按一次出現(xiàn)H 30,可以進(jìn)行上限溫度設(shè)置 按兩次出現(xiàn)L 20,可以進(jìn)行下限溫度設(shè)置 按第三次恢復(fù)溫度顯示
- sbit Key_3 = P1^5; //增加鍵,可以對(duì)上限溫度或下限溫度進(jìn)行增大調(diào)整
- sbit Key_4 = P1^6; //減小鍵,可以對(duì)下限溫度或下限溫度進(jìn)行減小調(diào)整
- #define LCD_DB P0 //LCD1602數(shù)據(jù)信號(hào)
- #define LocationX 0 //橫排的位置,即X得坐標(biāo)值 取值范圍0~15
- #define LocationY 1 //豎排的位置,即Y得坐標(biāo)值 取值范圍為 2,1
- unsigned char code dis_char[]={"Temperature is"};
- unsigned char code dis_char1[]={"Htemp= C "};
- unsigned char code dis_char2[]={"Ltemp= C "};
- //LCD1602函數(shù)定義
- void LCD_init(void); //LCD1602初始化函數(shù)
- void LCD_write_command(unsigned char command); //LCD1602寫指令函數(shù)
- void LCD_write_data(unsigned char dat); //LCD1602寫數(shù)據(jù)函數(shù)
- void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat); //在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-15),y(1-2)
- void delay_n40us(unsigned int n); //延時(shí)函數(shù)
- //DS18B20函數(shù)定義
- void delayms(unsigned int z); //延時(shí)(z)毫秒
- void SetReset(void); //產(chǎn)生復(fù)位信號(hào)
- void CheckReply(void); //檢測(cè)器件應(yīng)答信號(hào)
- bit MainReadBit(void); //從總線讀一個(gè)bit
- unsigned char MainReadByte(void); //從總線讀一個(gè)字節(jié)
- void MainWriteByte(unsigned char dat); //向總線寫一個(gè)字節(jié)
- void StartConvertTemperature(void); //啟動(dòng)一次溫度轉(zhuǎn)換
- unsigned long int ReadTemperature(void); //讀取溫度數(shù)據(jù)
- unsigned char H_temp = 50,L_temp = 20;
- unsigned char flag_h=0,flag_l=0,count_key2 = 0;
- unsigned char TempBuffer[5];
- unsigned char temp_value;
- //--------------------------------------------------------------------***
- //子函數(shù)-----------------------------------------------------------------
- //----------------------------------------
- //LCD1602 延時(shí)函數(shù)
- void delay_n40us(unsigned int n)
- {
- unsigned int i;
- unsigned char j;
- for(i=n;i>0;i--)
- for(j=0;j<2;j++);
- }
- //----------------------------------------
- //LCD1602液晶初始化函數(shù)
- void LCD_init(void)
- {
- LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
- LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
- LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7 切記要寫三遍!。。
- LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
- LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
- LCD_write_command(0x01);//清除屏幕顯示
- delay_n40us(100); //清屏延時(shí)
- }
- //----------------------------------------
- //LCD1602寫命令函數(shù)
- void LCD_write_command(unsigned char dat)
- {
- LCD_DB=dat;
- LCD_RS=0;//指令
- LCD_RW=0;//寫入
- LCD_E=1; //使能
- LCD_E=0;
- delay_n40us(1);//寫命令延時(shí)
- }
- //----------------------------------------
- //LCD1602寫數(shù)據(jù)函數(shù)
- void LCD_write_data(unsigned char dat)
- {
- LCD_DB=dat;
- LCD_RS=1;//數(shù)據(jù)
- LCD_RW=0;//寫入
- LCD_E=1;//使能
- LCD_E=0;
- delay_n40us(1); //寫數(shù)據(jù)延時(shí)
- }
- //----------------------------------------
- //LCD1602顯示一個(gè)字符
- void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)
- {
- unsigned char address;
- if(y==1)
- address=0x80+x; //顯示在第一排的時(shí)候的x的地址
- else
- address=0xc0+x; //顯示在第二排的時(shí)候的x的地址
- LCD_write_command(address); //輸入地址
- LCD_write_data(dat); //輸入數(shù)據(jù)
- }
- //*****************************************
- //----------------------------------------
- //毫秒延時(shí)函數(shù)
- void delayms(unsigned int z)
- {
- unsigned int x,y;
- for(x = z ; x>0 ; x--)
- for(y = 110; y>0 ; y--);
- }
- /***********ds18b20子程序*************************/
- /***********ds18b20延遲子函數(shù)(晶振12MHz )*******/
- void delay_18B20(unsigned int i)
- {
- while(i--);
- }
- /**********ds18b20初始化函數(shù)**********************/
- void Init_DS18B20(void)
- {
- unsigned char x=0;
- DQ = 1; //DQ復(fù)位
- delay_18B20(8); //稍做延時(shí)
- DQ = 0; //單片機(jī)將DQ拉低
- delay_18B20(80); //精確延時(shí) 大于 480us
- DQ = 1; //拉高總線
- delay_18B20(14);
- x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
- delay_18B20(20);
- }
- /***********ds18b20讀一個(gè)字節(jié)**************/
- unsigned char ReadOneChar(void)
- {
- unsigned char i=0;
- unsigned char dat = 0;
- for (i=8;i>0;i--)
- {
- DQ = 0; // 給脈沖信號(hào)
- dat>>=1;
- DQ = 1; // 給脈沖信號(hào)
- if(DQ)
- dat|=0x80;
- delay_18B20(4);
- }
- return(dat);
- }
- /*************ds18b20寫一個(gè)字節(jié)****************/
- void WriteOneChar(unsigned char dat)
- {
- unsigned char i=0;
- for (i=8; i>0; i--)
- {
- DQ = 0;
- DQ = dat&0x01;
- delay_18B20(5);
- DQ = 1;
- dat>>=1;
- }
- }
- /**************讀取ds18b20當(dāng)前溫度************/
- void ReadTemp(void)
- {
- unsigned char a=0;
- unsigned char b=0;
- unsigned char t=0;
- Init_DS18B20();
- WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
- WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
- delay_18B20(100); // this message is wery important
- Init_DS18B20();
- WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
- WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
- delay_18B20(100);
- a=ReadOneChar(); //讀取溫度值低位
- b=ReadOneChar(); //讀取溫度值高位
- temp_value=b<<4;
- temp_value+=(a&0xf0)>>4;
- }
- void temp_to_str() //溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符顯示
- {
- TempBuffer[0]=temp_value/10+'0'; //十位
- TempBuffer[1]=temp_value%10+'0'; //個(gè)位
- TempBuffer[2]=0xdf; //溫度符號(hào)
- TempBuffer[3]='C';
- TempBuffer[4]='\0';
- }
- void display_1(void)
- {
- unsigned char j =0,ge=0,shi=0,bai=0;
- unsigned long int last = 0;
- int temp=0;
- for(j=0;j<14;j++)
- {
- LCD_disp_char(j,1,dis_char[j]);
- }
- ReadTemp(); //開(kāi)啟溫度采集程序
- temp_to_str(); //溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符
- // LCDDispString(0,1,TempBuffer);
- temp = (TempBuffer[0]-'0')*10+(TempBuffer[1]-'0');
- LCD_disp_char(5,2,(temp/10+48));
- LCD_disp_char(6,2,(temp%10+48));
- LCD_disp_char(8,2,0xdf);
- LCD_disp_char(9,2,'C');
-
- if(temp >H_temp)
- {
- BEEP = 0;
- RED=1;
- GREEN=0;
- }
- else if ( temp < L_temp)
- {
- BEEP=0;
- GREEN=1;
- RED=0;
- }
- else
- {
- BEEP = 1;RED=1;
- GREEN=1;
- }
- }
- void display_2(void)
- {
- unsigned char j =0;unsigned char ge=0,shi=0;
- for(j=0;j<16;j++)
- {
- LCD_disp_char(j,1,dis_char1[j]);
- LCD_disp_char(j,2,dis_char2[j]);
- }
- LCD_disp_char(11,1,0xdf); LCD_disp_char(11,2,0xdf);
- ge = H_temp%10;
- shi = H_temp/10;
- LCD_disp_char(7,1,(shi+48)); LCD_disp_char(8,1,(ge+48));
- ge = L_temp%10;
- shi = L_temp/10;
- LCD_disp_char(7,2,(shi+48)); LCD_disp_char(8,2,(ge+48));
- }
- void key_scan(void)
- {
- unsigned char ge=0,shi=0;
- P1 |= 0x80; //每次掃描前,先將接鍵盤的引腳口拉高
- if(Key_2 == 0) //同上,判斷第二個(gè)按鍵情況
- {
- delayms(10);
- if(Key_2 == 0)
- {
- // display_2();
- count_key2++;
- if(count_key2 == 1)
- {
- display_2();
- flag_h = 1;
- flag_l = 0;
- LCD_disp_char(15,1,35);
- }
- else if(count_key2 == 2)
- {
- display_2();
- flag_l = 1;
- flag_h = 0;
- LCD_disp_char(15,2,35);
- }
- else if(count_key2 == 3)
- {
- flag_l = 0;
- flag_h = 0;
- LCD_init();
- display_1();
- count_key2=0;
- }
- while(!Key_2);
- }
- }
- if(Key_3 == 0) //增加鍵
- {
- delayms(10);
- if(Key_3 == 0)
- {
- if(flag_h ==1)
- {
- H_temp++;
- ge = H_temp%10;
- shi = H_temp/10;
- LCD_disp_char(7,1,(shi+48));
- LCD_disp_char(8,1,(ge+48));
- }
- else if(flag_l == 1)
- {
- L_temp++;
- ge = L_temp%10;
- shi = L_temp/10;
- LCD_disp_char(7,2,(shi+48));
- LCD_disp_char(8,2,(ge+48));
- }
-
- while(!Key_3);
- }
- }
- if(Key_4 == 0) //減少鍵
- {
- delayms(10);
- if(Key_4 == 0)
- {
- if(flag_h ==1)
- {
- H_temp--;
- ge = H_temp%10;
- shi = H_temp/10;
- LCD_disp_char(7,1,(shi+48));
- LCD_disp_char(8,1,(ge+48));
- }
- else if(flag_l == 1)
- {
- L_temp--;
- ge = L_temp%10;
- shi = L_temp/10;
- LCD_disp_char(7,2,(shi+48));
- LCD_disp_char(8,2,(ge+48));
- }
-
- while(!Key_4);
- }
- }
- }
- //--------------------------------------------------------------------***
- //主函數(shù)-----------------------------------------------------------------
- void main(void)
- {
- unsigned int ge=0,shi=0,bai=0;
- LCD_init();
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料打包下載:
11基于單片機(jī)的溫度控制系統(tǒng).rar
(3.88 MB, 下載次數(shù): 257)
2017-5-9 18:12 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|