📄 sun.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include <intrins.h>
#include <absacc.h>
#include <main.h>
float f_data;
xdata uchar indata[20];
xdata uchar out_data[10];
code uchar p_float[7]={0x0f,0x17,0x1f,0x27,0x2f,0x37,0x3f};
code uchar sign[7]={0x0e,0x16,0x1e,0x26,0x2e,0x36,0x3e};
//////////////////////////////////////////////////////////
///***************************************************************//
//7281
//*****************************************************************//
void delay(unsigned int dd)
{
unsigned int i;
for(i=0;i<dd;i++);
return;
}
/***********************接受 符号*********************************************/
/*****************************************************************************/
unsigned char receive(void)
{ unsigned char i,k=0;
clk=0;
clk=1;
while(dat);
clk=0;
clk=1;
for(i=0;i<8;i++)
{ delay(4);
k=k<<1;
if(dat) k=k|0x01;
else k=k&0xfe;
clk=0;
clk=1;
}
return k;
}
/***********************************写入*******************************************/
/**********************************************************************************/
void wr_7281(unsigned char b)
{unsigned char i;
do{
clk=0;
clk=1;
} //B为控制字,C为数据
while(dat);
clk=0;
clk=1;
while(!dat); //建立握手信?
for(i=0;i<8;i++)
{ if(b<0x80)dat=0;
else dat=1;
clk=0;
clk=1;
b=b<<1;
delay(2);
}
dat=1;
delay(2);
return ;
}
/**********************************显示位**************************************/
/******************************************************************************/
void setdisplay(uchar *p,uchar digit )
{ unsigned m,i;
for(i=0;i<digit;i++)
{
m=i<<4;
wr_7281(0x15);
wr_7281(m|p[i]);
}
return;
}
//****************************************运算结果进行输出*************************
void LED_OUT()
{ uchar end_cunt, p_cunt; //分别为浮点数长度和小数点位置
uchar i,j;
if(f_data==0) //如果运算结果位0,则仅在最右一位LED显示一个0
{
out_data[0]=0;
setdisplay(out_data,1 );
}
else if(f_data>0) //如果运算结果大于0
{
sprintf(indata,"%f",f_data); //把一个浮点数复制给一个字符串变量
if(f_data>99999999)
{ wr_7281(0x18); //设置段显示
wr_7281(0x00); //显示E 意思为错误或溢出
wr_7281(0x03); //显示E 意思为错误或溢出
wr_7281(0x04); //显示E 意思为错误或溢出
wr_7281(0x05); //显示E 意思为错误或溢出
wr_7281(0x06); //显示E 意思为错误或溢出
return;
}
j=0;
end_cunt=0;
p_cunt=0;
for(i=0;i<9;i++)
{
if(indata[i]!=".")
{
if(indata[i]=="/0")
{
end_cunt=i; // 保存浮点长度
break;
}
out_data[j]=indata[i];
j++;
}
if(indata[i]==".")
p_cunt=i; //保存小数点位置
}
if(p_cunt==0 && end_cunt!=0) //无小数点显示小于8位LED
{
setdisplay(out_data,end_cunt );
}
if( p_cunt!=0 && end_cunt!=0) //有小数点显示小于8位LED
{
wr_7281(0x18); //设置成段显示
wr_7281(p_float[end_cunt-p_cunt-2]); //显示小数点
setdisplay(out_data,end_cunt-1 );
}
if( p_cunt!=0 && end_cunt==0) //有点超长
{
wr_7281(0x18); //设置成显示小数
wr_7281(p_float[7-p_cunt]); //显示小数点
setdisplay(out_data,8 );
}
}
else
{
sprintf(indata,"%f",f_data);
if(f_data<-9999999)
{wr_7281(0x18); //设置段显示
wr_7281(0x00); //显示E 意思为错误或溢出
wr_7281(0x03); //显示E 意思为错误 或溢出
wr_7281(0x04); //显示E 意思为错误 或溢出
wr_7281(0x05); //显示E 意思为错误 或溢出
wr_7281(0x06); //显示E 意思为错误或溢出
return;
}
j=0;
end_cunt=0;
p_cunt=0;
for(i=0;i<8;i++)
{
if(indata[i]!=".")
{
if(indata[i]=="/0")
{
end_cunt=i;
break;
}
out_data[j]=indata[i];
j++;
}
if(indata[i]==".")
p_cunt=i;
}
if(p_cunt==0 && end_cunt!=0) //无点不超长
{
wr_7281(0x18); //设置成段显示
wr_7281(sign[end_cunt-1]); //显示负号
setdisplay(out_data,end_cunt);
}
if( p_cunt!=0 && end_cunt!=0) //有点不超长
{
wr_7281(0x18); //设置成显示小数
wr_7281(p_float[end_cunt-p_cunt-2]); //显示小数点
wr_7281(sign[end_cunt-2]); //显示负号
setdisplay(out_data,end_cunt);
}
if( p_cunt!=0 && end_cunt==0) //有点超长
{
wr_7281(0x18); //设置成段显示
wr_7281(p_float[6-p_cunt]); //显示小数点
wr_7281(sign[6]); //最高位显示负号
setdisplay(out_data,7);
}
}
return;
}
//*************************************************************************************
float add_all(uchar *p_i,uchar *p_f,uchar count) //数组中十进制转化为浮点型数据
{
float add_a;
uchar tr,i;
for(i=0;i<(count+1)/2;i++) //交换输入顺序
{
tr=p_i[i];
p_i[i]=p_i[count-i];
p_i[count-i]=tr;
}
add_a=p_i[7]*10000000+
p_i[6]*1000000+
p_i[5]*100000+
p_i[4]*10000+
p_i[3]*1000+
p_i[2]*100+
p_i[1]*10+
p_i[0];
add_a=add_a+
p_f[0]*0.1+
p_f[1]*0.01+
p_f[2]*0.001+
p_f[3]*0.0001+
p_f[4]*0.00001+
p_f[5]*0.000001+
p_f[6]*0.0000001;
return add_a;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -