單片機應用系統設計說明書_第1頁
單片機應用系統設計說明書_第2頁
單片機應用系統設計說明書_第3頁
單片機應用系統設計說明書_第4頁
單片機應用系統設計說明書_第5頁
已閱讀5頁,還剩16頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、  單片機應用系統設計說明書  設計題目:溫度控制系統設計自動化學院一、系統設計小組工作分工序號成員工作分工1LCD1602顯示218b20溫度檢測3二系統設計目標我的設計是基于STC98C52系列單片機的溫度控制系統,以DS18B20作為溫度檢測元件,實時監測溫度;以LCD1602顯示實時溫度、預設溫度以及PID調節參數的設定。三系統方案設計1. 單片機選型STC89C52RC單片機是宏晶科技推出的新一代高速/低功耗/超強抗干擾的單片機,指令代碼完全兼容傳統 8051 單片機,12 時鐘/機器周期和 6 時鐘/機器周期可以任意選擇。單片機主要特性如下:

2、 1. 增強型 8051 單片機,6 時鐘/機器周期和 12 時鐘/機器周期可以任意選擇,指令代碼完全兼容傳統 8051. 2. 工作電壓:5.5V3.3V(5V 單片機)/3.8V2.0V(3V 單片機) 3. 工作頻率范圍:040MHz,相當于普通 8051 的 080MHz,實際工 作頻率可達 48MHz 4. 用戶應用程序空間為 8K 字節 5. 片上集成 512 字節 RAM 6. 通用 I/O 口 (32 個) 復位后為: , P1/P2/P3/P4 是準雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻。 7. ISP(

3、在系統可編程)/IAP(在應用可編程) ,無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數秒即可完成一片 8. 具有 EEPROM 功能 9. 具有看門狗功能 10. 共 3 個 16 位定時器/計數器。即定時器 T0、T1、T2 11. 外部中斷 4 路,下降沿中斷或低電平觸發電路,Power Down 模式可 由外部中斷低電平觸發中斷方式喚醒 12. 通用異步串行口(UART) ,還可用定時器軟件實現多個 UART 13. 工作溫度范圍:-40+85(工業級)/075(商業級) P0 端口(P0.0P0.7 P0.7,3932 引腳)

4、 :P0 口是一個漏極開路的 8 位雙向 I/O 口。作為輸出端口,每個引腳能驅動 8 個 TTL 負載,對端口 P0 寫入 每個引腳能驅動 寫入“1”時,可 以作為高阻抗輸入。在訪問外部程序和數據存儲器時 在訪問外部程序和數據存儲器時,P0 口也可以提供低 8 位 地址和 8 位數據的復用總線 位數據的復用總線。此時,P0 口內部上拉電阻有效。在 Flash ROM 編 在 程時,P0 端口接收指令字節 端口接收指令字節;而在校驗程序時,則輸出指令字節 則輸出指令字節。驗證時,要求外接上拉電阻。 P1 端口(P1.0P1.7,18 引腳):P1口是一個帶內部上拉電阻的8位雙向 I/O口。P1

5、 的輸出緩沖器可驅動(吸收或者輸出電流方式)4個TTL 輸入。對端口寫入 1 時,通過內部的上拉電阻把端口拉到高電位,這是可用作輸入口。P1口作輸入口使用時,因為有內部上拉電阻,那些被外部拉低的引腳會輸出一個電流 。 P2 端口(P2.0P2.7,2128 引腳):P2口是一個帶內部上拉電阻的8位雙 向 I/O 端口。P2 的輸出緩沖器可以驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫入 1 時,通過內部的上拉電阻把端口拉到高電平,這時可用作輸入口。P2 作為輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會 輸出一個電流(I) 。 P3 端口(P3.0P3.7,1017 引腳

6、) :P3 是一個帶內部上拉電阻的 8 位雙向 I/O 端口。P3 的輸出緩沖器可驅動(吸收或輸出電流方式)4 個 TTL 輸入。對端 口寫入 1 時,通過內部的上拉電阻把端口拉到高電位,這時可用作輸入口。P3 做輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會輸入一個電流。RST(9 引腳) :復位輸入。當輸入連續兩個機器周期以上高電平時為有效, 用來完成單片機單片機的復位初始化操作。看門狗計時完成后,RST 引腳輸出 96 個晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功 能無效。DISRTO 默認狀態下,復位高電平有效。 ALE/ R

7、OG (30 引腳) 地址鎖存控制信號 : (ALE) 是訪問外部程序存儲器時, 鎖存低 8 B位地址的輸出脈沖。在 Flash 編程時,此引腳( ROG)也用作編程輸入 脈沖。 2.溫度傳感器DS18B20單線數字溫度傳感器。提供計9位(二進制)溫度讀數,指示器件溫度。信息經過單線接口送入DS18B20送出,因此從主機CPU到DS18B20僅需一條線(和地線)。DS18B20的電源可以有數據本身提供而不需要外部電源。以為每一個DS18B20在出廠時已經給定了唯一的序號,因此任意多個DS18B20可以放在同一條單線總線上。這允許在許多不同的地方放置溫度敏感器件DSl820的測量范圍從-55到+

8、125增量值為0.5可在l s(典型值)內把溫度變換成數字。DSl8B20中還有用于貯存測得的溫度值的兩個8位存貯器RAM編號為0號和1號。1號存貯器存放溫度值的符號,如果溫度為負(),則1號存貯器8位全為1,否則全為0。0號存貯器用于存放溫度值的補碼,LSB(最低位)的“1”表示0.5將存貯器中的二進制數求補再轉換成十進制數并除以2就得到被測溫度值(-55125)。每只DS18B20都可以設置成兩種供電方式,即數據總線供電方式和外部供電方式。采取數據總線供電方式可以節省一根導線,但完成溫度測量的時間較長;采取外部供電方式則多用一根導線,但測量速度較快。3.液晶顯示1602液晶,它是一種專門用

9、來顯示字母、數字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義CGRAM,顯示效果也不好)。1602LCD是指顯示的內容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數字)。管腳功能:第1腳:VSS為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。第4腳:RS為

10、寄存器選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執行指令。第714腳:D0D7為8位雙向數據端。第15腳背光正極。第16腳背光負極。四硬件電路設計及描述五軟件設計及描述1.主程序流程圖:單片機上電,LCD1602液晶初始化,定時器T0、T1初始化,之后進入循環函數,鍵盤掃描;讀取溫度;送去LCD1602顯示。定時器T0 2秒終端一次,調用PID程序,即每兩秒進行一次PID運算。定時器T1為PWM波形生成函數。2、源程序代碼

11、#include<reg52.h>#include<intrins.h> #define uchar unsigned char#define uint unsigned intsbit DQ=P23;/ds18b20與單片機連接口sbit RS=P25;/1602sbit RW=P26;/1602sbit EN=P27;/1602sbit out=P17;unsigned char code str1="T . "unsigned char code str2="t . "unsigned char code str3=&quo

12、t;P . I . D . "char data disdata5;uint tvalue;/溫度值 k 為return返回值uchar k,flag;uint a;/a timer1定時時間參數uchar tflag;/溫度正負標志uchar setflag;/模式標志uchar flagdat;char num,bai,shi,ge,xiaoshu,Kp_ge,Kp_xiao,Ki_ge,Ki_xiao,Kd_ge,Kd_xiao;sbit setkey=P32;/模式鍵1sbit up_key=P33; /加鍵sbit down_key=P34;/減鍵uchar count,E

13、kFlag3; / 輸出時間單位計數器uint Ek3,RK,CK,Uk,KP,KI,KD; /RK設定值;CK實際值;Uk輸出電壓/*函數聲明*/ void PIDOutput ();void PIDOperation (); /*PID調節程序*/void delay1ms( uchar ms)/延時1毫秒(不夠精確的) uchar i,j;for(i=0;i<ms;i+) for(j=0;j<100;j+);void PIDOperation()uchar Temp3;KP=Kp_ge+0.1*Kp_xiao;KI=Ki_ge+0.1*Ki_xiao;KD=Kd_ge+0.1

14、*Kd_xiao;RK=1000*bai+100*shi+10*ge+xiaoshu;CK=tvalue;if( RK > CK ) /設定值大于實際值否?if( RK - CK > 100 ) /偏差大于10否? Uk = 100; /偏差大于10為上限幅值輸出(全速加熱) else Temp0 = RK - CK; /偏差<=10,計算E(k)Ek2 = Ek1; Ek1 = Ek0; Ek0 = Temp0;Uk=KP*Ek0-KI*Ek1+KD*Ek2; else Uk=0; void PIDOutput (void) static char i;i=Uk;if(i=

15、100) ET1=0;TR1=0;out=1; if(i=0)ET1=0;TR1=0;out=0;if(i<100)&&(i>0)/如定時中斷為40MS,40MS*5=0.2S(輸出時間單位),加熱周期20S(100等份) /每20S PID運算一次 ET1=1; TR1=1; a=655*i+3*i/10;/*lcd1602程序*/void wr_com(unsigned char com)/寫指令/ delay1ms(1); RS=0; RW=0; EN=0; P0=com; delay1ms(1); EN=1; delay1ms(1); EN=0;void w

16、r_dat(unsigned char dat)/寫數據/ delay1ms(1); RS=1; RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0;void lcd_init()/初始化設置/delay1ms(15);wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5);void display(unsigned char *p)

17、/顯示/while(*p!='0')wr_dat(*p);p+;delay1ms(1);init_play()/初始化顯示 lcd_init(); wr_com(0x80);display(str1);wr_com(0x88);display(str2);wr_com(0xc0);display(str3);num=0;bai=0;shi=0;ge=0;xiaoshu=0;return(k);/*溫度按鍵程序*/void key()if(setkey=0)delay1ms(100);if(setkey=0)setflag+;if(setflag=12)setflag=0;whi

18、le(setkey=0);if(up_key=0)&&(setflag!=0) delay1ms(100); if(up_key=0) num+;if(num=10)num=0;switch(setflag)case 0: ;break;case 1: if(num%2=0) wr_com(0x89);wr_dat(0x20); elsewr_com(0x89);wr_dat(0x2d);break;case 2: if(num=0)wr_com(0x8a);wr_dat(0x20);bai=num;elsewr_com(0x8a);wr_dat(num+0x30);bai=n

19、um;break;case 3: if(bai=0)&&(num=0)wr_com(0x8b);wr_dat(0x20);shi=num;elsewr_com(0x8b);wr_dat(num+0x30);shi=num;break;case 4: wr_com(0x8c);wr_dat(num+0x30);wr_com(0x8d); wr_dat(0x2e);/顯示小數點 ge=num;break;case 5: wr_com(0x8e);wr_dat(num+0x30);xiaoshu=num;break;case 6: wr_com(0xc1);wr_dat(num+0x

20、30);Kp_ge=num;wr_com(0xc2); wr_dat(0x2e);/顯示小數點break;case 7: wr_com(0xc3);wr_dat(num+0x30);Kp_xiao=num;break;case 8: wr_com(0xc6);wr_dat(num+0x30);wr_com(0xc7); wr_dat(0x2e);/顯示小數點 Ki_ge=num;break;case 9: wr_com(0xc8);wr_dat(num+0x30);Ki_xiao=num;break;case 10: wr_com(0xcb);wr_dat(num+0x30);Kd_ge=nu

21、m;wr_com(0xcc); wr_dat(0x2e);/顯示小數點break;case 11: wr_com(0xcd);wr_dat(num+0x30);Kd_xiao=num;break; if(down_key=0)&&(setflag!=0) delay1ms(100); if(down_key=0) num-;if(num<0)num=9;switch(setflag)case 0: ;break;case 1: if(num%2=0) wr_com(0x89);wr_dat(0x20); elsewr_com(0x89);wr_dat(0x2d);brea

22、k;case 2: if(num=0)wr_com(0x8a);wr_dat(0x20);bai=num;elsewr_com(0x8a);wr_dat(num+0x30);bai=num;break;case 3: if(bai=0)&&(num=0)wr_com(0x8b);wr_dat(0x20);shi=num;elsewr_com(0x8b);wr_dat(num+0x30);shi=num;break;case 4: wr_com(0x8c);wr_dat(num+0x30);wr_com(0x8d); wr_dat(0x2e);/顯示小數點 ge=num;brea

23、k;case 5: wr_com(0x8e);wr_dat(num+0x30);xiaoshu=num;break;case 6: wr_com(0xc1);wr_dat(num+0x30);Kp_ge=num;wr_com(0xc2); wr_dat(0x2e);/顯示小數點break;case 7: wr_com(0xc3);wr_dat(num+0x30);Kp_xiao=num;break;case 8: wr_com(0xc6);wr_dat(num+0x30);wr_com(0xc7); wr_dat(0x2e);/顯示小數點 Ki_ge=num;break;case 9: wr_

24、com(0xc8);wr_dat(num+0x30);Ki_xiao=num;break;case 10: wr_com(0xcb);wr_dat(num+0x30);Kd_ge=num;wr_com(0xcc); wr_dat(0x2e);/顯示小數點break;case 11: wr_com(0xcd);wr_dat(num+0x30);Kd_xiao=num;break; /*ds1820程序*/void delay_18B20(unsigned int i)/延時1微秒 while(i-);void ds1820rst()/*ds1820復位*/ unsigned char x=0;D

25、Q = 1; /DQ復位delay_18B20(4); /延時DQ = 0; /DQ拉低delay_18B20(100); /精確延時大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd()/*讀溫度數據*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號 dat>>=1; DQ = 1; /給脈沖信號 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar

26、wdata)/*寫數據*/unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; read_temp()/*讀取溫度值并轉換*/uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號*/ds1820wr(0x44);/*啟動溫度轉換*/ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號*/ ds1820wr(0xbe);/*讀取溫度*/ a=ds1820rd();b=d

27、s1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1; tvalue=tvalue*(0.625);/溫度值擴大10倍,精確到1位小數return(tvalue);/*/void ds1820disp()/溫度值顯示 uchar flagdat; disdata0=tvalue/1000+0x30;/百位數 disdata1=tvalue%1000/100+0x30;/十位數 disdata2=tvalue%100/10+0x

28、30;/個位數 disdata3=tvalue%10+0x30;/小數位 if(tflag=0) flagdat=0x20;/正溫度不顯示符號 else flagdat=0x2d;/負溫度顯示負號:- if(disdata0=0x30) disdata0=0x20;/如果百位為0,不顯示 if(disdata1=0x30) disdata1=0x20;/如果百位為0,十位為0也不顯示 wr_com(0x81); wr_dat(flagdat);/顯示符號位 wr_com(0x82); wr_dat(disdata0);/顯示百位 wr_com(0x83); wr_dat(disdata1);/

29、顯示十位 wr_com(0x84); wr_dat(disdata2);/顯示個位 wr_com(0x85); wr_dat(0x2e);/顯示小數點 wr_com(0x86); wr_dat(disdata3);/顯示小數位 /*加熱程序*/void init_time0()TMOD=0x11;/T0初始化方式1,定時TH0=(65536-50000)/256;/TH0,TL0裝入定時50mS的初值TL0=(65536-50000)%256;TH1=(65536-20000)/256;TL0=(65536-20000)%256;TR0=1;/啟動T0工作ET0=1;/允許T0溢出中斷EA=1

30、;void timer0_isr(void) interrupt 1 static uchar s=0;/秒計數器TH0=(65536-50000)/256;/TH0,TL0裝入定時50mS的初值TL0=(65536-50000)%256;s+;if(s=40)s=0;PIDOperation (); if(RK=0)&&(RK!=CK)/剛開始上電空操作;elsePIDOutput ();TR1=1; void timer1_isr(void) interrupt 3if(flag=1)flag=0;out=1;TH1=(65536-a)/256;/TH0,TL0裝入定時50

31、mS的初值TL1=(65536-a)%256; else flag=1;out=0;TH1=a/256;/TH0,TL0裝入定時50mS的初值TL1=a%256;/*主程序*/void main() out=0;init_play(); /初始化顯示init_time0(); /定時器T0初始化 while(1) key(); /鍵盤溫度掃描read_temp(); /讀取溫度 ds1820disp();/顯示 六設計調試過程及結果1.調試結果2.結果分析 在運行仿真結果時通過改變溫度傳感器DS18B20的溫度,然后調用各種子函數,可以改變液晶顯示1602的第二行顯示數據,說明程序編寫正確。

32、3.系統設計電路的特點和方案的優缺點 我們組設計的數字溫度計系統知識運用簡單的AT89S52芯片的I/O口傳輸功能,通過幾個小的讀數據、傳遞數據、延時子函數實現溫度的讀取傳輸功能,是比較簡單,容易實現的,所以我們的系統只是實現了一些簡單的功能,系統整體來說比較簡易,但好像這個溫度計沒有多大的應用價值,所以我們后續分析覺得這個系統可以加一個溫度復位系統提高AT89S52芯片的功能價值,也提高數字溫度計的智能價值,還可以增加一個報警子函數,實現智能數字溫度計更高的應用價值七系統設計體會1.心得體會李鍵: 本次設計是基于STC89C52單片機的溫度調節系統設計。剛開始打算用數碼管顯示實時溫度、預設溫

33、度以及PID調節參數顯示,可是由于數碼管的位數限制顯示不方便,就決定采用LCD1602進行顯示,而且需要調節電阻來調節背光,使顯示的字符更加清晰。PID的參數和預設溫度是通過獨立按鍵實現的。還有在編寫數字PID程序時,定義的字符占用的空間太大導致超出了單片機的容量,通過降低精度的要求將變量位數定義減小,以達到減小占用的目的。由于整個系統的程序很長,導致單片機運行有時混不穩定,反映會很慢,有些參數的調節會出現顯示與實際輸入值不相符的現象。通過本次設計了解的更多關于單片機的知識,對書本上學到的東西進行了強化。1.心得體會禹鑫:通過這次對數字溫度計的設計與制作,讓我了解了設計電路的程序,也讓我了解了關于數字溫度計的原理與設計理念,要設計一個電路總要先用仿真仿真成功之后才實際接線的。但是最后的成品卻不一定與仿真時完全一樣,因為,再實際接線中有著各種各樣的條件制約著。而且,在仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以,在設計時應考慮兩者的差異,從中找出最適合的設計方法。通過這次學習,讓我對各種電路都有了大概的了解,所以說,坐而言不如立而行,對于這些電路還是應該自己動手實際操作才會有深刻理解。從這次的

溫馨提示

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

評論

0/150

提交評論