|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/*****************************************************/& W, I! k* ?+ b# g% H9 U% i" j& ?
/*采用AT89C51为主控制芯片*/. X5 L- X3 ~7 e7 F6 W( K/ F( W5 h
/*P0口为数码管的段选口,P2.4~P2.7为位选口*/
) ?1 E1 Z2 e8 A2 i. H/*DS18B20的DQ接P2.3,12MHZ晶振*/9 X* E$ g [, s" w B6 E% o
/*P2^2,PWM控制脚*/
* o" r {: i- s; [1 L/*****************************************************/! w# d% o! R0 J0 N5 i
#include<reg51.h>+ Z" G) U2 _% F" k/ z8 f
#define Kp 1 //比例系数
" x) I" `1 }( w$ L6 K#define Ki 0.25 //积分系数
- `3 `0 B7 S/ V0 \$ {; u9 d#define Kd 1 //微分系数
0 j, x, N% ]" L" y1 ]! Q$ b0 ?0 p% Q# S/ K( p
unsigned char m,n,p; //温度的十位 个位 小数
9 c; o) L% ^; p; \6 q @; Hunsigned char test_temp; //温度检定标志
- q3 c7 j+ i1 T% punsigned char key_set_flag; //按键设定进入标志% E+ a8 p$ d0 X7 F4 U* }
unsigned char key_hold; //按键保持标志+ A5 L3 v' ]2 R
unsigned char Change_step=1; //温度设置步进
8 y3 m) |7 X1 F( W2 Wint Real_temp; //实际温度值
6 O3 O. g* f \/ M7 Y8 zint Set_temp; //设置温度
! _0 ^+ f7 H" @' s, Lint Disp_temp; //显示温度
. H9 @6 ~) a# B8 g1 Zint last_error; //上次误差
& {* A4 J( L, A) x. s" |float I_term; //前面温差和( L7 N# t: p* E3 G
! K) K6 X% J/ g7 ?$ B0 {
int PID_MAX;1 v) x' D' v8 ^% ?8 C
unsigned int out,PWMT,counter;
^+ m$ z, w3 k8 x# }5 |4 B& R4 Hint time; //可控硅脉冲触发时刻* F, T5 h/ h- N% ^: S/ ^5 ~) Y% I
& g/ q& p3 ], O
sbit DQ=P2^3; //定义DS18b20的管脚
9 U9 V5 e8 G- C# c" o; o7 }/ jsbit L1=P2^7; //定义控制数码管的管脚
- }) M" C" ~1 m9 }9 `: Qsbit L2=P2^6;/ ?& H) E0 Z3 O3 h; o
sbit L3=P2^5;
# A& a- W& V* ^7 G+ T6 vsbit L4=P2^4;+ K0 V# Y T% B5 m
sbit PWM=P2^2; //PWM控制脚* \7 p5 C) X) j+ s% E: Z
% u1 X+ }0 t8 p# E+ z D: W$ R
unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
* B0 {0 m* y6 K7 v4 W1 Y5 i4 S0x82,0xF8,0x80,0x90,0x7F,0xbF,0xC6};//0-9数字,后面为". - C"
" O% z4 {) F2 W6 _
! R. c, t, n% Y3 p# ], |; y( c2 n0 e
|
|