資源簡介
基于STC單片機的PID溫度控制程序,KEILC編譯器,可以運行。

代碼片段和文件信息
#include?
#include?
#define?uint?unsigned?int
#define?uchar?unsigned?char
sbit??wireless_1?=?P3^0;
sbit??wireless_2?=?P3^1;
sbit??wireless_3?=?P3^2;
sbit??wireless_4?=?P3^3;
sbit??ACC0?=?ACC^0;
sbit??ACC7?=?ACC^7;
void?show_time();?//液晶顯示程序
#define?tim0?65536-1000????
#define?tim1?65536-20000
uchar?tm=1tx=0;??????????//記數兩個定時中斷的
enum{YURTsKdKp};//Y采集量?U控制量?R?設定量?Ts?采樣時間?Kd?微分?Kp比例
int?para[6]ptrout;???????//out?是從PID()得到的控制量
int?wdwd1rkpkdtse2e1e0u;?//wd?是從DS18B20采到的數據
bit??dealCS=0;
sbit?EN1=P2^2;
sbit?IN1=P2^1;
sbit?PWM=P2^0;
sbit?DQ?=?P2^4;????????//溫度傳送數據IO口
char?donecounttempflagup_flagdown_flag;
uchar?temp_value;??????//溫度值
uchar?TempBuffer[15]?week_value[2];
uchar?TempBuffer1[7];
uchar?Ctrltab[20]={815204050607080100120140160180200};
char T=23;
char? disp;
void show_time1(void);
void debouncer(void);???//去鍵盤抖動延時函數
void shezhiwendu(void);?//設定溫度函數
void scanner(void);
void?????PID();? ???//鍵盤掃描函數
#define rowkey()(~P1)&0x0f?//讀取端口宏定義
/**************去抖動延時函數***************/
void debouncer(void)
{ int?i;
for(i=0;i<2400;i++);
}
/*******************************************/
/**************設置溫度函數***************/
void shezhiwendu(void)
{
?while(1)
??????{?
?? scanner();
show_time1();
?? if(disp==2)???{?T++; disp=0;?}?
?
????????if(disp==3)???{?T--; disp=0;?}?
??
????if(disp==4)????break;?
??????}
}
/*******************************************/
/***********鍵盤掃描函數********************/
void scanner(void)
{ char colrow;
char scankeyin;
scan=0xef;
for(col=0;col<4;col++)
{ P1=scan;
keyin=rowkey();
if(keyin!=0)
{ for(row=0;row<4;row++)
{ if(keyin==(0x01<
{ disp=row+4*col;
break;
}
if(row==4)
disp=0;
}
while(rowkey());
debouncer();
}
scan=(scan<<1)|0x01;
}
}
/*****************************************************/
void??initTimer0_Timer1()????//初始化定時器0,定時器1
{
TMOD=0x01;
TH0=tim0>>8;?TL0=tim0;?
TR0=1;
ET0=1;
EA=1;
}
void??initPID()??????????//初始化PID函參數
{
?
??para[Kp]=100;?
??para[Kd]=3;??
??para[Ts]=10;
??
}
void?PID()?????????????//PID服務程序
{??
???
???TR0=0;
???ET0=0;
???EA=0;??????? ???????//檢測的溫度
?? ???????????????//wd設定的溫度
??e0=e1;e1=e2;e2=wd-T;?
??kp=para[Kp];?kd=para[Kd];?ts=para[Ts];
??u=wd+kp*(e2+kd*(e2-e1));
??if(u<0)?u=0;
??if(u>500)?u=500;
??out=u/10; ???????//控制量
???
???TR0=1;
???ET0=1;
???EA=1;?
}
void?PWM_timer0()?interrupt?1????//定時器0中斷服務子程序
{
??TH0=tim0>>8;?TL0=tim0;?
??
?????if(tm++>=out)?
???????
??????PWM=0;????????//通過變量out控制PWM脈沖寬度
???????else?PWM=1;?
?
if(tm>=50)?
?{??
PID();?????
tm=1;???????????//通過變量tm控制PWM的周期
??}??
???
}
/*
void?timer1()?interrupt?3??????//定時器1中斷服務子程序?
{
??TH1=tim1>>8;?TL1=tim1;
??if(dealCS==0)????????????///模糊控制
??{
????wdCtrl=para[R];
????if((wdCtrl-wd/10)>
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6376??2009-03-06?20:41??57578847PIDwenkong\PIDwenkong\STARTUP.A51
?????文件??????14049??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\STARTUP.LST
?????文件????????749??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\STARTUP.OBJ
?????文件??????19331??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制
?????文件???????9417??2009-03-11?16:21??57578847PIDwenkong\PIDwenkong\溫度控制.c
?????文件???????4161??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制.hex
?????文件?????????49??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制.lnp
?????文件??????19666??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制.LST
?????文件??????26671??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制.M51
?????文件??????22278??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制.OBJ
?????文件???????1039??2009-09-15?12:51??57578847PIDwenkong\PIDwenkong\溫度控制.Opt
?????文件????????596??2009-09-15?12:41??57578847PIDwenkong\PIDwenkong\溫度控制.plg
?????文件???????1998??2009-09-15?12:51??57578847PIDwenkong\PIDwenkong\溫度控制.Uv2
?????文件????????998??2009-03-11?16:21??57578847PIDwenkong\PIDwenkong\溫度控制_Opt.Bak
?????文件???????1711??2009-03-09?10:34??57578847PIDwenkong\PIDwenkong\溫度控制_Uv2.Bak
?????目錄??????????0??2009-09-15?12:52??57578847PIDwenkong\PIDwenkong
?????目錄??????????0??2009-09-15?12:52??57578847PIDwenkong
-----------?---------??----------?-----??----
???????????????129089????????????????????17
- 上一篇:FPGA設計16進制加減計數器
- 下一篇:TCL語言包
評論
共有 條評論