資源簡(jiǎn)介
包含【.c】,【.DSN】,【.pwi】,【.hex】和報(bào)告。

代碼片段和文件信息
#include?
#include?“intrins.h“
#define?uchar?unsigned?char?
#define?uint?unsigned?int?
uchar?out0=0x7f?;???//賦初值
uchar?buf[3]={000};//全局?jǐn)?shù)組
uchar?pr[]={0x570x6E0x5E0x3E0x6D0x5D0x3D0x6B0x5B0x3B};
uchar?discode[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
int?AD; ?//轉(zhuǎn)換結(jié)果,十六進(jìn)制
int?uuusc=0; ?//帶小數(shù)部分?jǐn)?shù)據(jù)處理結(jié)果
int?Int_resultfloat_result;?//Int_result?整數(shù)部分,float_result?小數(shù)部分
sbit?Dataout=P1^0; ?//數(shù)據(jù)線
sbit?cs=P1^1; ?//片選
sbit?sclk=P1^2; ?//io口時(shí)鐘
sbit?dx=P1^3; ?//斷碼顯示控制鎖存
sbit?wx=P1^4; ?//位控控制鎖存
sbit?sw=P1^7;
sbit?PWM=P1^5;
sbit?direction=P1^6;
void?delay1ms(uchar?T) ?//單位時(shí)間1ms延時(shí)
{
??uchar?time;
??while(T--)
????for(time=0;time<120;time++);
}
/***********顯示程序*************/
void?display(uint?num) ??
{
??uchar?shige; ?//十,個(gè)處理
??shi=num/10%10;
??ge=num%10;
??
??wx=0; ???
??P0=0xf7;
??wx=1;
??dx=0;
??P0=discode[ge];??//顯示個(gè)位
??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;
delay1ms(1);
??} ??
}
/*************AD轉(zhuǎn)換程序************/
AD_val() ????//TLC549處理
{
??uchar?itemp=0;
??cs=1; //初始化,啟動(dòng)
??sclk=0;
??cs=0;
??_nop_(); ????
??for(i=0;i<8;i++) //讀取采集數(shù)據(jù),讀取的是上一次采集數(shù)據(jù)
????{
??sclk=1;?
??temp=temp<<1;
??if(Dataout)?temp?|=0x01;?
??sclk=0;
}?
??cs=1;
??AD=temp;
??for(i=0;i<5;i++) ?//延時(shí)17us以上,進(jìn)行復(fù)位
????_nop_();
??Int_result=AD*100/256; ??
??uuu=Int_result;
return?uuu;}?
/****************鍵盤掃描程序*************/
void?KB_Scan1()
{ uchar??tmplineijflagpress;
line=0x7E;
for(i=1;i<=4;i++)
{
?????P3=line;
?tmp=P3;?
??? ?tmp&=0x70;
if(tmp!=0x70)
{??tmp=P3;flag=1;break;}
else???line=(line<<1)|0x01;
}
if(i==5)?{tmp=0xFF;flag=0; }
for(j=0;j<10;j++)
{if(tmp==pr[j])
press=j;}
??if(flag==1)?
??{
??//buf[3]=buf[2];
??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服務(wù)程序*************/
void?PID()??????????????????
{?double?e0e1e2;?
uchar?duout1;?
uchar?kp=16?kd=0ki=0;//?ts=1;
??e0=e1;e1=e2;e2=(sc-uuu);///10;???//設(shè)定值-采集量
??if(e2>=0)???????????????????????
???{?direction=1;
if(e2>=20)??????????????//測(cè)得偏差值與設(shè)定偏差值進(jìn)行比較,若不在設(shè)定范圍內(nèi)則滿功率加熱。
?????{TR0=0;PWM=1;}
?????else
??????{??du=10*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0);??//?PID算法
?????????out1=du;//+out0;
?????????TR0=1;???//若到達(dá)設(shè)定范圍則調(diào)用PID程序,進(jìn)行有效功率加熱.
????????}?
????}
??else?if(e2<0)????????????//測(cè)得值與設(shè)定值比較,測(cè)得值大于設(shè)定值,關(guān)閉加熱設(shè)備,停止加熱。??
???{?direction=0;
if(e2<-20)??????????????//測(cè)得偏差值與設(shè)定偏差值進(jìn)行比較,若不在設(shè)定范圍內(nèi)則滿功率加熱。
?????{TR0=0;PWM=1;}
?????else
??????{??du=10*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0);??//?PID算法
?????????out1=-du;//+out0;
?????????TR0=1;???//若到達(dá)設(shè)定范圍則調(diào)用PID程序,進(jìn)行有效功率加熱.
????????}?
????}
//{TR0=0;PWM=0;}
???out0=out1;
???}?
/*********************PWM輸出程序*********************/
/******
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4307??2016-07-09?15:23??基于單片機(jī)的流量控制器設(shè)計(jì)\C51_64.c
?????文件?????175788??2016-07-09?15:25??基于單片機(jī)的流量控制器設(shè)計(jì)\C51_64.DSN
?????文件???????4629??2016-07-07?20:31??基于單片機(jī)的流量控制器設(shè)計(jì)\C51_64.hex
?????文件????????792??2016-07-09?15:25??基于單片機(jī)的流量控制器設(shè)計(jì)\C51_64.PWI
?????文件?????175788??2016-07-09?15:22??基于單片機(jī)的流量控制器設(shè)計(jì)\Last?Loaded?C51_64.DBK
?????文件?????539648??2016-07-15?21:57??基于單片機(jī)的流量控制器設(shè)計(jì)\報(bào)告.doc
?????目錄??????????0??2016-07-15?21:58??基于單片機(jī)的流量控制器設(shè)計(jì)
-----------?---------??----------?-----??----
???????????????900952????????????????????7
評(píng)論
共有 條評(píng)論