




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 基于(jy)51單片機溫度自保護的直流電機控制系統一、實驗(shyn)目的1了解直流電機控制的基本(jbn)方法。2通過本實驗課程,進一步掌握單片機的基本原理、以及擴展微機系統多種接口的基本方法,具有基于微機和單片機系統進行軟硬件綜合設計和實現的能力。 3了解微機系統的基本軟硬件結構,熟悉和掌握單片機系統串行口、并行口、定時器/計數器、中斷和LCD液晶顯示接口等一些基本芯片的使用方法,掌握基于89C51系列單片機指令系統的匯編語言程序設計或C語言程序設計和調試方法。 二、實驗原理和內容本系統使用到的硬件模塊有:LCD12864M液晶、簡單I/O、DS18B20溫度測控、蜂鳴器、直流電機、PW
2、M電壓功放器、LED指示燈等。8051單片機是標準的40引腳雙列直插式集成電路芯片,P0.0P0.7 P0口8位雙向口線(在引腳的3932號端子)。 P1.0P1.7 P1口8位雙向口線(在引腳的18號端子)。P2.0P2.7 P2口8位雙向口線(在引腳的2128號端子)。P3.0P3.7 P3口8位雙向口線(在引腳的1017號端子)。 本實驗通過利用定時器T0,控制IO口輸出高電平和低電平的時間,產生PWM方波來控制直流電機轉速。通過DS18B20溫度測控讀取當前溫度,如果在電機運轉過程中,溫度超過警報溫度,則電機停止旋轉。下面簡要的介紹下本系統的各個模塊:DS18B20是DALLAS生產的
3、一線制串行接口數字式溫度計。它的溫度測量范圍是-55C125C,-10C85C內誤差為正負0.5C;912位轉換精度,轉換時間100ms750ms,通常為500ms。本系統利用DS18B20對電機溫度進行實時的模擬檢測采集。LCD12864M是將液晶顯示器件、連接件、集成電路、背光源結構裝配在一起的組件。它的分辨率為12864,可顯示圖形或4行共32個1616點陣的漢字,并且內置8192個1616點陣的漢字庫、128個字符、64256點陣的顯示RAM。12864M與單片機之間使用串行接口方式(PSB=0),RS(CS)為串行的片選信號,R/W(SID)為串行數據口,E(CLK)為串行同步時鐘。
4、串行數據傳送一幀分三個字節:串行控制指令、數據的高4位和數據的低4位。PWM是通過定時器T0,控制IO口輸出(shch)高電平的時間TH和低電平的時間TL,其占空比為TH/(TH+TL)。LED指示燈鏈接P2口,當P2位口輸出低電平時,指示燈電亮,用以指示速度檔。當溫度超過警報溫度時,P2反復(fnf)輸出高電平和低電平,指示燈閃爍報警。蜂鳴器接P17口,當溫度超過警報(jngbo)溫度時,P17輸出低電平,蜂鳴器警報。三、實驗設備和軟件平臺硬件:實驗箱(一臺)、示波器(一臺)、單片機仿真器(一臺)、連接線(若干)軟件:星研集成環境軟件四、實驗各模塊連接結構1、系統的總體框架圖:80C51LC
5、D顯示溫度DS18B20簡單I/O撥碼開關LED燈蜂鳴器PWM功放器直流電機2、實驗(shyn)連線:LCD液晶(yjng): CSP10 SIDP11 SCLKP12 PSBP13撥碼開關(kigun):P0LED燈: P2蜂鳴器: P17PWM: P16溫度DS18B20: P35五、實驗注意事項及總結在本系統的調試完善過程中,發現了不少的問題,主要有:1、在調試時,要把P2調為I/O模式。2、晶振要設置為12MHZ。3、不要帶電操作實驗箱。4、不能存太多全局變量,會使51單片機內部RAM不夠,導致地址溢出,程序出錯。5、各種芯片初始化要十分注意,特別是溫度DS18B20的初始化過程中不能
6、有中斷出現,而步進電機是需要定時中斷來定時驅動的,很難讓它們不互相影響,這也是在實驗中為什么有時會出現溫度很大或為零的原因。最好的解決方法就是不使用中斷。六、附錄實驗程序/ 頭文件#include#include#include#include /*接線說明*/* 液 晶: CSP10 SIDP11 SCLKP12 PSBP13 調速檔撥碼開關: P0 指示燈: P2 蜂鳴器: P17*/ 宏定義#define uchar unsigned char#define uint unsigned int/ 函數(hnsh)聲明void LCDString(unsigned char *pStr);
7、void W_1byte(unsigned char RW, unsigned char RS, unsigned char W_data) ;void Alarm(void);/ 警報(jngbo)溫度大小定義#define TEMPERATURE_ALARM 21.0/ 液晶(yjng)接口 sbit CS = P10;sbit SID = P11;sbit SCLK = P12; sbit PSB = P13;/ 溫度/TOUT接T1,T1口即為P3.5sbit DQ=P35;unsigned int T; /溫度測量 float radio; /占空比unsigned char tim
8、eH=0 x3c,timeL=0 xb0;unsigned int flag0; /PWM標志位unsigned int flag1; /溫度警報標志,1for超過/ 蜂鳴器sbit Beeper = P17;/ 直流電機CTRL接功放E2的OUT(OUT1),功放E2的IN(IN1)接P1.6sbit Dianji = P16;/ 液晶顯示器顯示的內容code unsigned char lcd_data80= Motor Control;code unsigned char lcd_data88=ALM 溫度: 21.0;/ 存儲測量溫度值unsigned char Temp_Value=
9、0 x00,0 x00; / 延時 void delay(unsigned char i)while(i-); / 溫度測量模塊/ 初始化unsigned char Init_DS18B20() unsigned char status;DQ = 1; delay(8); DQ = 0; delay(90); DQ = 1;delay(8); status = DQ;delay(100);DQ = 1; return status;/ 讀字節(z ji)unsigned char ReadOneByte() unsigned char i,dat = 0;DQ = 1;_nop_();for(
10、i = 0;i = 1; DQ = 1;_nop_();_nop_();if(DQ) dat |= 0 x80;delay(30);DQ = 1; return dat; / 寫字節(z ji)void WriteOneByte(unsigned char dat) unsigned char i;for(i = 0;i = 1; / 讀取溫度(wnd)值void Read_Temperature() if(Init_DS18B20() != 1); WriteOneByte(0 xcc);WriteOneByte(0 x44); Init_DS18B20(); delay(100);Writ
11、eOneByte(0 xcc);WriteOneByte(0 xbe);Temp_Value0 = ReadOneByte();Temp_Value1 = ReadOneByte(); / 溫度值顯示及警報操作void Display_Temperature() bit flag;uchar DisplayBuf20;uchar NotAlarmBuf20;uchar lsb,msb;uint temp,t1;float t2;msb = Temp_Value1; / Sign byte + lsbitlsb = Temp_Value0; / Temp data plus lsbif(msb
12、& 0 xF0) 0) /判斷(pndun)是否為負溫度flag = 1;elseflag = 0;if(flag) /如果(rgu)為負溫度取反加1temp = (uint)msb 8) | lsb;temp = temp + 1;msb = temp / 256;lsb = temp % 256;t1 = msb 4); / t1為溫度值的整數(zhngsh)部分t2 = (lsb & 0 x0F) * 0.0625 + t1;T=t1;/ 液晶顯示當前溫度值sprintf(DisplayBuf, 電機溫度: %2.1f0, t2);W_1byte(0,0,0 x88); LCDStrin
13、g(DisplayBuf);/ 判斷溫度是否超過警報值if(t2 = TEMPERATURE_ALARM)Alarm(); / 警報函數flag1=1;else flag1=0;/ 溫度正常情況操作,液晶顯示,電機轉動,蜂鳴器關閉sprintf(NotAlarmBuf,設定占空比:%2.0f%,radio);W_1byte(0,0,0 x98);LCDString(NotAlarmBuf);Beeper=1;/ LCD液晶顯示/函數作用:負責向SID串行寫入8個bit位 void Write_8bits(unsigned int W_bits) unsigned int i; unsigned
14、 int Temp_data;for(i = 0; i 8; i+) Temp_data = W_bits;Temp_data = i;if(Temp_data & 0 x80) = 0) /bit7 is zero SID = 0;_nop_(); SCLK = 1;_nop_();_nop_();SCLK = 0;_nop_();SID = 0; else /bit7 is one SID = 1; _nop_(); SCLK = 1; _nop_(); _nop_(); SCLK = 0; _nop_(); SID = 0; /函數作用(zuyng):寫一個字節的數據到12864液晶(y
15、jng),包括指令和數據 /說 明:RW=1,從液晶(yjng)讀數據到MCU;RW=0,寫一個數據到液晶; / (一般RW都設為0,即只向液晶寫數據,不讀數據) / RS=1,寫入的是數據;RS=0,寫入的是指令; / 一般模式:RW=0,RS=1;寫數據 / RW=0,RS=0;寫指令void W_1byte(unsigned char RW, unsigned char RS, unsigned char W_data) unsigned int H_data,L_data,S_ID = 0 xf8; /11111RWRS0 if(RW = 0) S_ID &= 0 x04; else
16、/if(RW=1) S_ID |= 0X04; if(RS = 0) S_ID &= 0 x02;else /if(RS=1) S_ID |= 0X02; H_data = W_data; H_data &= 0 xf0; /屏蔽低4位的數據 L_data = W_data; /xxxx0000格式(g shi)L_data &= 0 x0f; /屏蔽(pngb)高4位的數據(shj) L_data = 4; /xxxx0000格式 CS = 1; Write_8bits(S_ID); /發送S_ID Write_8bits(H_data); /發送H_data Write_8bits(L_d
17、ata); /發送L_data CS = 0; / 向液晶屏寫入字符串void LCDString(unsigned char *pStr)for(; *pStr != 0; pStr+)W_1byte(0,1, *pStr); / LCD初始化void LCD_init(void) unsigned char cmd; cmd=0 x30; /功能設置 8位數據,基本指令 W_1byte(0,0,cmd); delay(2); cmd=0 x0C; /顯示狀態 ON,游標OFF,反白OFF W_1byte(0,0,cmd); /寫指令 delay(2); cmd=0 x01; /清除顯示 W
18、_1byte(0,0,cmd); /寫指令 delay(2); cmd=0 x02; /地址歸位W_1byte(0,0,cmd); /寫指令 delay(2); cmd=0 x80; /設置DDRAM地址 W_1byte(0,0,cmd); /寫指令 delay(2); /延時 / LCD初始化void init_LCD() /SP = 0X60;/* 指針地址 CS = 0; SCLK = 0; SID = 0; PSB=0; LCD_init(); / 將一、二行字符串寫入LCDvoid LCD_mess_display() unsigned char i; W_1byte(0,0,0 x
19、80); _nop_();for(i=0;lcd_data80i!=0;i+) W_1byte(0,1,lcd_data80i); W_1byte(0,0,0 x90); for(i=0;lcd_data88i!=0;i+) W_1byte(0,1,lcd_data88i); / LCD顯示(xinsh)void DisplayLcd()LCD_mess_display(); delay(100); / LCD顯示(xinsh)溫度 void ShowTemperature() Read_Temperature(); Display_Temperature(); / 溫度(wnd)警報void
20、 Alarm(void)/uchar i;uchar AlarmBuf20;/LED_GREEN = 1; /LED_RED = 0;sprintf(AlarmBuf,智能調速:%2.0f%,radio); W_1byte(0,0,0 x98); LCDString(AlarmBuf);Beeper=0;/*T0定時,T1計數*void Time_Init()TMOD=0 x51; /工作方式2EA=1; /使能ET0=1; /開發中斷,可到中斷程序執行/ET1=1;TL0=timeH;TH0=timeL; /時間=(216-TH*28-TL)*1usTR0=1; /開TO定時flag0=1;
21、 /TH1=0 xff;TL1=0 xff; /1ms中斷/TR1=1;/ 主函數main() unsigned int i;/LED_GREEN = 0; Time_Init(); /定時器計數器初始化init_LCD(); /*輸出(shch)作品信息*/*sprintf(biaoti1,廈門大學(sh mn d xu)自動化系); W_1byte(0,0,0 x80); LCDString(biaoti1);sprintf(biaoti2,陳福feng); W_1byte(0,0,0 x90); LCDString(biaoti2);sprintf(biaoti3,23220131153
22、339); W_1byte(0,0,0 x88); LCDString(biaoti3);sprintf(biaoti4,2013-12-30); W_1byte(0,0,0 x98); LCDString(biaoti4);delay(0 xef);delay(0 xef);*/*DisplayLcd(); /顯示(xinsh)前兩行while(1) if(flag1=0) /沒有警報 switch(P0) case 0 x01:timeH=0 xe0;timeL=0 xe0;radio=12.5;break; case 0 x03:timeH=0 xc0;timeL=0 xc0;radio
23、=25.0;break; case 0 x07:timeH=0 xa0;timeL=0 xa0;radio=37.5;break; case 0 x0f:timeH=0 x80;timeL=0 x80;radio=50.0;break; case 0 x1f:timeH=0 x60;timeL=0 x60;radio=62.5;break; case 0 x3f:timeH=0 x40;timeL=0 x40;radio=75.0;break; case 0 x7f:timeH=0 x20;timeL=0 x20;radio=87.5;break; case 0 xff:timeH=0 x00;timeL=0 x00;radio=100;break; default: timeH=0 xff;timeL=0 xff;radio=00;break; P2=P0; /P2指示燈,表示檔數 else i=T-TEMPERATURE_ALARM; /智能降速 switch(i) case 1:timeH=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畜產品加工市場分析考核試卷
- 放射性礦物選礦的放射性物質在線監測考核試卷
- 2025年注會復習計劃的重要性試題及答案
- 廣藝藝考模擬試題及答案
- 2023年中國鐵塔夏季校園招聘709人筆試參考題庫附帶答案詳解
- 空調施工組織方案范本
- 塑膠場地在使用中的清潔與保養考核試卷
- 證券從業資格證突破點試題及答案
- 疫情防控期間的施工方案
- 2025年證券從業資格證實施計劃試題及答案
- 《工會會計制度》管理系統升級及使用
- 醫院患者診療信息安全風險評估和應急工作機制制定應急預案XX醫院患者診療信息安全風險應急預案
- 計算機科學與技術本科生畢業論文——基于Web的醫院預約掛號系統的設計與實現
- 老年智能手環產品需求說明書(PRD)
- T∕AOPA 0018-2021 直升機臨時起降場選址與建設規范
- 高考英語高頻688詞匯(核心版本)
- 七八年級人教古詩詞集錦
- 涪陵榨菜集團盈利能力分析工商管理專業
- 35kv配電系統繼電保護方案設計(共33頁)
- 中國收藏家協會個人會員入會申請表
- 醫院處方箋模板
評論
0/150
提交評論