📄 test.c
字号:
/////////okokokokokok//////////////
#include <reg51.h>
#include <stdio.h>
#include <math.h>
sbit P00=P0^0;sbit P01=P0^1;sbit P02=P0^2;sbit P03=P0^3;sbit P04=P0^4;sbit P05=P0^5;sbit P06=P0^6;sbit P07=P0^7;
sbit P10=P1^0;sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit P14=P1^4;sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;
sbit P20=P2^0;sbit P21=P2^1;sbit P22=P2^2;sbit P23=P2^3;sbit P24=P2^4;sbit P25=P2^5;sbit P26=P2^6;sbit P27=P2^7;
sbit P30=P3^0;sbit P31=P3^1;sbit P32=P3^2;sbit P33=P3^3;sbit P34=P3^4;sbit P35=P3^5;sbit P36=P3^6;sbit P37=P3^7;
unsigned long cs1,bcs1;
double ss;
char num[8]={0,0,0,0,0,0,0,0};
char bcs[8]={0,0,0,0,0,0,0,0};
char cs[8]={0,0,0,0,0,0,0,0};
char c[20]={0x0fc,0x060,0x0da,0x0f2,0x066,0x0b6,0x0be,0x0e0,0x0fe,0x0f6,0x0fd,0x061,0x0db,0x0f3,0x067,0x0b7,0x0bf,0x0e1,0x0ff,0x0f7} ;
void led();
void yima();
void receive();
void key();
void change();
void change2();
void delay(unsigned char n)
{
unsigned char x,y,z;
do
{
for(x=10;x>0;x--)
for(y=10;y>0;y--)
for(z=249;z>0;z--);
}
while(--n);
}
double f();
//................................以上为声明部分...........................................................................
//-------------------------------------- 主程序
void main()
{
P0=0x0ff;
P2=0XFF;
while(P11!=0);
delay(6);
receive();
delay(2);
change();
delay(1);
change2();
delay(1);
f();
delay(1);
yima();
delay(2);
led();
}
//========================================================
//子程序部分有
//接收数据子程序RECEIVE()
//将接收来的数据转换成完整的32位的数据的chang1()、chang2()
//计算最后结果的子程序F()
//将数据转换成相应位数值的译码子程序YIMA()
//段码显示子程序LED()
//==========================================================
//----------------------------------------led显示 程序
void led()
{char x,y;
SCON=0X00;
for(x=0;x<8;x++)
{
y=num[x];
SBUF=c[y];
while(!TI);
TI=0; //500ms
delay(1); }
while(1);
}
//-----------------------------------------接受程序
void receive()
{
char i;
P2=0x000;
for(i=0;i<8;i++)
{
delay(1);
num[i]=P0;
P2=P2+1;
}
}
//--------------------------------------------译码程序
void yima()
{
double x,z;
long y;
x=ss;
z=x;
//=====================================================将含有小数的值化为8位整数
if (x>=10000000) x=x;
else if (x>=1000000) x=10*x;
else if (x>=100000) x=100*x;
else if (x>=10000) x=1000*x;
else if (x>=1000) x=10000*x;
else if (x>=100) x=100000*x;
else if (x>=10) x=1000000*x;
else if (x>=1) x=10000000*x;
//=======================================================逐个将整数分离成单位整数
y=x;
num[0]=y/10000000;
num[1]=(y%10000000)/1000000;
num[2]=(y%1000000)/100000;
num[3]=(y%100000)/10000;
num[4]=(y%10000)/1000;
num[5]=(y%1000)/100;
num[6]=(y%100)/10;
num[7]=y%10;
//================================================================================
//在段码数组 C【】 中含有小数点的段码与不含小数点的差10,判断哪位为整数最后一位,就加10
//=================================================================================
x=z;
if (x<10000000 & x>=1000000) num[6]=num[6]+10;
else if (x>=100000) num[5]=num[5]+10;
else if (x>=10000) num[4]=num[4]+10;
else if (x>=1000) num[3]=num[3]+10;
else if (x>=100) num[2]=num[2]+10;
else if (x>=10) num[1]=num[1]+10;
else if (x>=1) num[0]=num[0]+10;
}
//------------------------------计算
double f()
{
double l;
l=(cs1*1.0/bcs1*1.0);//将其化为符点型
ss=20000000.0/l;
}
//---------------------------------------------接受进来的8位数分离成4位的待测频率数和标准频率数
void change()
{
char i,j,k;
for(i=0;i<8;i++)
{
cs[i]=num[i] & 0x0f;
bcs[i]=num[i] & 0xf0;
}
for(j=0;j<8;j++)
{
k=bcs[j];
switch(k)
{
case 0x000:bcs[j]=0x0;break;
case 0x010:bcs[j]=0x1;break;
case 0x020:bcs[j]=0x2;break;
case 0x030:bcs[j]=0x3;break;
case 0x040:bcs[j]=0x4;break;
case 0x050:bcs[j]=0x5;break;
case 0x060:bcs[j]=0x6;break;
case 0x070:bcs[j]=0x7;break;
case 0x080:bcs[j]=0x8;break;
case 0x090:bcs[j]=0x9;break;
case 0x0a0:bcs[j]=0x0a;break;
case 0x0b0:bcs[j]=0x0b;break;
case 0x0c0:bcs[j]=0x0c;break;
case 0x0d0:bcs[j]=0x0d;break;
case 0x0e0:bcs[j]=0x0e;break;
case 0x0f0:bcs[j]=0x0f;break;
default: break;
} } }
//-------------------------------------------------将数组合并成两个完整的32位数
void change2()
{
char i;
cs1=bcs1=0;
for(i=0;i<7;i++)
{
bcs1+=bcs[i];
bcs1<<=4;
cs1+=cs[i];
cs1<<=4;
}
bcs1+=bcs[7];
cs1+=cs[7];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -