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

📄 llj.c

📁 一个流量测量系统程序设计,能检测流量,在可在加油站使用
💻 C
字号:
#include <reg52.h>
#include<absacc.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<intrins.h>
#include<stdarg.h>
#include<setjmp.h>
#define  BLCount                          0.00625      /*标定计数一次为多少L*/

#define x25045_cs     P10		/*p10*/
#define x25045_sck    P11		/*p11*/
#define x25045_si     P12		/*p12*/
#define x25045_so     P13		/*p13*/
#define x25045_wp     P14		/*p14*/
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char DisplayCount[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
/***********************x25045***************************************/

void x25045_init();                                     /*看门狗初始化*/                      
void x25045_feed();                                     /*喂狗*/


void x25045_wrbt(uint address,uchar indata);           /*写和读某个地址的一个字节的数据*/
uchar x25045_rdbt(uint address);


void  x25045_outb(uchar indata);

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

static float   OldCount=0;    /*记录上次记录*/
/*延时1ms程序*/
void DelayTime()
{
	TH0=0XD8;
	TL0=0XEF;
	TR0=1;
	while(!TF0);
	TR0=0;
	return;
}
void Rev_TI() interrupt 4 using 3
{
	if(TI)
	{
		TI=0;
	}
}		

void OutCount(float SumCount)
{
	int TempCount[4],Temp,Countx;
	x25045_feed();
	Temp=(int)SumCount;
	TempCount[0]=(int)((SumCount-Temp)*10); /*小数点后一位*/
	TempCount[3]=(int)(Temp/100);    /*百位数*/
	TempCount[2]=(int)(Temp-TempCount[3]*100)/10; /*十位数*/
	TempCount[1]=(int)(Temp-TempCount[3]*100-TempCount[2]*10);/*个位数*/
	for(Countx=3;Countx>=0;Countx--)
	{
		while(TI);
		if(Countx==1)
		{
			ACC=DisplayCount[TempCount[Countx]]&0XFE;
			SBUF=ACC;
		}
		else
		{
			ACC=DisplayCount[TempCount[Countx]];
			SBUF=ACC;
		}
		x25045_feed();
	}
	return;
}
/*x25045模块开始++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void x25045_outb(uchar outdata)
{uchar i;
  for(i=1;i<=8;i++)
    {x25045_sck=0;
     outdata=outdata<<1;
     x25045_si=CY;
     x25045_sck=1;
     }
  x25045_si=0;
}

uchar x25045_inb()
{
  uchar i,j,k=0;
    for (i=1;i<=8;i++)
      {x25045_sck=1;
       x25045_sck=0;
       j=(x25045_so==1)?1:0;
       k=(k<<1)|j; 
      }
  return(k);
}

uchar x25045_rdsr()
{uchar i;
 x25045_sck=0;
 x25045_cs=0;
 x25045_outb(0x05);
 i=x25045_inb();
 x25045_sck=0;
 x25045_cs=1;
 return i;
}

void x25045_wipp()
{uchar i;
 uchar j;
 for (i=1;i<=99;i++)
 {
  j=x25045_rdsr();
  if ((j&0x01)==0) /*判断是否wip=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等待直到达到99次*/ 
    {break;}	  
 }
}


void x25045_wren()                      /*初始化函数之一*/
{	x25045_sck=0;
	x25045_cs =0;
	x25045_outb(0x06);
	x25045_sck=0;
	x25045_cs=1;
}

void x25045_wrdi()                      /*初始化函数之一*/
{	x25045_sck=0;
	x25045_cs =0;
	x25045_outb(0x04);
	x25045_sck=0;
	x25045_cs=1;
}

void x25045_wrsr()                     /*初始化函数之一*/
{	x25045_sck=0;
	x25045_cs =0;
	x25045_outb(0x01);
	x25045_outb(0x00);	               /*看门狗时间设置*/
	x25045_sck=0;
	x25045_cs=1;
	x25045_wipp();
}






void x25045_feed()
{	x25045_cs=0;
	_nop_();
	x25045_cs=1;	
}
 
void x25045_init()
{
x25045_wren();
x25045_wrsr();
x25045_wrdi();
}
/*x25045模块结束++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void InitMain()
{
	x25045_init();
	TCON=0X00;
	IE=0X90;  /*开串行口中断*/
	IP=0X00;  /*低优先级*/
	TMOD=0X50;/*T0为计时器,T1为计数器*/
	SCON=0X10;
	TH0=0;
	TL0=0;
	TH1=0;
	TL1=0;
	TR1=1;
	return;
	
}
void main()
{
	int HCount,LCount,Count,time;
	float SumCount;
	int flag;
	InitMain();
	while(1)
	{
		x25045_feed();
		HCount=TH1;
		LCount=TL1;
		Count=HCount*16+LCount;
		TH1=0;
		TL1=0;
		SumCount=(Count*BLCount+OldCount)*1.0;
		OldCount=SumCount;
		OutCount(SumCount);
		for(time=1;time<=500;time++)
		{
			flag=P21;
			if(!flag)
			{
				OldCount=0;
				SumCount=0;
				OutCount(0);
			}
			x25045_feed();
			DelayTime();
		}
	}
	return;
}

⌨️ 快捷键说明

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