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

📄 main.lst

📁 一个动态扫描程序,学习如何利用单片机来控制动态扫描的数码管.希望对学单片机的朋友有帮助.
💻 LST
字号:
C51 COMPILER V7.09   MAIN                                                                  05/11/2008 15:41:35 PAGE 1   


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

line level    source

   1          /*
   2                  main.c
   3                  数码管的动态扫描显示
   4          */
   5          
   6          
   7          #include <reg51.h>
   8          #include <absacc.h>
   9          #include <ctype.h>
  10          
  11          
  12          //定义显示缓冲区(由定时中断程序自动扫描)
  13          unsigned char DispBuf[8];
  14          
  15          
  16          /*
  17          函数:T1INTSVC()
  18          功能:定时器T1的中断服务函数
  19          */
  20          void T1INTSVC() interrupt 3
  21          {
  22   1              code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  23   1              static unsigned char n = 0;
  24   1              TR1 = 0;
  25   1              TH1 = 0xFC;
  26   1              TL1 = 0x66;
  27   1              TR1 = 1;
  28   1              P1 = 0xFF;              //暂停显示
  29   1              XBYTE[0xE800] = ~DispBuf[n];    //更新扫描数据
  30   1              P1 = ~com[n];   //重新显示
  31   1              n++;
  32   1              n &= 0x07;
  33   1      }
  34          
  35          
  36          /*
  37          函数:DispClear()
  38          功能:清除数码管的所有显示
  39          */
  40          void DispClear()
  41          {
  42   1              unsigned char i;
  43   1              for ( i=0; i<8; i++ )
  44   1              {
  45   2                      DispBuf[i] = 0x00;
  46   2              }
  47   1      }
  48          
  49          
  50          /*
  51          函数:DispChar()
  52          功能:在数码管上显示字符
  53          参数:
  54                  x:数码管的坐标位置(0~7)
  55                  c:要显示的字符(仅限16进制数字和减号)
C51 COMPILER V7.09   MAIN                                                                  05/11/2008 15:41:35 PAGE 2   

  56                  dp:是否显示小数点,0-不显示,1-显示
  57          */
  58          void DispChar(unsigned char x, unsigned char c, bit dp)
  59          {
  60   1              code unsigned char Tab[] =
  61   1              {//定义0123456789AbCdEF的数码管字型数据
  62   1                      0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  63   1                      0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
  64   1              };
  65   1              unsigned char t;        //临时变量
  66   1      //防止显示位置超出范围
  67   1              x &= 0x07;
  68   1              x = 7 - x;
  69   1      //分析字符c,取得对应的数码管字型数据
  70   1              if ( c == '-' )
  71   1              {
  72   2                      t = 0x40;
  73   2              }
  74   1              else
  75   1              {
  76   2                      t = toint(c);   //toint()为库函数,详见C:\Keil\C51\HLP\C51.pdf
  77   2                      if ( t < 16 )   //如果是16进制字符
  78   2                      {
  79   3                              t = Tab[t];     //查表,取得数码管字型数据
  80   3                      }
  81   2                      else
  82   2                      {
  83   3                              t = 0x00;       //如果是其它字符则显示为空白
  84   3                      }
  85   2              }
  86   1      //检查是否显示小数点
  87   1              if ( dp )
  88   1              {
  89   2                      t |= 0x80;
  90   2              }
  91   1              else
  92   1              {
  93   2                      t &= 0x7F;
  94   2              }
  95   1      //送到显示缓冲区显示
  96   1              DispBuf[x] = t;
  97   1      }
  98          
  99          
 100          /*
 101          函数:DispInit()
 102          功能:数码管扫描显示初始化
 103          */
 104          void DispInit()
 105          {
 106   1              DispClear();    //初始为全灭
 107   1              EA = 0;
 108   1              TMOD &= 0x0F;
 109   1              TMOD |= 0x10;
 110   1              TH1 = 0xFC;
 111   1              TL1 = 0x66;
 112   1              TR1 = 1;
 113   1              ET1 = 1;
 114   1              EA = 1;
 115   1      }
 116          
 117          
C51 COMPILER V7.09   MAIN                                                                  05/11/2008 15:41:35 PAGE 3   

 118          /*
 119          函数:Delay()
 120          功能:延时0.01~2.56s
 121          参数:
 122                  t>0时,延时(t*0.01)s
 123                  t=0时,延时2.56s
 124          */
 125          void Delay(unsigned char t)
 126          {
 127   1              do
 128   1              {
 129   2                      TH0 = 0xDC;
 130   2                      TL0 = 0x00;
 131   2                      TR0 = 1;
 132   2                      while ( !TF0 );
 133   2                      TR0 = 0;
 134   2                      TF0 = 0;
 135   2              } while ( --t != 0 );
 136   1      }
 137          
 138          
 139          /*
 140          函数:SysInit()
 141          功能:系统初始化
 142          */
 143          void SysInit()
 144          {
 145   1              TMOD &= 0xF0;
 146   1              TMOD |= 0x01;   //设置定时器T0为16位定时器
 147   1              DispInit();             //数码管扫描显示初始化
 148   1      }
 149          
 150          
 151          void main()
 152          {
 153   1              code unsigned char s[] = "0123456789ABCDEF";
 154   1              unsigned char i;
 155   1              unsigned char x;
 156   1              bit dp;
 157   1              SysInit();
 158   1              dp = 0;
 159   1              for (;;)
 160   1              {
 161   2                      for ( i=0; i<16; i++ )
 162   2                      {
 163   3                              for ( x=0; x<8; x++ )
 164   3                              {
 165   4                                      DispChar(x,s[i],dp);
 166   4                              }
 167   3                              Delay(60);
 168   3                      }
 169   2                      dp = !dp;
 170   2              }
 171   1      }
 172          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    238    ----
   CONSTANT SIZE    =     41    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.09   MAIN                                                                  05/11/2008 15:41:35 PAGE 4   

   DATA SIZE        =      9       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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