怎样在一个四位一体化的数码管上显示出1-5000HZ的频率,频率就是单片
答案:1 悬赏:0 手机版
解决时间 2021-03-09 19:22
- 提问者网友:川水往事
- 2021-03-08 23:45
怎样在一个四位一体化的数码管上显示出1-5000HZ的频率,频率就是单片
最佳答案
- 五星知识达人网友:执傲
- 2021-03-09 01:07
#include
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsigned char scanled;
unsigned char disdat[4];
unsigned int freq=100,cnt=0;
sbit pluse=P2^5;
sbit keyup=P1^0;
sbit keydn=P1^1;
sbit keymin=P1^2;
sbit keymax=P1^3;
void dischg()
{
disdat[0]=freq%10;
disdat[1]=(freq%100)/10;
disdat[2]=(freq%1000)/100;
disdat[3]=freq/1000;
}
void t0isr() interrupt 1
{
cnt++;
if(cnt>=freq)
{
cnt=0;
pluse=~pluse;
}
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[3]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[2]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[1]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=4;
}
main()
{
TMOD=0x12;
TH0=156;
TL0=156;
TR0=1;
ET0=1;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
EA=1;
scanled=0;
dischg();
while(1)
{
if(keyup==0){while(keyup==0);if(freq<4991)freq+=10;}
if(keydn==0){while(keydn==0);if(freq>10)freq-=10;}
if(keymin==0){while(keymin==0);freq=1;}
if(keymax==0){while(keymax==0);freq=5000; }
dischg();
}
}
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsigned char scanled;
unsigned char disdat[4];
unsigned int freq=100,cnt=0;
sbit pluse=P2^5;
sbit keyup=P1^0;
sbit keydn=P1^1;
sbit keymin=P1^2;
sbit keymax=P1^3;
void dischg()
{
disdat[0]=freq%10;
disdat[1]=(freq%100)/10;
disdat[2]=(freq%1000)/100;
disdat[3]=freq/1000;
}
void t0isr() interrupt 1
{
cnt++;
if(cnt>=freq)
{
cnt=0;
pluse=~pluse;
}
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[3]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[2]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[1]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=4;
}
main()
{
TMOD=0x12;
TH0=156;
TL0=156;
TR0=1;
ET0=1;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
EA=1;
scanled=0;
dischg();
while(1)
{
if(keyup==0){while(keyup==0);if(freq<4991)freq+=10;}
if(keydn==0){while(keydn==0);if(freq>10)freq-=10;}
if(keymin==0){while(keymin==0);freq=1;}
if(keymax==0){while(keymax==0);freq=5000; }
dischg();
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯