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

📄 seg7.lst

📁 STC51系列的源码
💻 LST
字号:
C51 COMPILER V8.02   SEG7                                                                  10/13/2008 17:11:20 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SEG7
OBJECT MODULE PLACED IN .\out\SEG7.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\SEG7\SEG7.c LARGE OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND PRINT(.\out\S
                    -EG7.lst) OBJECT(.\out\SEG7.obj)

line level    source

   1          /********************************************************************************/
   2          /* filename : SEG7.c                                                            */
   3          /* created  : xillinx                                                           */
   4          /* descript : 本系统采用7端共阴极数码管                                         */
   5          /*                                                                              */
   6          /*                                             __________________________       */
   7          /*   D7    D6   D5   D4   D3   D2   D1   D0    |        <A>             |       */
   8          /*   DOT   G    F    E    D    C    B    A     |      +-----+           |       */
   9          /*    |   _|_  _|_  _|_  _|_  _|_  _|_  _|_    |  <F> |     |<B>        |       */
  10          /*    O   \|/  \|/  \|/  \|/  \|/  \|/  \|/    |      | <G> |           |       */
  11          /*    |    |    |    |    |    |    |    |     |      +-----+           |       */
  12          /*    +----+--- +--- +--- +--- +--- +--- +     |  <E> |     |<C>        |       */
  13          /*                   |                         |      |     |           |       */
  14          /*                ---+----                     |      +-----+ O <DOT>   |       */
  15          /*                CSX(GND)                     |        <D>             |       */
  16          /********************************************************************************/
  17          /*                                                                              */
  18          /* 共阳极数码管                                __________________________       */
  19          /*                CSX(VDD)                     |        <A>             |       */
  20          /*                ---+----                     |      +-----+           |       */
  21          /*                   |                         |  <F> |     |<B>        |       */
  22          /*    +----+--- +--- +--- +--- +--- +--- +     |      | <G> |           |       */
  23          /*    |   _|_  _|_  _|_  _|_  _|_  _|_  _|_    |      +-----+           |       */
  24          /*    O   \|/  \|/  \|/  \|/  \|/  \|/  \|/    |  <E> |     |<C>        |       */
  25          /*    |    |    |    |    |    |    |    |     |      |     |           |       */
  26          /*   DOT   G    F    E    D    C    B    A     |      +-----+ O <DOT>   |       */
  27          /*   D7    D6   D5   D4   D3   D2   D1   D0    |        <D>             |       */
  28          /********************************************************************************/
  29          #include "../CPU/CPU.h"
  30          #include "../SEG7/SEG7.h"
  31          
  32          unsigned char SEG7_buffer[0x8]; //* 七段数码管的显示缓冲区
  33          
  34          /********************************************************************************/
  35          /* 显示数据编码,本系统采用共阴极,所以数码管的选择信号输出低电平,段码信号输出    */
  36          /* 高电平,则点亮这个数码段,所以数据设计表为下表                                 */
  37          /********************************************************************************/
  38          unsigned char code SEG7_G_table[11]=
  39          {/* 0  */ 0x3F,     //* O/G=0; 
  40           /* 1  */ 0x06,     //* O/G/F/E/D/A=0;
  41           /* 2  */ 0x5B,     //* O/F/C=0;
  42           /* 3  */ 0x4F,     //* O/F/E=0;
  43           /* 4  */ 0x66,     //* O/E/D/A=0;
  44           /* 5  */ 0x6D,     //* O/E/B=0;
  45           /* 6  */ 0x7D,     //* O/B=0;
  46           /* 7  */ 0x07,     //* O/G/F/E/D=0;
  47           /* 8  */ 0x7F,     //* O=0;
  48           /* 9  */ 0x6F,     //* O/E=0;
  49           /* N  */ 0x00,     //* O/G/F/E/D/C/B/A=0;
  50          };
  51          unsigned char code SEG7_G_dot_table[11]=
  52          {/* 0. */ 0xBF,     //* /G=0; 
  53           /* 1. */ 0x86,     //* /G/F/E/D/A=0;
  54           /* 2. */ 0xDB,     //* /F/C=0;
C51 COMPILER V8.02   SEG7                                                                  10/13/2008 17:11:20 PAGE 2   

  55           /* 3. */ 0xCF,     //* /F/E=0;
  56           /* 4. */ 0xE6,     //* /E/D/A=0;
  57           /* 5. */ 0xED,     //* /E/B=0;
  58           /* 6. */ 0xFD,     //* /B=0;
  59           /* 7. */ 0x87,     //* /G/F/E/D=0;
  60           /* 8. */ 0xFF,     //* ;
  61           /* 9. */ 0xEF,     //* /E=0;
  62           /* N. */ 0x80,     //* /G/F/E/D/C/B/A=0;
  63          };
  64          
  65          /********************************************************************************/
  66          /* 共有3片HC595,第一和第二片用作七段数码管显示,第三片用作LED的跑马灯            */
  67          /* 其中第一片用作七段数码管的数据输出,第二片用作选择输出                        */
  68          /********************************************************************************/
  69          unsigned char code SEG7_G_segment_table[0x8]=
  70          {/* 1 */ 0xFE,      //* 选择第1个数码显示数字
  71           /* 2 */ 0xFD,      //* 选择第2个数码显示数字
  72           /* 3 */ 0xFB,      //* 选择第3个数码显示数字
  73           /* 4 */ 0xF7,      //* 选择第4个数码显示数字
  74           /* 5 */ 0xEF,      //* 选择第5个数码显示数字
  75           /* 6 */ 0xDF,      //* 选择第6个数码显示数字
  76           /* 7 */ 0xBF,      //* 选择第7个数码显示数字
  77           /* 8 */ 0x7F,      //* 选择第8个数码显示数字
  78          };
  79          
  80          /********************************************************************************/
  81          /* 显示数据编码,本系统采用共阳极,所以数码管的选择信号输出高电平,段码信号输出    */
  82          /* 低电平,则点亮这个数码段,所以数据设计表为下表                                 */
  83          /********************************************************************************/
  84          unsigned char code SEG7_V_table[11]=
  85          {/* 0  */ 0xC0,     //* O/G=1; 
  86           /* 1  */ 0xF9,     //* O/G/F/E/D/A=1;
  87           /* 2  */ 0xA4,     //* O/F/C=1;
  88           /* 3  */ 0xB0,     //* O/F/E=1;
  89           /* 4  */ 0x99,     //* O/E/D/A
  90           /* 5  */ 0x92,     //* O/E/B=1;
  91           /* 6  */ 0x82,     //* O/B=1;
  92           /* 7  */ 0xF8,     //* O/G/F/E/D=1;
  93           /* 8  */ 0x80,     //* O=1;
  94           /* 9  */ 0x90,     //* O/E=1;
  95           /* N  */ 0xFF,     //* O/G/F/E/D/C/B/A=1;
  96          };
  97          unsigned char code SEG7_V_dot_table[11]=
  98          {/* 0. */ 0x40,     //* /G=1; 
  99           /* 1. */ 0x79,     //* /G/F/E/D/A=1;
 100           /* 2. */ 0x24,     //* /F/C=1;
 101           /* 3. */ 0x30,     //* /F/E=1;
 102           /* 4. */ 0x19,     //* /E/D/A
 103           /* 5. */ 0x12,     //* /E/B=1;
 104           /* 6. */ 0x02,     //* /B=1;
 105           /* 7. */ 0x78,     //* /G/F/E/D=1;
 106           /* 8. */ 0x00,     //* ;
 107           /* 9. */ 0x10,     //* /E=1;
 108           /*  . */ 0x7F,     //* /G/F/E/D/C/B/A=1;
 109          };
 110          
 111          /********************************************************************************/
 112          /* 共有3片HC595,第一和第二片用作七段数码管显示,第三片用作LED的跑马灯            */
 113          /* 其中第一片用作七段数码管的数据输出,第二片用作选择输出                        */
 114          /********************************************************************************/
 115          unsigned char code SEG7_V_segment_table[0x8]=
 116          {/* 1 */ 0x01,      //* 选择第1个数码显示数字
C51 COMPILER V8.02   SEG7                                                                  10/13/2008 17:11:20 PAGE 3   

 117           /* 2 */ 0x02,      //* 选择第2个数码显示数字
 118           /* 3 */ 0x04,      //* 选择第3个数码显示数字
 119           /* 4 */ 0x08,      //* 选择第4个数码显示数字
 120           /* 5 */ 0x10,      //* 选择第5个数码显示数字
 121           /* 6 */ 0x20,      //* 选择第6个数码显示数字
 122           /* 7 */ 0x40,      //* 选择第7个数码显示数字
 123           /* 8 */ 0x80,      //* 选择第8个数码显示数字
 124          };
 125          
 126          /********************************************************************************/
 127          /* fun_name : SEG7_printf_ascii()                                               */
 128          /* version  : v1.00                                                             */
 129          /* created  : hw-chen                                                           */
 130          /* descript : 向七段数码显示缓冲区缓存数据,刷新部分从这个缓冲区读取显示数据     */
 131          /*  最后的显示是由HC595模块来刷新的                                             */
 132          /********************************************************************************/
 133          void SEG7_printf_ascii(unsigned char * string)
 134          {   unsigned char   i,length;
 135   1          unsigned char * ptr;
 136   1          unsigned char   dot;
 137   1          unsigned char   num;
 138   1          unsigned char   index;
 139   1          length=strlen(string);  //* 计算输入缓冲区的长度
 140   1          if( length==0x0)        //* 缓冲区有错误
 141   1          {   return;
 142   2          }
 143   1          num=0x8;
 144   1          ptr=string+length-0x1;  //* 指向字符串的尾部
 145   1          
 146   1          /****************************************************************************/
 147   1          /* 处理显示数据 */
 148   1          /****************************************************************************/
 149   1          for(i=0x0;i<length;i++)
 150   1          {   dot=0x0;
 151   2              if(ptr[0x0]=='.')   //* 如果是'.',需要记录下来这个点,和前面的一位数据一起显示
 152   2              {  dot=0x1;
 153   3                 i++;
 154   3                 ptr--;           //* 跳过这个'.'字符
 155   3              }
 156   2              if(i==length)       //* 这种情况只能在有点,并且前面已经没有数据才出现,如:".1234"
 157   2              {  SEG7_buffer[num-0x1]=SEG7_dot_table[10]; //* 只显示点
 158   3                 break;
 159   3              }
 160   2              index=ptr[0x0]-'0';
 161   2              ptr--;              //* 跳过这个数据
 162   2              if(index>0x9)       //* 如果这个数据不是0~9,需要丢弃这个数据
 163   2              {  continue;
 164   3              }
 165   2              if(dot==0x1)
 166   2              {  SEG7_buffer[num-0x1]=SEG7_dot_table[index]; //* 显示带点的数据
 167   3              }
 168   2              else
 169   2              {  SEG7_buffer[num-0x1]=SEG7_table[index]; //* 显示不带点的数据
 170   3              }
 171   2              num--;
 172   2              if(num==0x0)    //* 已经超过8位,丢弃前面的数据
 173   2              {  break;
 174   3              }
 175   2          }
 176   1      }
 177          
 178          /********************************************************************************/
C51 COMPILER V8.02   SEG7                                                                  10/13/2008 17:11:20 PAGE 4   

 179          /* fun_name : SEG7_clear_screen()                                               */
 180          /* version  : v1.00                                                             */
 181          /* created  : hw-chen                                                           */
 182          /* descript : 清除LED数码管显示区                                               */
 183          /********************************************************************************/
 184          void SEG7_clear_screen(void)
 185          {   memset(&SEG7_buffer[0x0],SEG7_table[10],0x8);
 186   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    194    ----
   CONSTANT SIZE    =     60    ----
   XDATA SIZE       =      8       6
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -