|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/*****************************************************/
3 o* {1 M$ j* x- R/*采用AT89C51为主控制芯片*/
0 B# q9 t- L7 ?) P2 ?3 c/*P0口为数码管的段选口,P2.4~P2.7为位选口*/
7 Z$ m8 o( i3 {7 L+ O$ r( P/*DS18B20的DQ接P2.3,12MHZ晶振*/0 L' P Q0 [6 `& `9 }
/*P2^2,PWM控制脚*/0 ^9 h$ M: }8 e( {2 O
/*****************************************************/
' u% \ k' r, k3 }2 w7 F#include<reg51.h> R3 b% v+ H6 ?( Z" u
#define Kp 1 //比例系数 ( t3 O2 s' a r* w
#define Ki 0.25 //积分系数2 c( N% \( U v" A: l6 o+ K2 M
#define Kd 1 //微分系数
8 [2 L" B6 k' {3 w: L C" o
1 P3 a* \9 g) k3 R& Cunsigned char m,n,p; //温度的十位 个位 小数
1 ~, Z1 a( B6 k7 ]unsigned char test_temp; //温度检定标志8 M: x: |9 d: Y0 J( w
unsigned char key_set_flag; //按键设定进入标志- h1 ^* v, s; a6 Z3 r
unsigned char key_hold; //按键保持标志 D1 ~* F& b ^ d4 u$ `( f
unsigned char Change_step=1; //温度设置步进9 L. n: S3 I5 {9 U
int Real_temp; //实际温度值
e2 ~' z' k; I& {int Set_temp; //设置温度9 A7 V0 X' \% F
int Disp_temp; //显示温度6 o* Y" o4 I5 _1 S' e% _" y# O; ~
int last_error; //上次误差0 D. r) i2 {. U2 H/ m* i
float I_term; //前面温差和
1 l' ~ `7 o0 ?' E0 F
$ Y. V' i s6 s# D! hint PID_MAX;; M0 |8 ~1 r ]2 @, V
unsigned int out,PWMT,counter;' A6 G, a$ b6 z' e: W% ] R
int time; //可控硅脉冲触发时刻9 _3 ~4 f5 h# n
0 B6 d0 Z& D: Z( O0 r* f! J6 lsbit DQ=P2^3; //定义DS18b20的管脚% z- @5 K* V0 g# A
sbit L1=P2^7; //定义控制数码管的管脚
, l( I, D# k) B5 ]: Esbit L2=P2^6;
9 D3 x2 s7 Z6 `2 ~sbit L3=P2^5;
$ m- l8 K8 Z: z. D8 O' f7 Y4 ]sbit L4=P2^4;
/ a0 ]9 A+ u9 H* xsbit PWM=P2^2; //PWM控制脚1 G7 q; z" B/ U. p7 U: w) g% E0 z
; T8 Q% @8 [ d* a' O+ \unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,6 S. U& S i( ^
0x82,0xF8,0x80,0x90,0x7F,0xbF,0xC6};//0-9数字,后面为". - C"& i; B W0 C U
( i/ I! ?9 N, W, a& V H& g
4 K" Q7 a8 L# P, Z% t1 v |
|