⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chengzhong3.c

📁 基于89S51的称重系统
💻 C
字号:
#include "AT89X51.H"
#include "MAIN1.H"
#include "MATH.H"
unsigned char code seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; 
unsigned char code m[]={1,2,4,8};
unsigned char count,j[4];
void main(void)
{ 
  unsigned char i,VOUT=0;
  float Y,Y1,Y2,X;
   MCUinit1();
  while(1)

	{ 	init2();
		ST = 1;                          // ST端产生正脉冲
		i=i;
        ST = 0;
		for(i=0;i<10;i++)
		 {;}
	  while(EOC==0)           // 转换结束  
	      {;}
       OE = 1;            // 输出转换得到的数据
       VOUT = P0;      // 记下得到的数据
       OE = 0;
                	 
    Y1=5.0*VOUT/255.0;	//输出电压  // y0+y3=2.584 分界线
    Y=Y1-Y0-Y3;
    if(Y<=0.0)
   {  GREEN=1;
    display1(0);        //数码管显示0000

    }
  else 
  { 
    Y2=Y-Y0+Y3;
    if(Y2>=0.0)
   {  YELLOW=1;
	  FENGMING=1;
     display1(8);       //数码管显示8888

   }
  else
  {	RED=1; 
    FENGMING=1;
	X=35.32*(Y+Y3)-0.12+XX;
	dataprocessing(X);   
   }
   }
  }
 }

 void MCUinit1(void)
{	  	count=0;

        ST = 0;
        OE = 0;
        
        TMOD = 0x12;      // 定时器0工作方式2,定时器1工作方式1
        TH0 = 246;          // 定时器0赋初值
        TL0 = 246;

       	TH1 =0X8A ;          // 定时器1赋初值	30ms
        TL1 =0XCF;

        CLK1=0;
	    ET1 = 1;
        ET0 = 1;			   //允许中断
        EA = 1;				   //开放中断
		TR0 = 1;			   //启动T0
		TR1 = 1;
}
void init2(void)
{	 
FENGMING =0;	  	   /*蜂鸣器*/  
RED=0;		    	   /*红灯*/ 
YELLOW = 0;			   /*黄灯*/ 
GREEN = 0;		       /*绿灯*/ 
P1=0;
P3=0;
}
void display1(unsigned char x1) 
 { 	unsigned char C1 =0X00;
    unsigned char i;
	 P3=C1; 
	for(i=0;i<4;i++)
    { P1=seg[x1];
	    P3=~m[i];
	  delaytime(2);      //延时 10MS
 
	 }
 }

 void delaytime(unsigned char Delay)
{unsigned char i;
 for(;Delay>0;Delay--)
  {for(i=0;i<128;i++)
   {;}
   }   
}

 void dataprocessing(float x2)
 {	 unsigned char x4;
	 unsigned long x3;
	 unsigned int x5,x6,x7;
	x3=(long)(x2*1000);  //5位
	x4=x3%10;
	if(x4>=5)			//4舍5入
	{x3=x3+10;}
	 j[3]=x3/10000;     //千位
	 x5=x3-j[3]*10000;
	 j[2]=x5/1000;		//百位
	 x6=x5-j[2]*1000;
	 j[1]=x6/100;		//十位
	 x7=x6-j[1]*100;
	 j[0]=x7/10;		//个位
 }
 void clk() interrupt 1 using 0
{        // 软件延时产生ADC0809的时钟 50KHZ	(12Mhz晶振)
        CLK1 =!CLK1;
	
}
 void display2() interrupt 3 using 0
{  		 
     if(count==2)
	 {P1=seg[j[count]]+0X80;}   //显示百位小数点
	else
	  {P1=seg[j[count]];}

    P3=~m[count];
	count++;
	if(count==4)
	count=0;

		TH1 =0X8A ;          // 重新装载初值
        TL1 =0XCF;
	 		
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -