北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx

上传人:b****2 文档编号:4512043 上传时间:2023-05-03 格式:DOCX 页数:19 大小:211.53KB
下载 相关 举报
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第1页
第1页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第2页
第2页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第3页
第3页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第4页
第4页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第5页
第5页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第6页
第6页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第7页
第7页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第8页
第8页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第9页
第9页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第10页
第10页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第11页
第11页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第12页
第12页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第13页
第13页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第14页
第14页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第15页
第15页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第16页
第16页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第17页
第17页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第18页
第18页 / 共19页
北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx

《北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。

北方民族大学计算机控制课设 按要求设置温度控制系统硬件仿真流程图程序Word格式文档下载.docx

//占空比调节参数

unsignedcharset_temper;

//设定温度

unsignedchartemper;

//测量的温度

unsignedchari;

unsignedcharj=0;

unsignedints;

/********************1602液晶初始化********************/

ucharcodetable[]={"

Temper"

};

ucharnum;

ucharnum_cal;

sbitrs=P1^5;

//数据命令选择

sbitrw=P1^6;

//读写选择

sbiten=P1^7;

//使能端

sbitlcd_le=P3^4;

sbitlcd_8253=P3^5;

voiddelay(ucharz)//延时

{

ucharx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

voidlcd_com(ucharcom)//命令函数

rs=0;

rw=0;

en=0;

lcd_8253=0;

lcd_le=1;

P0=com;

lcd_8253=1;

lcd_le=0;

delay(5);

en=1;

voidlcd_data(uchardate)//数据

rs=1;

P0=date;

voidinit_lcd()//初始化

lcd_com(0x38);

lcd_com(0x0f);

lcd_com(0x06);

lcd_com(0x80);

lcd_com(0x01);

*******************LCD显示子程序*********************/

voiddisplay()

unsignedchardisp_num[6];

unsignedintk,k1;

k=high_time;

k=k%1000;

k1=k/100;

//得到百位温度值

if(k1==1)

disp_num[0]=0;

else

disp_num[0]=0x60;

k=k%100;

//得到十位的温度值

disp_num[1]=number[k/10];

disp_num[2]=number[k%10];

k=temper;

//得到个位的温度值

disp_num[3]=number[k/10];

disp_num[4]=number[k%10]+1;

disp_num[5]=number[s/10];

disp_1(disp_num);

for(num=0;

num<

12;

num++)

{

lcd_data(table[num]);

delay(500);

}

lcd_com(0x80+40);

lcd_data(disp_num[3]);

//显示百位

lcd_data(disp_num[4]);

//显示十位

lcd_data(disp_num[5]);

//显示个位

void8253_init()

{RD_2==1;

//写控制字

WR_2=0;

A0_2=1;

A1_2=1;

P2=01110000B;

//T1方式016位二进制计数

RD_2==1;

//写计数初值

A0_2=0;

A1_2=0;

P2=100H;

RD==1;

WR=0;

A0=1;

A1=1;

P1=00110100B;

//频率发生器模式

voidget_temper()

{

P1=01000000B;

//计数器锁存

temper=P1;

/************************************************/

structPID{

unsignedintSetPoint;

//设定目标desiredvalue

unsignedintProportion;

//比例常数proprotional

unsignedintIntegral;

//积分常数integralconst

unsignedintDerivative;

//微分常数derivativeconst

unsignedintLastError;

//error[-1]

unsignedintPrevError;

//error[-2]

unsignedintSumError;

//sumsoferrors

/**********************史密斯控制算法***************************************/

voidSMITHInit(structSMITH*pp)

memset(pp,0,sizeof(structSMITH));

/*******************史密斯计算部分******************************************/

unsignedintSMITHCalc(structSMITH*pp,unsignedintNextPoint)

unsignedintdError,Error;

Error=pp->

SetPoint-NextPoint;

//计算出偏差

pp->

SumError+=Error;

//积分

dError=pp->

LastError-pp->

PrevError;

//当前微分

PrevError=pp->

LastError;

LastError=Error;

return(pp->

Proportion*Error//比例项

+pp->

Integral*pp->

SumError//积分项

+pp->

Derinative*dError);

//微分项

compare_temper()

unsignedchari;

if(set_temper>

temper)//判断温度

If(set_temper-temper>

1)//判断温差是否大于1度

high_time=100;

low_time=0;

for(i=0;

i<

10;

i++)

{

get_tember();

//得到当前温度

rin=s;

//读输入

rout=PIDCalc(&

spin,rin);

//输出pid计算结果

}

if(high_time<

=100)

high_time=(unsignedchar)(rout/800);

else

high_time=100;

low_time=(100-high_time);

}

elseif(set_temper<

=temper)//如果设定的温度小于测量温度

{

if(temper-set_temper>

0)

{

high_time=0;

low_time=100;

}

else

for(i=0;

get_temper();

rin=s;

rout=PIDCalc(&

if(high_time<

100)

high_time=(unsignedchar)

(rout/10000);

else

high_time=0;

low_time=(100-high_time);

/*************************************************************************

T1中断服务子程序

*************************************************************************/

voidserve_T1()interrupt1using1

if(num_cal==20)

{num_cal=0;

get_temper;

//获取温度;

compare_temper();

//Smith算法及温度处理

A0=0;

A1=0;

P1=rout;

//更新8253脉冲

TH0=0x2f;

TL0=0xe0;

else=num_cal++;

主程序

main()

unsignedcharz;

unsignedchara,b,flag_2=1,count1=0;

unsignedcharphil[]={2,0xce,0x60,0x1c,2};

TMOD=0x21;

TH0=0x2f;

TL0=0x40;

SCON=0x50;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

PS=1;

EA=1;

EX1=0;

ET0=1;

ES=1;

TR0=1;

TR1=1;

high_time=50;

//高电平时间

low_time=50;

//低电平时间

init_lcd();

//液晶初始化

8253_init();

//8253初始化

PIDInit(&

spid);

//初始化PID结构

spid.Proportion=10;

//设定PID系数

spid.Integral=8;

spid.Derivative=6;

spid.SetPoint=100;

//SetPIDSetpoint

while

(1)

disp_1(phil);

//实时显示温度变化

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2