|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/*****************************************************/
; ~/ H7 q' J# u% I: E5 D. w9 O/*采用AT89C51为主控制芯片*/# Q/ z# g [5 e" X
/*P0口为数码管的段选口,P2.4~P2.7为位选口*/
6 o$ k, l( W! t8 O$ o p/*DS18B20的DQ接P2.3,12MHZ晶振*/
, n5 I* G# }, V3 a2 j/*P2^2,PWM控制脚*/
- M7 T2 P+ r4 s% b/*****************************************************/0 T: |" r' o5 h1 F6 P* l1 [
#include<reg51.h>4 r6 a: {" i' O/ S/ x3 s( d; j
#define Kp 1 //比例系数 3 q Y; |7 t4 t% N: |
#define Ki 0.25 //积分系数0 r. I- q% l" f2 L* d+ N
#define Kd 1 //微分系数3 n& l. B& r# e: }
/ a+ P9 V0 i/ b# P# l% b, o- O5 y
unsigned char m,n,p; //温度的十位 个位 小数
3 j& x" i! \4 @5 r/ ~% E2 kunsigned char test_temp; //温度检定标志
) K4 y' Y1 }9 c8 L) c: ^5 Junsigned char key_set_flag; //按键设定进入标志9 n8 {' c2 G, z5 Z( Z5 f4 d
unsigned char key_hold; //按键保持标志* B/ }- G6 j0 |( p0 B
unsigned char Change_step=1; //温度设置步进
g* u3 C# E1 Z4 N! O3 v8 @int Real_temp; //实际温度值! Z( k, g9 e& }' O
int Set_temp; //设置温度
; c# w" B. Z2 o1 D' D9 Vint Disp_temp; //显示温度1 R& M3 A$ I! |; |& e* ~
int last_error; //上次误差
: G' B( W! W5 B( `4 qfloat I_term; //前面温差和" J. ]- X( W+ t: i$ v. O+ s
6 F' O* z; D7 dint PID_MAX;
! c6 M0 m& g9 Z' v9 P8 cunsigned int out,PWMT,counter;
; m$ d4 X# {0 l/ t7 Pint time; //可控硅脉冲触发时刻4 a3 G/ Q4 ~- U' l
' R7 \& M& [2 isbit DQ=P2^3; //定义DS18b20的管脚# M( U- \* Y( M- ^. n# k7 L/ O
sbit L1=P2^7; //定义控制数码管的管脚* A: ` V* {4 G1 y/ E
sbit L2=P2^6;
$ T( S% u. `5 @1 d0 z4 ?- w: F/ P, hsbit L3=P2^5;
. o* @: m$ M! wsbit L4=P2^4; C. r5 V$ O( q c- ^
sbit PWM=P2^2; //PWM控制脚, c' A: z' z; S- j6 \
0 W9 X5 N2 r" _: Junsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
4 r. ~# r6 k4 A4 x9 D0x82,0xF8,0x80,0x90,0x7F,0xbF,0xC6};//0-9数字,后面为". - C"3 p% ^$ E0 o% m% _. I
+ W- x }7 a9 r" ] B0 o1 K5 A) G3 b z5 Q% i, F4 @
|
|