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

📄 main.lst

📁 基于单片机的数字频率计
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  07/16/2007 12:56:06 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*一个机器周期采样值为1,下一个机器周期采样为0,则计数器加1*/
   2          /*外部事件的最高计数频率为晶振的1/24,故最高计数为0.9216M;*/
   3          /*目前状态下只是显示0到9999HZ的频率*/
   4          /*原创作者:陈永刚*/
   5          /*优化整理:tiansir*/
   6          
   7          /*测频率原理*/
   8          /*定时器T0作为定时装置,编程设定定时1s,定时器T1对外部信号计数,每1S中对计数结果处理*/
   9          
  10          #include<reg51.h> 
  11          #include<absacc.h>
  12          
  13          #define SEG_Q XBYTE[0xfcec]
  14          #define SEG_B XBYTE[0xfced]
  15          #define SEG_S XBYTE[0xfcee]
  16          #define SEG_G XBYTE[0xfcef]  
  17          
  18          //通用数码管显示函数,传入数据0~9999
  19          void renew_disp(unsigned int number)
  20          {
  21   1              unsigned char code tab1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  22   1              unsigned char temp,flag=0;
  23   1      
  24   1              if(number < 10000)
  25   1              {               
  26   2                      //千位数码管
  27   2                      temp = number/1000%10;
  28   2                      if (temp)
  29   2                      {
  30   3                              SEG_Q = tab1[temp];
  31   3                              flag = 1;       
  32   3                      }
  33   2                      else 
  34   2                      {
  35   3                              SEG_Q = 0xff;//数码管熄灭
  36   3                              flag = 0;       
  37   3                      }
  38   2      
  39   2                      //百位数码管
  40   2                      temp = number/100%10;           
  41   2                      if(flag | temp)
  42   2                      {
  43   3                              SEG_B = tab1[temp];
  44   3                              flag = 1;       
  45   3                      }
  46   2                      else 
  47   2                      {
  48   3                              SEG_B = 0xff;//数码管熄灭
  49   3                              flag = 0;       
  50   3                      }                                       
  51   2                      
  52   2                      //十位数码管
  53   2                      temp = number/10%10;
  54   2                      if(flag | temp) SEG_S = tab1[temp];             
  55   2                      else SEG_S = 0xff;//数码管熄灭          
C51 COMPILER V8.02   MAIN                                                                  07/16/2007 12:56:06 PAGE 2   

  56   2                      
  57   2                      //个位数码管
  58   2                      temp = number%10;       
  59   2                      SEG_G = tab1[temp];
  60   2              }
  61   1              else
  62   1              {
  63   2                      SEG_Q = 0xbf;
  64   2                      SEG_B = 0xbf;
  65   2                      SEG_S = 0xbf;
  66   2                      SEG_G = 0xbf;   
  67   2              }
  68   1      }
  69          
  70          //T0定时中断,晶振22.1184M
  71          void T0_int(void) interrupt 1
  72          {   
  73   1              static char counter=0;  
  74   1              TH0=(65536-46063)/256;
  75   1          TL0=(65536-46063)%256;
  76   1              if(counter++==39)                    
  77   1          { 
  78   2                      counter=0; 
  79   2                      TR1=0;          
  80   2                      renew_disp(256*TH1+TL1);
  81   2                      TH1=TL1=0;              
  82   2                      TR1=1;    
  83   2              }        
  84   1      }
  85          
  86          void main()
  87          { 
  88   1              TMOD = 0x51;/*01010001 T1计数,T0定时*/
  89   1              TH1 = 0;
  90   1              TL1 = 0;         
  91   1              //晶振22.1184M
  92   1              TH0 = (65536-46063)/256;//定时25MS
  93   1              TL0 = (65536-46063)%256; 
  94   1              TR0 = 1;                //开定时器0
  95   1              TR1 = 1;                //启动计时器1
  96   1              EA  = 1;                //开总中断
  97   1              ET0 = 1;                //开定时器0中断
  98   1              while(1);               //原地踏步,等待中断
  99   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    296    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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