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

📄 8_8led.lst

📁 51单片机驱动的LED点阵万年历显示
💻 LST
字号:
C51 COMPILER V8.16   8_8LED                                                                12/25/2008 19:46:19 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE 8_8LED
OBJECT MODULE PLACED IN .\bin\8_8led.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE src\8_8led.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\b
                    -in\8_8led.lst) OBJECT(.\bin\8_8led.obj)

line level    source

   1          #include<reg52.h>
   2          #include<rtx51tny.h>
   3          #include"inc/define.h"
   4          #include"inc/8_8led.h"
   5          #include"inc/utility.h"
   6          #include"inc/font.h"
   7          
   8          
   9          #define dataP P0
  10          #define scanP P2
  11          
  12          sbit sel=P2^6;          //选择数据通道 0:选通上  1:选通下
  13          sbit clr=P2^7;          //清零数据 0有效
  14          
  15          
  16          vu8 idata for_showh[6]={0,8, 1,1, 3,0}; //年 月 日
  17          vu8 idata for_showl[6]={2,2, 4,9, 5,6}; //时 分 秒
  18                                                    //---16*16的空格      周      四         8*16的空格    2      7       摄氏度符号
  19          vu8 idata week_tempert[8]={8,                   0 ,     4,     11,                       2,     7,      10};
  20          
  21          vu8 code * idata  time_tab=time_tab_cgst[0];
  22          vu8 code * idata  week_tab=week_tab_cgst[0];
  23          vu8 code * idata  tempert=tempert_cgst[0];
  24          
  25          
  26          u8 idata scroll_bp=0,scroll_bpt=0;
  27          bit show_menu=0;
  28          u8 * pmenu=menu[0];
  29          
  30          
  31          struct Pad ph[6],pl[6];
  32          
  33          
  34          
  35          
  36          /*****************************************************************
  37          *程序运行的起始点,之后各个被创建的任务以5ms的时间片轮流运行
  38          *函数名称:init()
  39          *说明:这是一个RTX51任务,也是第一个被运行的任务
  40          ******************************************************************/
  41          void init()     _task_ 0
  42          {
  43   1              EA=0;
  44   1              EX0=1;          //使能外部中断0,用以侦测按键
  45   1              IT0=1;          //外部中断0设置为下降沿触发
  46   1              os_create_task(1);
  47   1              os_create_task(2);
  48   1              os_create_task(3);
  49   1              
  50   1              os_create_task(6);
  51   1              os_create_task(7);
  52   1              os_create_task(8);
  53   1              os_delete_task(0);
  54   1      }
C51 COMPILER V8.16   8_8LED                                                                12/25/2008 19:46:19 PAGE 2   

  55          
  56          
  57          
  58          /*********************************************************************
  59          *在LED点阵屏上显示时间、日期、和温度  或者  菜单命令
  60          *函数名称:show()
  61          *说明:这是一个RTX51任务,os_create_task(1)后开始运行
  62          ***********************************************************************/
  63          void show(void )        _task_ 1
  64          {
  65   1              setShowStyle();
  66   1              while(1)
  67   1              {
  68   2                      if(show_menu)
  69   2                              showMenu();
  70   2                      else
  71   2                              showTime();
  72   2              }
  73   1      }
  74          
  75          
  76          void showTime(void )    
  77          {
  78   1              u8 word,sect;           //word:可显示数字、汉字的个数  sect:每个字符的部分,
  79   1                                                      //具体讲即每个字符的列
  80   1      
  81   1              for(word=0;word<7;word++)       //7:六个8*8数字 一个16*16汉字   
  82   1              {
  83   2                      if(word<6)
  84   2                      {
  85   3                              for(sect=0;sect<8;sect++)
  86   3                              {
  87   4                              scanP=word*8+sect;      
  88   4                              putData(word,sect);
  89   4                              delay20US(10);                                                                          
  90   4                              clr=0;          //消隐  
  91   4                              }
  92   3                      }
  93   2                      else
  94   2                      {
  95   3                               for(sect=0;sect<16;sect++)
  96   3                              {
  97   4                                      scanP=word*8+sect;
  98   4                                      putData(word,sect);
  99   4                                      delay20US(10);
 100   4                                      clr=0;  //消隐
 101   4                              }
 102   3                      }
 103   2              }
 104   1              //以下内容用以文字移动,即动态显示内容基址的确定
 105   1              scroll_bpt++;
 106   1              if(scroll_bpt>8)
 107   1              {
 108   2                      scroll_bpt=0;
 109   2                      scroll_bp+=2;
 110   2              }
 111   1              if(scroll_bp>(16*3+8*4))                // 三个16*16汉字,四个8*16数字、字符
 112   1              {
 113   2                      scroll_bp=0;
 114   2              }
 115   1      }
 116          
C51 COMPILER V8.16   8_8LED                                                                12/25/2008 19:46:19 PAGE 3   

 117          
 118          extern u8 chge_time;
 119          extern u8 idata chgeh[6];
 120          extern u8 idata chgel[6];
 121          void showMenu(void )    
 122          {
 123   1              u8 word,sect;
 124   1      
 125   1              if(chge_time)
 126   1              {
 127   2                      for(word=0;word<6;word++)
 128   2                      {
 129   3                              for(sect=0;sect<8;sect++)
 130   3                              {
 131   4                                      scanP=word*8 + sect;
 132   4                                      clr=1;
 133   4      
 134   4                                      if(sect<pl[word].pn)
 135   4                                              dataP=pl[word].pad[sect];
 136   4                                      else if(!(sect<(pl[word].pn + 5)))
 137   4                                              dataP=pl[word].pad[sect-5];
 138   4                                      else 
 139   4                                              dataP=m_time[chgel[word]][sect-pl[word].pn];
 140   4                                      sel=1;
 141   4                      
 142   4                                      if(sect<ph[word].pn)
 143   4                                              dataP=ph[word].pad[sect];       
 144   4                                      else if(!(sect<(ph[word].pn + 5)))
 145   4                                              dataP=ph[word].pad[sect-5];                     
 146   4                                      else
 147   4                                              dataP=m_time[chgeh[word]][sect-ph[word].pn];
 148   4                                      sel=0;  
 149   4      
 150   4                                      delay20US(10);
 151   4                                      clr=0;
 152   4                              }
 153   3                      }
 154   2              }
 155   1              else
 156   1              {
 157   2                      for(word=0;word<4;word++)
 158   2                      {
 159   3                              for(sect=0;sect<16;sect++)
 160   3                              {
 161   4                                      scanP=word*16+sect;
 162   4                                      clr=1;
 163   4                                      dataP=pmenu[word*32+sect+16];
 164   4                                      sel=1;
 165   4                                      dataP=pmenu[word*32+sect];
 166   4                                      sel=0;
 167   4              
 168   4                                      delay20US(10);
 169   4                                      clr=0;
 170   4                              }
 171   3                      }
 172   2              }
 173   1      }
 174          
 175          
 176          /*******************************************************************
 177          *设置时间、日期的显示格式
 178          *函数名称:setShowStyle()
C51 COMPILER V8.16   8_8LED                                                                12/25/2008 19:46:19 PAGE 4   

 179          *说明:
 180          ********************************************************************/
 181          void setShowStyle()
 182          {       
 183   1              //设置显示 年月日 的格式:08:11:24
 184   1              ph[0].pn=2;                        
 185   1              ph[0].pad[0]=ph[0].pad[1]=ph[0].pad[2]=0x00;
 186   1              ph[1].pn=1;
 187   1              ph[1].pad[0]=ph[1].pad[1]=0x00;
 188   1              ph[1].pad[2]=0x66;
 189   1      
 190   1              ph[2].pn=2;
 191   1              ph[2].pad[0]=0x66;
 192   1              ph[2].pad[1]=ph[2].pad[2]=0x00;
 193   1              ph[3].pn=1;
 194   1              ph[3].pad[0]=ph[3].pad[1]=0x00;
 195   1              ph[3].pad[2]=0x66;
 196   1      
 197   1              ph[4].pn=2;
 198   1              ph[4].pad[0]=0x66;
 199   1              ph[4].pad[1]=ph[4].pad[2]=0x00;
 200   1              ph[5].pn=1;
 201   1              ph[5].pad[0]=ph[5].pad[1]=ph[5].pad[2]=0x00;
 202   1      
 203   1              //设置显示 时分秒 的格式:22:23:56
 204   1          pl[0].pn=2;                    
 205   1              pl[0].pad[0]=pl[0].pad[1]=pl[0].pad[2]=0x00;
 206   1              pl[1].pn=1;
 207   1              pl[1].pad[0]=pl[1].pad[1]=0x00;
 208   1              pl[1].pad[2]=0x66;
 209   1      
 210   1              pl[2].pn=2;
 211   1              pl[2].pad[0]=0x66;
 212   1              pl[2].pad[1]=pl[2].pad[2]=0x00;
 213   1              pl[3].pn=1;
 214   1              pl[3].pad[0]=pl[3].pad[1]=0x00;
 215   1              pl[3].pad[2]=0x66;
 216   1      
 217   1              pl[4].pn=2;
 218   1              pl[4].pad[0]=0x66;
 219   1              pl[4].pad[1]=pl[4].pad[2]=0x00;
 220   1              pl[5].pn=1;
 221   1              pl[5].pad[0]=pl[5].pad[1]=pl[5].pad[2]=0x00;
 222   1      }
 223          
 224          
 225          /*****************************************************************
 226          *将待显示数据送到P0口,并锁入适当的锁存器在上排或下排8*8LED显示他们
 227          *函数名称:putData()
 228          *说明;每排前六个LED点阵与后两个LED点阵放置数据方式不同
 229          ******************************************************************/
 230          void putData(u8 word,u8 sect)
 231          {       
 232   1              u8 row,col;
 233   1              clr=1;
 234   1      
 235   1              if(word<6)                      //先放上行在仿真中只显示下行,不知道为社么
 236   1              {               
 237   2                      if(sect<pl[word].pn)
 238   2                              dataP=pl[word].pad[sect];
 239   2                      else if(!(sect<(pl[word].pn + 5)))
 240   2                              dataP=pl[word].pad[sect-5];
C51 COMPILER V8.16   8_8LED                                                                12/25/2008 19:46:19 PAGE 5   

 241   2                      else 
 242   2                              dataP=*(time_tab + 6*for_showl[word] + sect - pl[word].pn);
 243   2                      sel=1;
 244   2      
 245   2                      if(sect<ph[word].pn)
 246   2                              dataP=ph[word].pad[sect];       
 247   2                      else if(!(sect<(ph[word].pn + 5)))
 248   2                              dataP=ph[word].pad[sect-5];                     
 249   2                      else
 250   2                              dataP=*(time_tab + 6*for_showh[word] + sect-ph[word].pn);
 251   2                      sel=0;          
 252   2              }
 253   1              else
 254   1              {
 255   2                      if((scroll_bp+sect)<16*3)
 256   2                      {       
 257   3                              row=(scroll_bp+sect)/16;
 258   3                              col=(scroll_bp+sect)%16;
 259   3                              dataP=*(week_tab + 32*week_tempert[row] + col+16);
 260   3                              sel=1;  
 261   3                              dataP=*(week_tab + 32*week_tempert[row] + col);
 262   3                              sel=0;
 263   3                      }
 264   2                      else if((scroll_bp+sect)<(16*3+8*4))
 265   2                      {
 266   3                              row=(scroll_bp+sect)/8-3;
 267   3                              col=(scroll_bp+sect)%8;
 268   3                              dataP=*(tempert + 16*week_tempert[row] + col+8);
 269   3                              sel=1;
 270   3                          dataP=*(tempert + 16*week_tempert[row] + col);
 271   3                              sel=0;
 272   3                      }
 273   2              }
 274   1      } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1159    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     51       5
   IDATA SIZE       =     28    ----
   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 + -