找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1516|回复: 3
打印 上一主题 下一主题
收起左侧

我这单片机程序应该怎么改?读入一个频率,判断频率范围

[复制链接]
跳转到指定楼层
楼主
ID:447528 发表于 2019-8-10 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
读入一个频率,判断频率范围,在数码管上显示相应频率对应的数码,现在能判断一次,然后数码管显示会卡在第一次频率对应的数值,读入不了新的对应数码
#include <reg52.h>

       sbit beep=P1^5;                //定义蜂鸣器接口
         sbitk1 = P3^0;          //定义测量启动按键
         sfr16DPTR = 0x80;  //定义DPTR
         unsignedchar code LEDcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
   unsigned char Count,f;
         inta,b;

  void delay(unsigned char m)      //延时函数
   {
         while(m--);
   }

  void init()                                         //定时计数器初始化
         {
            f=0;
            a=0;
      b=0;
            TMOD = 0X15;
            TH0 = 0x00;          //计数器0初始化,计数初值为0000H
            TL0 = 0x00;
            TR0 = 0;

            TH1 = 0xd8;    // 定时器1初始化,定时时间0.01
            TL1 = 0xf0;
          TR1 = 0;
            IE=0X8A;
         }
  void int0()interrupt 1  //计数器T0计数
         {
         a++;
//      TH0=0X00;
//      TL0=0X00;
   TR0=1;
                   }
         voidint1()interrupt 3  //定时器T1
         {b++;
//      if(b==100)
//      {TR1=0;}
//      else
         TH1=0xd8;
         TL1=0Xf0;
         TR1=1;
                   }
         voidduanlu()     //
         {
         if(f<0)
         {
         beep=1;
         delay(500);
         beep=0;
         }
         }

         voidmain()        //主函数
         {
                   init();                  
                while(1)
         {  
//               Count=0;   
//        P0=LEDcode[Count/10];        //十位送数码管十位显示
//        P2=LEDcode[Count%10];   //个位送数码管个位显示

         if(k1==0)  
  {     
     f=0;
      TR0 = 1;
        TR1 = 1;
     if(b==100)
         {
             while(1)
           {
                TR0=0;
                TR1=0;
          DPH=TH0;
                DPL=TL0;
                      f=(a*65535+DPTR);
         //      P0=LEDcode[f%10000];
/*     switch(f/1000)
         {
         case(5):P0=0x06;break;
         case(6):P0=0x5b;break;
         case(7):P0=0x4f;break;
         default:P0=0x66;break;
         }  *****/
         if(4.6<=f<5.0 ) {P0=0x06;}
   else if( 5.8<=f<6.0 ) {P0=0x5b;}
   else if( 6.7<=f<7.0 ) {P0=0x4f;}
         elseif( 7.5<=f<7.8 ) {P0=0x66;}
         elseif( 8.0<=f<8.6 ) {P0=0x6d;}
         elseif( 9.0<=f<9.4 ) {P0=0x7d;}
         elseif( 9.7<=f<10.0 ) {P0=0x07;}
         elseif( 10.2<=f<11.0 ) {P0=0x7f;}
         elseif( 11.3<=f<11.6 ) {P0=0x6f;}
//      if(9.8<=f<10.0 ) {P0=0x66;}
//      if(8.65<=f<8.67 ) {P0=0x6d;}
//      if(11.5<=f<12.0 ) {P0=0x7d;}
//      if(12<=f<12.5) {P0=0x07;}
//      if(8<=f<9 ) {P0=0x7f;}
//      if(9<=f<10 ) {P0=0x6f;}

   beep=1;
   delay(500);
         beep=0;
}
}
}        
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2019-8-11 06:38 | 只看该作者
  if(4.6<=f&&f<5.0 )
回复

使用道具 举报

板凳
ID:213173 发表于 2019-8-11 11:19 | 只看该作者
《sfr16DPTR = 0x80;  //定义DPTR 》 这是什么鬼,难道要另外定义P0地址?
回复

使用道具 举报

地板
ID:377268 发表于 2019-8-12 00:09 | 只看该作者
if判断写错啦  C 不能这么写
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表