#include
#define uchar unsigned char
#define uint unsigned int
uchar code Disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Disp_Sel[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uchar aa=0;
long f;
void init();
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
unsigned char num=0;
uint ff;
long bb;
uchar count;
uchar first;
void display();
void diffence();
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<112;j++);
}
void main()
{
init();
first=0;
while(1)
{
display();
}
}
void display()
{
P0=0XFF;
P1=0XFF;
P0=Disp_Sel[0];
P1=Disp[bb%10];
delay(1);
P0=Disp_Sel[1];
P1=Disp[bb%100/10];
delay(1);
P0=Disp_Sel[2];
P1=Disp[bb%1000/100];
delay(1);
P0=Disp_Sel[3];
P1=Disp[bb%10000/1000];
delay(1);
P0=Disp_Sel[4];
P1=Disp[bb%100000/10000];
delay(1);
P0=Disp_Sel[5];
P1=Disp[bb%1000000/10000];
delay(1);
P0=Disp_Sel[6];
P1=Disp[bb%10000000/100000];
delay(1);
P0=Disp_Sel[7];
P1=Disp[bb/100000000];
delay(1);
}
void init()
{
TMOD=0x51;//T1计数。T0定时
TH1=0;
TL1=0;
TH0=(65536-50000)/256;//T0初值为50ms
TL0=(65536-50000)%256;
TR0=1;
TR1=1;
EA=1;
ET0=1;
}
void TT0() interrupt 1
{
TH0=(65536-50000)/256;//重赋T0初值为50ms
TL0=(65536-50000)%256;
aa++;
if(first == 0)//开始测频时,单片机进行粗略的计算
{
if(aa==20)
{
first =1;
aa=0;
f = (TH1*256 + TL1)+ff*65536;
ff=0;
TL1 = 0;
TH1 = 0;
diffence();//分挡位
}
}
else//分频后,精确测频
{
if(aa==20)
{
first =0;
aa=0;
bb = (TH1*256 + TL1)+ff*65536;
ff=0;
TL1 = 0;
TH1 = 0;
switch(count)
{
case 0:bb=bb*1;break;
case 1:bb=bb*10;break;
case 2:bb=bb*100;break;
case 3:bb=bb*1000;break;
case 4:bb=bb*10000;break;
case 5:bb=bb*100000;break;
case 6:bb=bb*1000000;break;
case 7:bb=bb*10000000;break;
default:break;
}
}
}
}
void diffence()//分挡位
{
if(f < 5000)
count=0;
else if(((f == 5000)||(f > 5000)) && ((f == 10000)||(f < 10000)))
count=1;
else if((f > 10000) && (f <= 50000))
count=2;
else if((f>50000)&&(f<=100000))
count=3;
else if((f>100000)&&(f<=500000))
count=4;
else if((f>500000)&&(f<=1000000))
count=5;
else if((f>1000000)&&(f<=10000000))
count=6;
else if((f>100000000)&&(f<=200000000))
count=7;
switch(count)//
{
case 0:P21=0;P22=0;P23=0;break;
case 1:P21=0;P22=0;P23=1;break;
case 2:P21=0;P22=1;P23=0;break;
case 3:P21=0;P22=1;P23=1;break;
case 4:P21=1;P22=0;P23=0;break;
case 5:P21=1;P22=0;P23=1;break;
case 6:P21=1;P22=1;P23=0;break;
case 7:P21=1;P22=1;P23=1;break;
default:break;
}
}
void TT1() interrupt 3
{
ff++;
}
我看前两句了,这个程序是液晶显示么?你编译的时候哪里出现问题了,错误提示是什么,我这台电脑上没有编译器
回复 沙发 常见泽1 的帖子
这个程序 是一个测频率计的 程序 现在显示不正常
回复 板凳 jjkwz 的帖子
是数码管显示的 没有达到想要的效果 测频率 不对 显示的时候有影子出现