云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于单片机的流量控制系统设计讲解

基于单片机的流量控制系统设计讲解

  • 62 次阅读
  • 3 次下载
  • 2026/1/12 0:15:06

sbit direction=P1^6;

void delay1ms(uchar T) //单位时间1ms延时 {

uchar time; while(T--)

for(time=0;time<120;time++); }

/***********显示程序*************/ void display(uint num) { uchar qian,bai,shi,ge;

qian=num/1000; //千,百,十,个处理 bai=num/100_x0010_; shi=num/10_x0010_; ge=num_x0010_;

wx=0; P0=0xf7; wx=1; dx=0;

P0=discode[ge]; //显示个位 dx=1; delay1ms(1); if(num>0) { wx=0; P0=0xfb;

wx=1; dx=0;

P0=discode[shi];//|0x80; //显示十位 dx=1; delay1ms(1); wx=0; P0=0xfd; wx=1; dx=0;

P0=discode[bai]; //显示百位 dx=1; delay1ms(1); } }

/*************AD转换程序************/ AD_val() //TLC549处理

{ uchar i,temp=0;

cs=1; //初始化,启动 sclk=0; cs=0;

_nop_();

for(i=0;i<8;i++) //读取采集数据,读取的是上一次采集数据 { sclk=1; temp=temp<<1;

if(Dataout) temp |=0x01; sclk=0; } cs=1; AD=temp;

for(i=0;i<5;i++) //延时17us以上,进行复位 _nop_();

Int_result=AD*100/256; //处理整数 uuu=Int_result;

/****************键盘扫描程序*************/ void KB_Scan1()

{ uchar tmp,line,i,j,flag,press; line=0x7E; for(i=1;i<=4;i++) {P3=line; tmp=P3; tmp&=0x70; if(tmp!=0x70)

{ tmp=P3;flag=1;break;} line=(line<<1)|0x01; else

}

if(i==5) {tmp=0xFF;flag=0; } for(j=0;j<10;j++) {if(tmp==pr[j]) press=j;} if(flag==1) { buf[2]=buf[1]; delay1ms(100); buf[1]=buf[0]; delay1ms(100); buf[0]= press; delay1ms(100);

sc=buf[2]*100+buf[1]*10+buf[0];

} }

/***************PID服务程序*************/ void PID( ) { double e0,e1,e2; uchar du,out1;

uchar kp=10, kd=0,ki=0;// ts=1;

e0=e1;e1=e2;e2=(sc-uuu);; //设定值-采集量 if(e2>=0)

{ direction=1; //设定值-采集量>0,电机正转

if(e2>=20) //测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率运转。 {TR0=0;PWM=1;} else

{ du=kp*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0); // PID算法 out1=du;//+out0;

TR0=1; //若到达设定范围则调用PID程序 } }

else if(e2<0)

{ direction=0; //设定值-采集量<0,电机反转

if(e2<-20) //测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率反转。 {TR0=0;PWM=1;} else

{ du=10*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0); // PID算法 out1=-du;//+out0;

TR0=1; //若到达设定范围则调用PID程序. } } out0=out1; }

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

输出程序/*********************PWM.

/*********************************************************/ // 定时器0中断服务程序.

/*********************************************************/ void timer0() interrupt 1 { TR0=0 ; TH0=0xff ; TL0=0xdb ;

TH1=0xff-out0 ;//初值等于模数减去计数个数 TR1=1 ;

PWM=1 ; //启动输出

}

/*********************************************************/ // 定时器1中断服务程序

/*********************************************************/ void timer1() interrupt 3 { TR1=0 ;

PWM=0 ; //结束输出 TR0=1; }

/***************主函数**************************/ //主程序main() {

timer1自动重装载1(16位) TMOD=0x21 ; //0b0010 0001 timer0模式12M 常数 TH0=0xfc ; // 频率调节 TL0=0x18 ;

//高电平时间调节 TH1=0x7f; TL1=0 ;

EA=1; ET0=1; ET1=1; while(1)

{if(sw==1)

TCL549采集处理 {AD_val();//调用display(uuu); } else {KB_Scan1(); display(sc); } PID();} }

//1ms延时

搜索更多关于: 基于单片机的流量控制系统设计讲解 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

sbit direction=P1^6; void delay1ms(uchar T) //单位时间1ms延时 { uchar time; while(T--) for(time=0;time<120;time++); } /***********显示程序*************/ void display(uint num) { uchar qian,bai,shi,ge; qian=num/1000; //千,百,十,个处理 bai=num/100_x0010_; shi=num/10_x0010_; ge=num_x0010_; wx=0; P0=0xf7; wx=1; dx=0;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com