⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bh1415.lst

📁 基于单片机的BH1415控制做的调频发射机控制系统源程序
💻 LST
字号:
C51 COMPILER V7.00  BH1415                                                                 08/17/2007 21:01:05 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE BH1415
OBJECT MODULE PLACED IN BH1415.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE BH1415.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #define uchar unsigned char
   2          #define uint  unsigned int
   3          #include "REG52.H"
   4          #include "BH1415.H"
   5          
   6          //按键定义
   7          sbit key_select=P1^0;//频率位数选择
   8          sbit key_add   =P1^1;//频率值加一
   9          sbit key_del   =P1^2;//频率值减一
  10          
  11          uchar code num[]={ 0x3F,0x06,0x5B,0x4F,
  12                                                           0x66,0x6D,0x7D,0x07,
  13                                                           0x7F,0x6F,0x77,0x7C,
  14                                                           0x39,0x5E,0x79,0x71};
  15          uchar fre[4];   //要设定的四位发射频率,如99.90MHz
  16          uchar key;              //频率的第几位数的选择
  17          bit flag;               //频率是否已更改
  18          uchar count,count2; //count2 用于brind()闪烁函数作延时是否到了的标志
  19                                                            //count 用于标志当前状态,为1则进入了频率设置
  20          
  21          void display(uchar *p);
  22          void delayms(uchar i);
  23          void scankey(void);
  24          void brind();
  25          
  26          //功能: 主程序
  27          void main(void)
  28          {
  29   1              fre[0]=1;
  30   1              fre[1]=0;
  31   1              fre[2]=1;
  32   1              fre[3]=8;
  33   1              /////////////////////////////////////////////////////
  34   1              while(1)
  35   1              {
  36   2                      display(fre); //显示四位频率值
  37   2                      scankey();
  38   2                      //-----------------
  39   2                      if(flag==1)
  40   2                      {
  41   3                              writefrequency(fre);
  42   3                              flag=0;
  43   3                      }
  44   2                      //-----------------
  45   2                 if(count==1)//如果处于设置状态则设置位正在闪烁
  46   2                      brind();
  47   2              }
  48   1              /////////////////////////////////////////////////////
  49   1      
  50   1      }
  51          
  52          //功能: 显示四位频率值
  53          void display(uchar *p)
  54          {
  55   1              if( ((count==1)&&(key!=0)) || (count!=1) ){
C51 COMPILER V7.00  BH1415                                                                 08/17/2007 21:01:05 PAGE 2   

  56   2              P2=0x0fe;//数码管位选1
  57   2              P3=num[*(p+0)];
  58   2              delayms(2);
  59   2              P2=0x0ff;
  60   2        }
  61   1      
  62   1         if( ((count==1)&&(key!=1)) || (count!=1) ){
  63   2              P2=0xffd;//数码管位选2
  64   2              P3=num[*(p+1)];
  65   2              delayms(2);
  66   2              P2=0x0ff;
  67   2        }
  68   1      
  69   1         if( ((count==1)&&(key!=2)) || (count!=1) ){
  70   2              P2=0xfb;//数码管位选3
  71   2              P3=num[*(p+2)]|0x80;//显示小数点
  72   2              delayms(2);
  73   2              P2=0xff;
  74   2        }
  75   1      
  76   1         if( ((count==1)&&(key!=3)) || (count!=1) ){
  77   2              P2=0xf7;//数码管位选4
  78   2              P3=num[*(p+3)];
  79   2              delayms(2);
  80   2              P2=0xff;
  81   2        }
  82   1      }
  83          
  84          //功能: 选择中的频率位闪烁
  85          void brind()
  86          {
  87   1              uchar i,temp;
  88   1              switch(key)
  89   1              {
  90   2                      case 0:temp=0xfe;break;
  91   2                      case 1:temp=0xfd;break;
  92   2                      case 2:temp=0xfb;break;
  93   2                      case 3:temp=0xf7;break;
  94   2                      default:break;
  95   2              }
  96   1              count2++;
  97   1              if(count2>40)
  98   1         {
  99   2                count2=0;
 100   2           ///////////
 101   2                for(i=20;i>0;i--)
 102   2                {
 103   3                 P2=temp;//数码管位选
 104   3                 P3=num[*(fre+key)];//当前正在操作的数据位闪烁
 105   3                      delayms(2);
 106   3                 P2=0xff;
 107   3                      display(fre);
 108   3                }
 109   2                //////////
 110   2         }
 111   1      }
 112          
 113          //功能: 通用延时程序
 114          void delayms(uchar i)
 115          {
 116   1              uchar n=10;
 117   1              while(i--)
C51 COMPILER V7.00  BH1415                                                                 08/17/2007 21:01:05 PAGE 3   

 118   1              while(n--);
 119   1      }
 120          
 121          //功能: 按键扫描,执行后可能改变的值:flag,key,fre[key]
 122          void scankey(void)
 123          {
 124   1         //数码管位选择按键 key_select
 125   1              if(key_select==0)       //频率位选择
 126   1              {
 127   2                      delayms(5);
 128   2                      if(key_select==0)
 129   2                      {
 130   3                              while(key_select==0)
 131   3                           display(fre); //在按键未松开时进行显示,避免按下不放时没有显示数值
 132   3      
 133   3                              if(count==0) count=1; //这样可以识别key_select这个按键是否是第一次按下
 134   3                                                                                       //也提供了一个count==1的标志给其它函数指示
 135   3                              else
 136   3                              {
 137   4                                  key++;
 138   4                                  if(key>3)
 139   4                                 {
 140   5                                   key=0;
 141   5                                        flag=1;
 142   5                                   count=0;//当最后一位频率值设定后再按此键就标志完成一次频率修改
 143   5                                                               //这样就可以减少一个确定按键的使用
 144   5                                 }
 145   4                                       else
 146   4                                       switch(key)
 147   4                                       {
 148   5                                              case 2:if((fre[0]==1)&&(fre[1]>=2)) {fre[2]=0;fre[1]=2;}
 149   5                                                               else if((fre[0]==0)&&(fre[1]<7)) fre[1]=7;break;
 150   5                                              case 3:if((fre[0]==1)&&(fre[1]==2)) fre[2]=fre[3]=0;break;
 151   5                                              default:break;
 152   5                                       }
 153   4                              }
 154   3                      }
 155   2              }
 156   1      
 157   1              //频率值加一按键 key_add
 158   1              if(key_add==0) //频率值增加
 159   1              {
 160   2                      delayms(5);
 161   2                      if(key_add==0)
 162   2                      {
 163   3                              while(key_add==0) display(fre);
 164   3                              fre[key]++;
 165   3                              switch(key)
 166   3                              {
 167   4                                      case 0:if(fre[key]>1) fre[key]=0;break;
 168   4                                      case 1:if((fre[0]==1)&&(fre[1]>2)) fre[key]=0;
 169   4                                                       else if((fre[0]==0)&&(fre[key]>9)) fre[key]=7;
 170   4                                                       else   if((fre[0]==0)&&(fre[key]<7)) fre[key]=9;
 171   4                                                       else if(fre[key]>9) fre[key]=0;break;
 172   4      
 173   4                                      case 2:if((fre[0]==1)&&(fre[1]>=2)) {fre[2]=0;fre[1]=2;}
 174   4                                                       else if(fre[key]>9) fre[key]=0;
 175   4                                                       if((fre[0]==0)&&(fre[1]<7)) fre[1]=7;
 176   4                                                       break;
 177   4      
 178   4                                      case 3:if((fre[0]==1)&&(fre[1]==2)) fre[2]=fre[3]=0;
 179   4                                                       else if(fre[key]>9) fre[key]=0;break;
C51 COMPILER V7.00  BH1415                                                                 08/17/2007 21:01:05 PAGE 4   

 180   4                                      default:break;
 181   4                              }
 182   3                      }
 183   2              }
 184   1              
 185   1              //频率值减一按键 key_del
 186   1              if(key_del==0) //频率值减小
 187   1              {
 188   2                      delayms(5);
 189   2                      if(key_del==0)
 190   2                      {
 191   3                              while(key_del==0) display(fre);
 192   3                              if(fre[key]==0)
 193   3                                      fre[key]=9;
 194   3                              else
 195   3                                      fre[key]--;
 196   3                      }
 197   2              }
 198   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    743    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -