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