永发信息网

怎样在一个四位一体化的数码管上显示出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();
}
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯