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

📄 1.lst

📁 此文件是单片机控制LED滚动显示。开发环境keil c.
💻 LST
字号:
C51 COMPILER V7.06   1                                                                     05/25/2008 04:26:32 PAGE 1   


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

stmt level    source

   1          #include        <reg52.h>
   2          #include    <string.h>
   3          #include        "zkFunc.h"
   4          #define false           0
   5          #define true            1
   6          #define bool        bit
   7          extern void ShT_LEDBoard_ColShiftOut(uchar ucExtShiftCount);
   8          extern void ShT_LEDBoard_RowShiftOut(uint uiWriteValue);
   9          extern code HZ_MODEL ZK_Data[];
  10          extern code unsigned char   ASCII816[][16];//标准的asc码
  11          extern uchar ucDispDataBuff[128];
  12          uchar ucLoopCount;
  13          uchar ucRTCData[16];
  14          uchar ucColDataBuff_High[17];
  15          uchar ucColDataBuff_Low[17];
  16          uint uiRowControlValue;
  17          uchar ucRowLineCount;
  18          //控制移动数量计数器
  19          uchar ucShiftCount;
  20          bool bMoveEnable;       //是否流动显示允许标志位
  21          sbit c_Col_SOE  = P1^2; //显示开关 0为显示,1为关闭
  22          uchar xdata ucLEDDisplayMemory[17*32];          //显示存储器
  23          #define c_LineWidth  18                         //行宽
  24          #define c_MaxLineByteCount 18           //每行占用显示存储器字节数
  25          #define c_MaxColNumber  128
  26          #define c_MaxLineCount  16                              //行的高度
  27          #define c_HalfScreenMemoryOffset  16*c_LineWidth                //半屏占用存储器单元 
  28          uchar ucDispTemperatureCount;
  29          void RefreshLEDScreen(uchar ucLoopCount)//刷新屏幕
  30          {
  31   1              uchar ucRowLineCount;
  32   1              uchar ucRefreshCount;
  33   1              for(ucRefreshCount=0; ucRefreshCount<ucLoopCount; ucRefreshCount++)
  34   1              {
  35   2                      uiRowControlValue = 0x0001;
  36   2                      for(ucRowLineCount=0; ucRowLineCount<16; ucRowLineCount++)
  37   2                      {
  38   3                              memcpy(ucColDataBuff_Low,ucLEDDisplayMemory+ucRowLineCount*c_LineWidth,17);
  39   3                              memcpy(ucColDataBuff_High,ucLEDDisplayMemory+c_HalfScreenMemoryOffset+ucRowLineCount*c_LineWidth,17);
  40   3                              if(bMoveEnable)
  41   3                              {
  42   4                                      ShT_LEDBoard_ColShiftOut(ucShiftCount);
  43   4                              }
  44   3                              else
  45   3                              {
  46   4                                      ShT_LEDBoard_ColShiftOut(0);
  47   4                              }
  48   3                              ShT_LEDBoard_RowShiftOut(uiRowControlValue);            
  49   3                              c_Col_SOE = 0;                          //打开显示
  50   3                              uiRowControlValue <<= 1;
  51   3                      }
  52   2              }
  53   1              //补偿最后一行的亮度不够
  54   1              memcpy(ucColDataBuff_Low,ucLEDDisplayMemory+15*c_LineWidth,17);
  55   1              memcpy(ucColDataBuff_High,ucLEDDisplayMemory+c_HalfScreenMemoryOffset+15*c_LineWidth,17);
C51 COMPILER V7.06   1                                                                     05/25/2008 04:26:32 PAGE 2   

  56   1              if(bMoveEnable)
  57   1              {
  58   2                      ShT_LEDBoard_ColShiftOut(ucShiftCount);
  59   2              }
  60   1              else
  61   1              {
  62   2                      ShT_LEDBoard_ColShiftOut(0);
  63   2              }
  64   1      
  65   1              c_Col_SOE = 1;                          //关闭显示
  66   1      }
  67          
  68          bool GetHzModelInMem(uint uiHZCode,HZ_MODEL  ** pHzModel)
  69          {
  70   1              //顺序查找法
  71   1              uint uiIndex;
  72   1              bool bResultFlag;
  73   1              uiIndex = 0;
  74   1              while(1)
  75   1              {
  76   2                      if(ZK_Data[uiIndex].uiHZcode == 0xFFFF)
  77   2                      {
  78   3                              *pHzModel = (HZ_MODEL *)&(ZK_Data[uiIndex]);
  79   3                              bResultFlag = false;
  80   3                              break;
  81   3                      }
  82   2                      if(ZK_Data[uiIndex].uiHZcode == uiHZCode)
  83   2                      {
  84   3                              //-找到
  85   3                              *pHzModel = (HZ_MODEL *)&(ZK_Data[uiIndex]);
  86   3                              bResultFlag = true;
  87   3                              break;
  88   3                      }
  89   2                      else
  90   2                      {
  91   3                              uiIndex++;
  92   3                      }
  93   2              }
  94   1              return bResultFlag;
  95   1      }
  96          void GetHZDot(uint uiHZCode,uchar *ucHZDotData)
  97          {
  98   1              HZ_MODEL *pHzModel;
  99   1              bool bReturnValue;
 100   1              bReturnValue =  GetHzModelInMem(uiHZCode,&pHzModel);
 101   1              memcpy(ucHZDotData,&pHzModel->model,32);
 102   1      }
 103          
 104          //取字并显示
 105          void LED_DispHZ(uchar ucDispRow,uchar HzNo,uchar *pucDispString)
 106          {
 107   1              uchar HzNoC=16;
 108   1              uchar ucZMData;
 109   1              uchar ucColOffset;              //列偏移量
 110   1              uchar uci;
 111   1              uchar ucStartPosition;
 112   1              uint uiHZCode;
 113   1              uchar xdata ucHZDataBuff[128];
 114   1              ucColOffset = 0;
 115   1              bMoveEnable = true;
 116   1              HzNoC *=HzNo;
 117   1              while(*pucDispString != '\0')
C51 COMPILER V7.06   1                                                                     05/25/2008 04:26:32 PAGE 3   

 118   1              {
 119   2                      //取字模
 120   2                      uiHZCode = *pucDispString++;
 121   2                      uiHZCode <<=8;
 122   2                      uiHZCode += *pucDispString++;
 123   2                      GetHZDot(uiHZCode,ucHZDataBuff);
 124   2      
 125   2                      for(uci=0; uci<16; uci++)
 126   2                      {
 127   3                              //左半边字
 128   3                              ucZMData = ucHZDataBuff[uci*2];
 129   3                              if(ucDispRow == 1)
 130   3                              {
 131   4                                      ucLEDDisplayMemory[uci*c_MaxLineByteCount+ucColOffset] =ucZMData;
 132   4                              }
 133   3      //                      else
 134   3      //                      {
 135   3      //                              ucLEDDisplayMemory[uci*c_MaxLineByteCount+c_HalfScreenMemoryOffset+ucColOffset] =ucZMData;
 136   3      //                      }
 137   3                              //右半边字
 138   3                              ucZMData = ucHZDataBuff[uci*2+1];
 139   3      
 140   3                              if(ucDispRow == 1)
 141   3                              {
 142   4                                      ucLEDDisplayMemory[uci*c_MaxLineByteCount+ucColOffset+1] =ucZMData;
 143   4                              }
 144   3      //                      else
 145   3      //                      {
 146   3      //                              ucLEDDisplayMemory[uci*c_MaxLineByteCount+c_HalfScreenMemoryOffset+ucColOffset+1] =ucZMData;
 147   3      //                      }
 148   3                      }                       
 149   2                      ucColOffset++;
 150   2                      ucColOffset++;
 151   2                      *pucDispString = pucDispString[ucStartPosition + ucColOffset];
 152   2              }
 153   1              for(ucShiftCount=0; ucShiftCount<HzNoC; ucShiftCount++)
 154   1              {
 155   2                      RefreshLEDScreen(10);
 156   2              }
 157   1              //      ucStartPosition++;
 158   1              bMoveEnable = false;
 159   1      }
 160          //
 161          void LED_ScrollDispString(uchar ucDispRow,uchar ucRefreshCount,uchar *pucDispString)//1
 162          {
 163   1              uchar ucDispChar;       
 164   1              uchar ucZMData;
 165   1              uchar ucColOffset;      //列偏移量
 166   1              uchar uci;
 167   1              uchar ucStartPosition;
 168   1              bMoveEnable = true;
 169   1              ucDispChar = *pucDispString;
 170   1              ucColOffset = 0;
 171   1              ucStartPosition =0;
 172   1              ucDispChar = pucDispString[ucStartPosition + ucColOffset];
 173   1              while(ucDispChar != '\0')
 174   1              {
 175   2                      for(ucColOffset = 0; ucColOffset<16; ucColOffset++)
 176   2                      {
 177   3                              for(uci=0; uci<17; uci++)
 178   3                              {
 179   4                                      ucZMData = ASCII816[ucDispChar - 0x20][uci];
C51 COMPILER V7.06   1                                                                     05/25/2008 04:26:32 PAGE 4   

 180   4      
 181   4                                      if(ucDispRow == 1)
 182   4                                      {
 183   5                                              ucLEDDisplayMemory[uci*c_MaxLineByteCount+ucColOffset] =ucZMData;
 184   5                                      }
 185   4                                      else
 186   4                                      {
 187   5                                              ucLEDDisplayMemory[uci*c_MaxLineByteCount+c_HalfScreenMemoryOffset+ucColOffset] =ucZMData;
 188   5                                      }
 189   4                              }                       
 190   3                              ucDispChar = pucDispString[ucStartPosition + ucColOffset];
 191   3                      }
 192   2                      for(ucShiftCount=0; ucShiftCount<0x08; ucShiftCount++)
 193   2                      {
 194   3                              RefreshLEDScreen(ucRefreshCount);
 195   3                      }
 196   2                      ucStartPosition++;
 197   2              }
 198   1              bMoveEnable = false;
 199   1      }
 200          void main (void) 
 201                  {       
 202   1                      while(1)
 203   1                      {       
 204   2              //              LED_ScrollDispString(1, 15, "Hello");
 205   2                              //下面两行为清屏用
 206   2                              memset(ucLEDDisplayMemory,0,c_LineWidth*c_MaxLineCount);
 207   2                              LED_DispHZ(1,4,"南师泰院");
 208   2      //                      RefreshLEDScreen(100);
 209   2                              memset(ucLEDDisplayMemory,0,c_LineWidth*c_MaxLineCount);
 210   2                              LED_DispHZ(1,8,"谢谢使用南师泰院");
 211   2                              RefreshLEDScreen(100);
 212   2                      }
 213   1              }
 214          //字库
 215          code HZ_MODEL ZK_Data[]=
 216          {
 217                  {       0xD0BB,  //谢
 218                          0x02,0x08,0x44,0x88,0x2F,0xC8,0x28,0x88,0x0F,0x88,0x08,0xFE,0xEF,0x88,0x28,0x88,
 219                          0x28,0xC8,0x3F,0xA8,0x21,0xA8,0x2A,0x88,0x34,0x88,0x28,0x88,0x12,0xA8,0x01,0x10},
 220          
 221                  {       0xCAB9,  //使
 222                          0x10,0x40,0x10,0x44,0x1F,0xFE,0x20,0x40,0x27,0xFC,0x64,0x44,0xA4,0x44,0x24,0x44,
 223                          0x27,0xFC,0x24,0x44,0x22,0x40,0x21,0x80,0x20,0xC0,0x21,0x30,0x26,0x0E,0x28,0x04},
 224          
 225                  {       0xD3C3,  //用
 226                          0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,
 227                          0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x41,0x08,0x41,0x28,0x80,0x10},               
 228          
 229                  {       0xC4CF,  //南
 230                          0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x00,0x3F,0xFC,0x24,0x24,0x22,0x44, 
 231                          0x2F,0xF4,0x21,0x04,0x3F,0xFC,0x21,0x04,0x21,0x04,0x21,0x14,0x21,0x08,0x00,0x00},
 232          
 233                  {       0xCAA6,  //师
 234                          0x08,0x00,0x0B,0xFE,0x48,0x20,0x48,0x20,0x4B,0xFE,0x4A,0x22,0x4A,0x22,0x4A,0x22, 
 235                          0x4A,0x22,0x52,0x22,0x52,0x2A,0x12,0x24,0x20,0x20,0x40,0x20,0x80,0x20,0x00,0x20},
 236          
 237                  {       0xCCA9,  //泰
 238                          0x02,0x00,0x7F,0xFC,0x02,0x00,0x3F,0xF8,0x02,0x00,0xFF,0xFE,0x04,0x40,0x09,0x20,
 239                          0x11,0x18,0x29,0x2E,0xC7,0x44,0x05,0xC0,0x19,0x20,0x61,0x18,0x05,0x00,0x02,0x00},
 240          
 241                  {       0xD4BA, //院
C51 COMPILER V7.06   1                                                                     05/25/2008 04:26:32 PAGE 5   

 242                          0x00,0x80,0xF8,0x40,0x8F,0xFE,0x94,0x04,0xA0,0x00,0xA3,0xF8,0x90,0x00,0x88,0x00,
 243                          0x8F,0xFE,0xA9,0x20,0x91,0x20,0x81,0x20,0x82,0x22,0x82,0x22,0x84,0x22,0x88,0x1E},
 244          
 245                  {       0xFFFF,  //字库结尾标志符
 246                          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
 247                          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
 248          };
 249          
 250          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    882    ----
   CONSTANT SIZE    =    298    ----
   XDATA SIZE       =    544     128
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     56      31
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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