freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于pic系列單片機的改進型pid控制器設(shè)計(文件)

2025-07-06 16:51 上一頁面

下一頁面
 

【正文】 02LCD1602為工業(yè)字符型液晶顯示器,可以顯示2行16列共32個字符。接正電源時亮度最弱,接地時亮度最大。D0D7為8位雙向數(shù)據(jù)端表41 寄存器的選擇控制RSR/W操作說明00寫入指令寄存器(清除屏等)01都busy flag(DB7),以及讀取位址計數(shù)器(DB0~DB6)值10寫入數(shù)據(jù)寄存器(顯示各字型等)11從數(shù)據(jù)寄存器讀取數(shù)據(jù)表42 顯示地址1234567891011121314151600H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FH40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH
單總線(1~Wire Bus)采用單根信號線,傳輸數(shù)據(jù)是雙向的。因為只定義了一根信號線,所以必須采用嚴格的主從結(jié)構(gòu),只有當主機呼叫從機時,從機才能應(yīng)答。單片機與溫度傳感器之間的數(shù)據(jù)傳輸采用IC總線。 顯示模塊(LCD LED)輸入模塊有一個74ls244連接輸入按鍵,兩個按鈕分別用來設(shè)定增減溫度,雙刀雙擲開關(guān)用來選擇空調(diào)的狀態(tài)。再次,針對積分分離PID控制器,設(shè)計了基于PIC單片機的積分分離PID控制器。[3] 王蕾,[J].東南大學自動化所,2004,25(4)。同時,我還要感謝所有在大學期間給予我指導教學的各位老師,沒有平時的基礎(chǔ),我也不會將這次畢業(yè)設(shè)計完善至此。希望各位老師予以更正。ts=20。dsys=c2d(sys,ts,39。v39。u_3=0。y_2=0。ei=0。error(k)=rin(k)yout(k)。abs(error(k))=40 beta=。abs(error(k))=20 beta=。ki=。endif u(k)=110 u(k)=110。u_2=u_1。y_1=yout(k)。plot(time,rin,39。)。ylabel(39。plot(time,u,39。time(s)39。)。// XTAL_FREQ為外接晶振主頻,單位為MHzdefine XTAL_FREQ 4 unsigned int tmp[4]。 //向LCD寫指令void LCD_Write_Data( unsigned char ) 。 //向LCD輸出一個字符void LCD_Put_HEX( unsigned char ) 。 // LCD寫數(shù)據(jù)時序函數(shù) void delay15us(unsigned int x)。 //靜態(tài)數(shù)據(jù)長度為8個字符const char c_LCD_stB[]=00:00:00。unsigned char ge=0,shi=0,bai=0。 //清數(shù)據(jù)寄存器 DelayMS(5)。 //數(shù)據(jù)手冊要求等待時間大于100us LCD_DATA = 0x30 。 LCD_CMD_W_Timing()。 //數(shù)據(jù)手冊要求查忙信號或者等待時間超過40us LCD_Write_CMD(DISP_OFF)。 //數(shù)據(jù)手冊要求查忙信號或者等待時間超過40us LCD_Write_CMD(CLR_DISP)。 } //向LCD寫指令void LCD_Write_CMD( unsigned char LCD_CMD) { LCD_DATA= LCD_CMD。 LCD_DAT_W_Timing () 。 // 0表示命令字 NOP()。 NOP()。 // 1表示數(shù)據(jù) NOP()。 NOP()。 DelayMS(1) 。 Str ++ 。 if (Str_Temp != 0x00 ) { LCD_Write_Data(Str_Temp) 。 Temp_HEX = (HEX_Val 4) amp。 LCD_Write_Data(Temp_HEX) 。 else Temp_HEX += 0x30 。ms0。 while(state_DQ) { DQ_LOW()。 //延時61us if (DQ) state_DQ=1。 for(i=0。 data=1。 DQ_HIGH()。 //延時61us DQ_HIGH()。 for(i=0。 NOP()。 if (DQ==1) data=data|0x80。 //定義變量長整型,用于得到數(shù)碼管顯示的各個溫度位 unsigned char tmpA,tmpB。 //啟動DS18B20溫度轉(zhuǎn)換命令 reset()。 //讀內(nèi)部RAM 低八位溫度 tmpB=read_one_byte()。 tflag=1。 //十位 tmp[2]=(int)(temper%100)/10。//正溫度不顯示符號 else flagdat=0x2d。x0。 }void delay15us(unsigned int x) //x必須大于0{ do {x。 LCD_Write_Data(tmp[0]+39。 LCD_Write_Data(tmp[1]+39。 LCD_Write_Data(tmp[2]+39。 LCD_Write_Data(39。 LCD_Write_Data(tmp[3]+39。 // D口高四位輸入,低四位輸出 PORTD=0x00。 // 屏蔽低四位,防止干擾。 //把獲得的高四位鍵值送D口高四位輸出 asm(nop)。 //屏蔽key4L高四位,只保留低四位 if(key4L!=0x0F) //不相等說明不是抖動 { KeyM=key | key4L。 } else if(KeyM==0xeb) { i=3。 } else if(KeyM==0xdb) { i=7。 } else if(KeyM==0xbb) { i=11。 // 從第1行第0個字符位開始顯示 LCD_Puts_ROM( )。 // 從第0行第0個字符位開始顯示 LCD_Puts_ROM(c_LCD_str)。 setflagbai=0。 setflagbai=0。 setflagbai=1。 } else if(setflagshi==1) { shi=i。039。 TRISC0=0。 LED2=1。 //顯示 Counter: init()。 if(setflag==1) { LCD_Set_Cursor(1,0)。 LCD_Set_Cursor(1,1)。 LCD_Set_Cursor(1,2)。 LCD_Set_Cursor(1,3)。 LCD_Set_Cursor(1,4)。 } else if(i==12) { displayDS18B20()。 LED2=1。 LED2=0。* PIDout=kp*e(t)+ki*[e(t)+e(t1)+...+e(1)]+kd*[e(t)e(t1)]*============================================================================* 入口: 無* 出口: 無* 改變: PID_T_Run=加熱時間控制*****************************************************************************/void PID_Math(void){ signed long ee1。 Flag_PID_T_OK=0。 //計算一階偏差 //ee2 = PID_e02*PID_e1+PID_e2。 //偏差之和 if(PID_e_SUM 200) //積分最多累計的溫差 PID_e_SUM = 200。 if(PID_e_SUM 100) PID_e_SUM = 100。 } PID_Out += d_out。 //積分輸出 if(PID_e0 5) // { if(PID_e_SUM 150) PID_e_SUM = 150。 PID_Out = PID_kp*PID_e0+PID_kd*ee1。 if(ee1 500) ee1 = 500。 // PID_e0 = Temp_SetTemp_Now。 //偏差二階 signed long d_out。在偏差絕對值大于△e時,用PD算法,以改善動態(tài)品質(zhì)。 LED=0。 LED=1。039。.39。039。039。039。 keyscan()。 LCD_Set_Cursor(0,0)。 LED=0。 // 顯示百位字符 }void init(){ TRISC2=0。 } } } //LCD_Set_Cursor(0,12)。 } else if(KeyM==0x77) { i=16。 } else if(KeyM==0x7b) { i=15。 } else if(KeyM==0x7d) { i=14。 } else if(KeyM==0x7e) { i=13。 } else if(KeyM==0xb7) { i=12。 // 從第0行第0個字符位開始顯示 LCD_Puts_ROM(SET YOU TEMP)。 } else if(KeyM==0xbe) { i=9。 } else if(KeyM==0xde) { i=5。 //KeyM賦值為0表示無鍵按下,或者一次意外 } }}void keyscan(){ if(KeyM==0xee) { i=1。 // 讀取D口狀態(tài)送至變量key4L key4L=key4Lamp。 // 軟件消除抖動 TRISD=0x0F。 // 讀取D口狀態(tài)送至變量key key=keyamp。)。)。)。)。)。 }void displayDS18B20(){ get_temperature()。i }void delay1ms(unsigned int x) //延時1ms函數(shù){ unsigned char i。 temp= tmp[0]*100+tmp[1]*10+tmp[2]。//溫度值擴大10倍,精確到1位小數(shù) tmp[0]=temper/1000。 if(temper0x0fff) tflag=0。 //寫跳過ROM命令,因為總線上只有一個DS18B20 write_one_byte(0xbe)。 write_one_byte(0xcc)。 //延時61us } return(data)。 NOP()。i++) { data=1。NOP()。 //延時61us } else { DQ_LOW()。 NOP()。i++) { tmp=dataamp。 //檢測到DS18B20應(yīng)答低電平信號 delay15us(43)。 //延時721us DQ_HIGH()。j0。}void DelayMS(unsigned int ms) //定義延時函數(shù){ unsigned int j=0。 0x0f 。 if ( Temp_HEX 9 )Temp_HEX += 0x37 。 } else return 。 }}//向LCD輸出字符串,字符串在RAM中void LCD_Put_String( char *Str){ unsigned char Str_Temp。 while (1) { Str_Temp = *Str 。 LCD_E = 0 。 NOP()。 LCD_E = 0 。 NOP()。 } //向LCD輸出一個字符void LCD_Put_Char(unsi
點擊復制文檔內(nèi)容
語文相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1