#include<reg52.h>
#include"delay.h"
#include"LCD_1602.h"
#include"ds18b20.h"
//#include"pid_adjust.h"
#define uchar unsigned char
#define uint unsigned int
sbit kaitong=P2^0;
//int set_value=500,cc,dd;//放大十倍//,dead_wide,Kp,KI,KD,man_value,limit; 2009-12-23修改
//uint P_sel=1,I_sel=1,D_sel=0,man=1;
int aa,cc,dd,tt,set_value,bb,ee,g,j,mm,now_value;
uchar shi,ge,fig;
uchar mn=1;
uchar yu=1;
uchar code table[]="Fortune Favours";/*15位*/
uchar code table1[]="The Bold";/*8*/
uchar code table2[]="Chen Qi" ; /*13位*/
uchar code table3[]="200706070211" ; /*12位*/
uchar code table4[]="Luo Hongjian"; /*12位*/
uchar code table5[]="200706070219"; /*12位*/
uchar code table6[]=" " ; /*7位*/
uchar code table7[]=" " ;/*12位*/
uchar code table8[]=" "; /*12位*/
uchar code table9[]=" ";/*12位*/
uchar shu;
uchar CGCODE[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,//"年"代码 0x00
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//"月"代码 0x01
0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00,//"日"代码 0x02
};
uchar tab[]={'2','0','1','0',0x00,'7',0x01,'1','4',0x02};//显示年月日
int SetPoint=500,PrevError=0,LastError=0,Error=0,dError=0;
long int SumError=0;
float Proportion=0.24,Integral=0.001,Derivative=3.00;
/*====================================================================================================
PID计算部分
=====================================================================================================*/
int PIDCalc(int NextPoint)
{
Error = SetPoint - NextPoint; // 偏差
if(Error>=100)
return(20);
else if((Error<100)/*&&(Error>0)*/)
{
if(Error<50)
SumError += Error; // 积分
dError = Error - LastError; // 当前微分
PrevError = LastError;
LastError = Error;
if(dError>0)
dError=dError*15;
return (Proportion*Error+ Integral * SumError+ Derivative * dError);
}
else
{
SumError+=Error;
return 0;
}
}
uchar keyscan()
{
uchar temp,num;
num=0;
P1=0xff;
temp=P1;
if(P1!=0xff)
{
delayl(5);
P1=0xff;
temp=P1;
if(temp!=0xff)
{
temp=P1&0xff;
switch(temp)
{
case 0xf7:num=3;break;
case 0xef:num=6;break;
case 0xfe:num=1;break;
case 0xfd:num=2;break;
case 0xfb:num=5;break;
case 0xdf:num=4;break;
default:num=0;break;
}
}
}
return num;
}
//*********三位按键设计***********//
/*uchar keyscan2(uchar a)
{
uchar num1;
uchar shi;
shi=a;
num1=keyscan();
switch (num1)
{
case 1:shi++;break;
case 4:shi--;break;
}
if (shi>'9') shi='0';
if (shi<'0') shi='9';
tt=(shi-'0')*100;
return (shi);
}
uchar keyscan3(uchar b)
{
uchar num2;
uchar ge;
ge=b;
num2=keyscan();
switch (num2)
{
case 2:ge++;break;
case 5:ge--;break;
}
if (ge>'9') {ge='0';tt++;}
if (ge<'0') {ge='9';tt--;}
bb=tt+(ge-'0')*10;
return (ge);
}
uchar keyscan4(uchar c)
{
uchar num3;
uchar fig;
fig=c;
num3=keyscan();
switch (num3)
{
case 3:fig++;break;
case 6:fig--;break;
}
if (fig>'9') {fig='0';bb++;}
if (fig<'0') {fig='9';bb--;}
ee=bb+(fig-'0')*1;
return (fig);
} */
/*
float calculate_error(float process)
{
float error;
error=set_value-process;
if(abs(error)<dead_wide)
return 0;
else
return error;
}
float PID(float error)
{
float P_cal,I_cal,D_cal;
static float last_error,last_last_error;
P_cal = Kp*error*P_sel;
I_cal = KI*P_cal*I_sel;
D_cal = KD*Kp*(error-2.0*last_error+last_last_error)*D_sel;
last_last_error=last_error;
last_error=error;
return P_cal+I_cal+D_cal;
}
float man_auto(float PID_result)
{
static float last_out;
if(man == 0)
return last_out = (abs(PID_result-last_out)<=limit?PID_result:last_out+limit);
else
return last_out = (abs(man_value-last_out)<=limit?man_value:last_out+limit) ;
} */
/*void duty(int z) //2009年12月24日11点测试,纯比例控制
{
cc=z;
}
void adjust(int now_value)
{
j=ee+set_value;
aa=j-now_value;
mm=now_value-j;
if(aa>=100)
duty(20);
else if((aa<100)&&(aa>0))
{
duty(aa/5+5);
}
else
duty(0);
} */
//******2009年12月24日15点测试,比例积分微分控制********//
/*void duty(int z)
{
cc=z;
}
void adjust(int now_value)
{
// j=ee+set_value;
// SetPoint=j;
// aa=j-now_value;
// mm=now_value-j;
// duty(PIDCalc(now_value));
} */
/*
STC_init()
{
TMOD=0x01;//定时器0,工作方式2;
EA=1;
ET0=1;
TH0=0x3C;
TL0=0xB0; //10ms进入中断一次
TR0=1;
}
*/
//***********主函数*******************//
void main()
{
int i,temp_e1,temp_e2,p;
uchar num='5';
uchar sca='0';
uchar fig='0';
//STC_init();
LCD_init();
/*setPosition(1,2);
prints("Spring brother");
setPosition(2,2);
prints("is a pure man!");
delayl(2000);
setPosition(1,2);
prints(" brother");
setPosition(2,2);
prints(" a pure man!");
delayl(2000); */
//***************字幕整体输出*************//
write_com(0x01);
write_com(0x80+0x11);
for(shu=0;shu<15;shu++)
{
write_data(table[shu]);
delayl(20);
}
write_com(0x80+0x54);
for(shu=0;shu<8;shu++)
{
write_data(table1[shu]);
delayl(20);
}
for(shu=0;shu<17;shu++)
{
write_com(0x18);
delayl(300);
}
delayl(1200);
for(shu=0;shu<17;shu++)
{
write_com(0x1c);
delayl(300);
}
//***************打字方式字幕输出*************//
/* write_com(0x01);
write_com(0x80+0x05);
for(shu=0;shu<7;shu++)
{
write_data(table2[shu]);
delayl(200);
} delayl(2000);
write_com(0x80+0x42);
for(shu=0;shu<12;shu++)
{
write_data(table3[shu]);
delayl(200);
}
delayl(2000); */
//***************打字方式字幕消失*************//
/*write_com(0x80+0x05);
for(shu=0;shu<7;shu++)
{
write_data(table6[shu]);
delayl(200);
}
write_com(0x80+0x42);
for(shu=0;shu<12;shu++)
{
write_data(table7[shu]);
delayl(200);
}
delayl(2000); */
//***************打字方式字幕输出*************//
write_com(0x01);
write_com(0x80+0x02);
for(shu=0;shu<12;shu++)
{
write_data(table4[shu]);
delayl(200);
}
write_com(0x80+0x42);
for(shu=0;shu<12;shu++)
{
write_data(table5[shu]);
delayl(200);
}
delayl(2000);
for(shu=0;shu<15;shu++)
{
write_com(0x18);
delayl(500);
}
delayl(1200);
//***************打字方式字幕消失*************//
/* write_com(0x80+0x02);
for(shu=0;shu<12;shu++)
{
write_data(table8[shu]);
delayl(200);
}
write_com(0x80+0x42);
for(shu=0;shu<12;shu++)
{
write_data(table9[shu]);
delayl(200);
}
delayl(2000); */
//********显示zidonghua年月日***********//
write_com(0x01);
write_com(0x80);
prints("welcome!") ;
for(i=0;i<4;i++)
{
write_com(0x1c);
delayl(1000);
}
delayl(2000);
for(i=0;i<16;i++)
ledrs=0;
ledrw=0;
write_com(0x40);//将自定义字符写入CGRAM
for(i=0;i<24;i++)//循环24次写入
{
write_data(CGCODE[i]);
}
write_com(0x80+0x40);//写入初始地址
for(i=0;i<10;i++)
{
write_data(tab[i]);
}
delayl(2500);
//****************工作部分****************//
write_com(0x01);
kaitong=0;
while(1)
{
dd++;
if(dd>20)
dd=1;
if(dd<=cc)
kaitong=0;
else
kaitong=1;
//**************工作屏幕一行显示部分*****************//
setPosition(1,0);
i=readtemp();
/*p++;
if(p==5) {adjust(i);p=0;}*/
IntToStr(i,buffer,3);
prints("P:");
printc(buffer[0]);
printc(buffer[1]);
printc('.');
printc(buffer[2]);
printc(0xDF);
printc('C');
//**************最高温度设定*****************//
/*setPosition(1,9);
prints("H:");
IntToStr(temp_e2,buffer,3);
if(i>=temp_e2&&i!=850)
{
temp_e2=i;
printc(buffer[0]);
PID控制液晶显示的水温控制程序(C语言)
4星 · 超过85%的资源 需积分: 12 169 浏览量
2010-07-22
23:15:08
上传
评论 2
收藏 6KB RAR 举报
Enderluo080620
- 粉丝: 0
- 资源: 1
最新资源
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 半导体行业词汇 相关缩写
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
- Apache Flink 未授权访问+远程代码执行.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈