📄 endall.c
字号:
#include <reg51.h>
unsigned char dispcode[]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
unsigned char L0=0;
unsigned char L1=0;
unsigned char L2=0;
unsigned char L3=0;
unsigned char T0count=0;
bit flag=0;
/*************************************
程序及中断初始化
************************************/
void mcu_int(void)
{
TMOD=0x1D; //T1为16位计时器模式,T0为16位计数器模式
TH1=0x3C;
TL1=0xB0; //初值,产生50ms中断
TH0=0x00;
TL0=0x00; //计数初值
EA=1; //开放所有中断
ET1=1; //允许T1中断
ET0=1; //允许T0中断
TR0=1;
TR1=1; //开始定时/计数
}
void delay(int j)
{
while (j!=0)
{
unsigned char i;
for(i=100;i>0;i--);
j--;
}
}
/***********************************
数码管显示
***********************************/
void show(void)
{
P2=0x01;P0=dispcode[L0]; //L1为个位显示数字0x01,0x02,0x04,0x08
delay(1);
P2=0x02;P0=dispcode[L1];
delay(1);
P2=0x04;P0=dispcode[L2];
delay(1);
P2=0x08;P0=dispcode[L3];
delay(1);
}
/*****************************
对计得的数进行处理,返回FX及显示关键字LX
****************************/
unsigned long int FX;
void process()
{
FX=T0count*65536+TH0*256+TL0;
if(FX>3500&&FX<=8000) //以下两个 if语句 为修正所测频率
{
FX=FX-1;
}
if(FX>8000&&FX<=12000)
{
FX=FX-1.3;
}
if(FX>9999)
FX=FX/1000;
L0=(FX%10)/1; //L1为个位显示的数字值//
L1=(FX%100)/10; //L2为十位显示的数字值//
L2=(FX%1000)/100; //L3为百位显示的数字值//
L3=(FX%10000)/1000; //L4为千位显示的数字值//
}
main()
{
mcu_int();
while(1)
{
if(flag==1)
{
process();
TH0=0x00;
TL0=0x00;
flag=0;
}
show();
/*
P2=0x01;P0=dispcode[10];
delay(2);
P2=0x02;P0=dispcode[11];
delay(2);
P2=0x04;P0=dispcode[12];
delay(2);
P2=0x08;P0=dispcode[13];
delay(2);
*/
}
}
void Timer0() interrupt 1 using 0
{
TH0=0x00;
TL0=0x00;
T0count++;
}
unsigned char Time_50ms;
void Timer1() interrupt 3 using 1
{
TH1=0x3C;
TL1=0xB0;
Time_50ms++;
if(Time_50ms==20)
{
Time_50ms=0;
flag=1;
// P2=0x01;P0=dispcode[10];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -