|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/*****************************************************/
1 B: ]( l# u0 y. B8 K; g( v/*采用AT89C51为主控制芯片*/
$ d( K& K( l; M/*P0口为数码管的段选口,P2.4~P2.7为位选口*/
: i9 z o; T% R. _8 B; L/*DS18B20的DQ接P2.3,12MHZ晶振*/9 v1 y+ g1 _; T% R& R; {$ [
/*P2^2,PWM控制脚*/, {- R0 e; L. x5 c; O) b! E$ A
/*****************************************************/
, V# G% E" F: Z% p( R6 L#include<reg51.h>
# } l. B- P; Y#define Kp 1 //比例系数
) i, k1 X1 } B& x5 x, L9 Z4 `#define Ki 0.25 //积分系数. o7 _* q' o" l# t, N( a
#define Kd 1 //微分系数, ?7 F/ d* P8 O# ^. ?! D7 I; c1 s3 p
! m3 _, Z6 M8 Q" c& x0 k0 o! Uunsigned char m,n,p; //温度的十位 个位 小数
9 G4 p: T! [+ D2 Funsigned char test_temp; //温度检定标志
- s& h& }; W$ }unsigned char key_set_flag; //按键设定进入标志7 z$ D- g* |" A/ Z# q2 ?3 q" f
unsigned char key_hold; //按键保持标志
) a0 F3 }0 e( m# w! Z% ?6 m% Hunsigned char Change_step=1; //温度设置步进5 C8 {3 X5 g2 ]8 T( t/ P$ F
int Real_temp; //实际温度值
+ y z7 _' v6 k: T) g* Vint Set_temp; //设置温度
( v0 ]0 ~& n" k( q! H+ wint Disp_temp; //显示温度
, ^+ C3 H4 ^% f! j( m( Aint last_error; //上次误差+ Z, Y4 r9 }0 y6 e, S$ D3 D
float I_term; //前面温差和
$ X( N" a+ L% r; I$ K4 y1 l' H
# _% B; u! u% @& T1 @int PID_MAX;7 G0 A- C6 J; A$ i( Z
unsigned int out,PWMT,counter;% n2 g x) V1 r G+ v \
int time; //可控硅脉冲触发时刻
7 u! k+ }6 h4 M2 u/ b3 X# ~ Y# i9 e
sbit DQ=P2^3; //定义DS18b20的管脚5 W; \* Q' [1 ?) ^% r+ a0 C
sbit L1=P2^7; //定义控制数码管的管脚
0 F2 d( ^- [, Msbit L2=P2^6;
5 i8 t7 N5 o6 y% l6 M4 fsbit L3=P2^5;
- _) u0 Y" i# h4 k. G3 Hsbit L4=P2^4;
$ ?( U% X6 y2 M! [* y% ]4 v$ ]# `sbit PWM=P2^2; //PWM控制脚
7 ]$ {6 ~' P4 m6 b* X
& G1 `5 G8 I# O* ~; v( funsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,+ V1 j" M1 U$ ^' o: s9 s
0x82,0xF8,0x80,0x90,0x7F,0xbF,0xC6};//0-9数字,后面为". - C"
{6 p$ e' I- R5 w
# K! j# H$ N. k' L$ _; {- R
) ?0 V2 w" c: ^7 g |
|