PID算法模块哦

来源:互联网 发布:快走丝hl编程系统视频 编辑:程序博客网 时间:2024/06/06 03:10
 

/*----------------------------------------------------------------------------------------

                           The module algorithm  of PID.

                          Apologize  for you due to no instruction!!

                               DATE:2011.06.01

-----------------------------------------------------------------------------------------*/

 

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DS_DQ  P3^3 //debug:org-P3^2
#define jump_ROM 0xcc
#define start 0x44
#define read_EEROM 0xBE

code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit DQ=DS_DQ;
uchar TMPH=0,TMPL=0;

void delay(uint N)
{
 int i;
 for(i=0;i<N;i );
}

uchar Reset(void)
{
 uchar deceive_ready;
 DQ=0;
 delay(29);
 DQ=1;
 delay(3);
 deceive_ready=DQ;
 delay(25);
 return(deceive_ready);

}

uchar read_bit(void)
{
 uchar i;
 DQ=0;
 DQ=1;
 for(i=0;i<3;i );
 return(DQ);

}

void write_bit(uchar bitval)
{
 DQ=0;
 if(bitval==1) DQ=1;
  delay(5);
 DQ=1;

}

void write_byte(uchar val)
{
 uchar i,temp;
 for(i=0;i<8;i )
 {
  temp=val>>i;
  temp=temp&0x01;
  write_bit(temp);
  delay(5);
 }

}
uchar read_byte(void)
{
 uchar i,m,receive_data;
 m=1;
 receive_data=0;
 for(i=0;i<8;i )
 {
  if(read_bit())
  {
   receive_data=receive_data (m<<i);
  }
  delay(6);
 
 }

 return(receive_data);
}

uchar Temperatur(void)
{
 uchar temp=0;
 Reset();
 write_byte(jump_ROM);
 write_byte(start);
 Reset();
 write_byte(jump_ROM);
 write_byte(read_EEROM);
 TMPL=read_byte();
 TMPH=read_byte();
 TMPL>>=4;
 TMPH<<=4;
 temp=TMPH|TMPL;
 return temp;
}

void display(uchar TMP)
 {
 uchar i;
 P1=0xf8; //debug:org-P2=0xfe; 
 P2=table[TMP%10];
 while(i--);
 i=5000;
 P2=0;
    P1=0xf8|1;
 P2=table[TMP/10];
 while(i--);
 i=5000;
 P2=0;
 
 }
void main()
{
 uchar warm=0;
 warm=Temperatur();
 display(warm);
}

/*---------------------------------THE END!---------------------------------*/