|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/*****************************************************// p7 L" M/ e- R
/*采用AT89C51为主控制芯片*/" v6 Q* U6 D8 J0 Q3 D* M& V
/*P0口为数码管的段选口,P2.4~P2.7为位选口*/2 ?4 k" \ I3 S* v
/*DS18B20的DQ接P2.3,12MHZ晶振*/
) N" ^* @( p* k% p! h/*P2^2,PWM控制脚*/8 C& e4 j* [, A4 a
/*****************************************************/
7 F. u; d; p$ @#include<reg51.h>) z* q3 O4 V, ]# A6 ] _
#define Kp 1 //比例系数
' g5 A- _3 I* Z% Y" S# Q$ g#define Ki 0.25 //积分系数
9 t/ W' t3 n$ h- O#define Kd 1 //微分系数
) V( |! F! Q9 G! X
0 E( ~1 G$ V" ^) U# junsigned char m,n,p; //温度的十位 个位 小数# f2 A5 m; `, X) M& i/ J1 c
unsigned char test_temp; //温度检定标志
g/ j- f% ~/ E. e# g% funsigned char key_set_flag; //按键设定进入标志' r: K# g( M/ e d* E
unsigned char key_hold; //按键保持标志" i7 c2 l2 d" B- R
unsigned char Change_step=1; //温度设置步进
- `& G ` W U& U1 Hint Real_temp; //实际温度值
( d" L+ m2 v; ?int Set_temp; //设置温度2 K7 z/ H! H* S, \0 f8 S
int Disp_temp; //显示温度3 U6 P2 T- I/ A
int last_error; //上次误差
, d7 C0 c" P+ N/ T( E" {float I_term; //前面温差和
" c- D; i, K ^/ K6 F; `6 F4 m7 ~+ \$ j! l, e5 l- b# k; o
int PID_MAX;
! W. k& R, L7 Bunsigned int out,PWMT,counter;
! w9 G% b$ }, S/ jint time; //可控硅脉冲触发时刻
4 ^5 J* C# ~5 F4 b5 ~/ e, }1 [1 [* W! }
sbit DQ=P2^3; //定义DS18b20的管脚# F/ }( c2 v+ E
sbit L1=P2^7; //定义控制数码管的管脚
6 O8 i# H( z& g) Fsbit L2=P2^6;& g: J. e6 r0 \
sbit L3=P2^5;, x: o4 u3 L4 i4 I7 z
sbit L4=P2^4;
9 L1 r0 ~* J! Q) J) D& bsbit PWM=P2^2; //PWM控制脚
: A H, E& L, O) M% k- w# J. `4 I3 B
unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
+ z, d8 j; g( M! o( t6 Y# s1 y: D, }0x82,0xF8,0x80,0x90,0x7F,0xbF,0xC6};//0-9数字,后面为". - C"
9 A$ H; t5 Q; }! c* f7 T) i; x4 g/ P( F. D. ~3 x5 {
. Q- ]; P3 G+ T) K9 i' D& C! w
|
|