资源简介

包含【.c】,【.DSN】,【.pwi】,【.hex】和報告。

资源截图

代码片段和文件信息

#include 
#include “intrins.h“
#define uchar unsigned char 
#define uint unsigned int 

uchar out0=0x7f ;   //赋初值
uchar buf[3]={000};//全局数组
uchar pr[]={0x570x6E0x5E0x3E0x6D0x5D0x3D0x6B0x5B0x3B};
uchar discode[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
int AD;  //转换结果,十六进制
int uuusc=0;  //带小数部分数据处理结果
int Int_resultfloat_result; //Int_result 整数部分,float_result 小数部分
sbit Dataout=P1^0;  //数据线
sbit cs=P1^1;  //片选
sbit sclk=P1^2;  //io口时钟
sbit dx=P1^3;  //断码显示控制锁存
sbit wx=P1^4;  //位控控制锁存
sbit sw=P1^7;
sbit PWM=P1^5;
sbit direction=P1^6;
void delay1ms(uchar T)  //单位时间1ms延时
{
  uchar time;
  while(T--)
    for(time=0;time<120;time++);
}
/***********显示程序*************/
void display(uint num)   
{
  uchar shige;  //十,个处理
  shi=num/10%10;
  ge=num%10;
  
  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;
delay1ms(1);
  }   
}
/*************AD转换程序************/
AD_val()     //TLC549处理
{
  uchar itemp=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;
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服务程序*************/
void PID()                  
{ double e0e1e2; 
uchar duout1; 
uchar kp=16 kd=0ki=0;// ts=1;
  e0=e1;e1=e2;e2=(sc-uuu);///10;   //设定值-采集量
  if(e2>=0)                       
   { direction=1;
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程序,进行有效功率加热.
        } 
    }

  else if(e2<0)            //测得值与设定值比较,测得值大于设定值,关闭加热设备,停止加热。  
   { direction=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程序,进行有效功率加热.
        } 
    }


//{TR0=0;PWM=0;}
   out0=out1;
   } 
/*********************PWM输出程序*********************/

/******

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4307  2016-07-09 15:23  基于单片机的流量控制器设计\C51_64.c

     文件     175788  2016-07-09 15:25  基于单片机的流量控制器设计\C51_64.DSN

     文件       4629  2016-07-07 20:31  基于单片机的流量控制器设计\C51_64.hex

     文件        792  2016-07-09 15:25  基于单片机的流量控制器设计\C51_64.PWI

     文件     175788  2016-07-09 15:22  基于单片机的流量控制器设计\Last Loaded C51_64.DBK

     文件     539648  2016-07-15 21:57  基于单片机的流量控制器设计\報告.doc

     目录          0  2016-07-15 21:58  基于单片机的流量控制器设计

----------- ---------  ---------- -----  ----

               900952                    7


评论

共有 条评论