📄 llj.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 + -