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

📄 16-32.lst

📁 基于ds1302的16*32led点阵显示屏
💻 LST
字号:
C51 COMPILER V8.08   16_32                                                                 05/15/2009 18:17:48 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 16_32
OBJECT MODULE PLACED IN 16-32.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 16-32.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #define uchar unsigned char
   2          #define uint unsigned int
   3          #include <reg52.h>
   4          #include<1302.h>
   5          #include<zifu.h>
   6          
   7          #define BLKN 2      //列锁存器数
   8          sbit G=P1^7;        //P1.7为显示允许控制信号端
   9          sbit CLK=P1^6;     //P1.6为输出锁存器时钟信号端
  10          sbit SCLR=P1^5;     //移位寄存器的清0端
  11          void delay(unsigned int);
  12          void showtime(uchar);
  13          void showxq(uchar);
  14          unsigned char data dispram[32];
  15          unsigned char data dispram0[32];
  16          unsigned char code  time[][16];
  17          unsigned char code Timename[][32];
  18          unsigned char code xinqi[][32];
  19          uchar inittime[7]={0x00,0x24,0x15,0x25,0x12,0x04,0x07};  //初始化后设置
  20          
  21          
  22          
  23           void main()
  24           {
  25   1       register unsigned char i,j,k,l;
  26   1       uchar ucAddr = 0x81;
  27   1       SCON=0x00;            //串口工作模式0:移位寄存器方式
  28   1       TMOD=0x01;            //定时器T0工作在试1:16位方式
  29   1       TR0=1;                //启动定时器
  30   1       P1=0x3f;              //P1口初值允许接收,锁存,显示
  31   1       IE=0x82;              //允许定时器T0中断
  32   1       Set1302(inittime);            //初始化 
  33   1       W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/                 
  34   1       W1302(0x90,0xa5);           //打开充电二级管  一个二级管串联一个2K电阻 
  35   1       du1302();            //读取 秒 分 时 日 月 星期 年
  36   1       while(1)
  37   1       {
  38   2       delay(2000);          //延时2S
  39   2      
  40   2      /*for(i=0;i<32;i++)     //显示效果:卷帘出
  41   2       {
  42   2       dispram[i]=Bmp[1][i];
  43   2      
  44   2       if(i%2)delay(100);
  45   2       }
  46   2       delay(100);*/
  47   2      
  48   2      
  49   2      
  50   2       for(i=0;i<9;i++)     //显示效果:左移显示:你好我是......
  51   2          {
  52   3           for(j=0;j<2;j++)
  53   3               for(k=1;k<9;k++)
  54   3                  {
  55   4                   for(l=0;l<16;l++)
C51 COMPILER V8.08   16_32                                                                 05/15/2009 18:17:48 PAGE 2   

  56   4                      {
  57   5                     dispram[l*BLKN]=dispram[l*BLKN]
  58   5      <<1|dispram[l*BLKN+1]>>7;
  59   5                           dispram[l*BLKN+1]=dispram[l*BLKN+1]
  60   5      <<1|dispram0[l*BLKN]>>7;
  61   5                       dispram0[l*BLKN]=dispram0[l*BLKN]
  62   5      <<1|dispram0[l*BLKN+1]>>7;
  63   5                       dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
  64   5      <<1|Bmp[i][l*BLKN+j]>>(8-k);
  65   5                       }
  66   4                   delay(100);
  67   4                  }
  68   3          }
  69   2         delay(100);
  70   2      
  71   2      
  72   2         du1302();                   // 读时间
  73   2      for(i=0;i<11;i++)
  74   2        {
  75   3              if(i==3) 
  76   3                 {
  77   4              showtime(Year);
  78   4                      }
  79   3               if(i==4) 
  80   3                 {             
  81   4                  showtime(Month); 
  82   4              }
  83   3               if(i==5) 
  84   3                 {             
  85   4                  showtime(Day); 
  86   4              }
  87   3               if(i==6) 
  88   3                 {             
  89   4                  showtime(Hour); 
  90   4              }
  91   3               if(i==7) 
  92   3                 {             
  93   4                  showtime(Cent); 
  94   4              }
  95   3               if(i==8) 
  96   3                 {             
  97   4                  showtime(Sec); 
  98   4              }
  99   3               if(i==10) 
 100   3                 {
 101   4                  for(j=0;j<2;j++)
 102   4               for(k=1;k<9;k++)
 103   4                  {
 104   5                   for(l=0;l<16;l++)
 105   5                      {
 106   6                       dispram[l*BLKN]=dispram[l*BLKN]
 107   6      <<1|dispram[l*BLKN+1]>>7;
 108   6                           dispram[l*BLKN+1]=dispram[l*BLKN+1]
 109   6      <<1|dispram0[l*BLKN]>>7;
 110   6                       dispram0[l*BLKN]=dispram0[l*BLKN]
 111   6      <<1|dispram0[l*BLKN+1]>>7;
 112   6                       dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
 113   6      <<1|xinqi[Week%16][l*BLKN+j]>>(8-k);
 114   6                       }
 115   5            delay(100);
 116   5            }
 117   4                      }
C51 COMPILER V8.08   16_32                                                                 05/15/2009 18:17:48 PAGE 3   

 118   3           for(j=0;j<2;j++)
 119   3               for(k=1;k<9;k++)
 120   3                  {
 121   4                   for(l=0;l<16;l++)
 122   4                      {
 123   5                       dispram[l*BLKN]=dispram[l*BLKN]
 124   5      <<1|dispram[l*BLKN+1]>>7;
 125   5                           dispram[l*BLKN+1]=dispram[l*BLKN+1]
 126   5      <<1|dispram0[l*BLKN]>>7;
 127   5                       dispram0[l*BLKN]=dispram0[l*BLKN]
 128   5      <<1|dispram0[l*BLKN+1]>>7;
 129   5                       dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
 130   5      <<1|Timename[i][l*BLKN+j]>>(8-k);
 131   5                       }
 132   4            delay(100);
 133   4            }
 134   3        }
 135   2         
 136   2      
 137   2      
 138   2      
 139   2      
 140   2      
 141   2                                
 142   2      for(i=0;i<32;i++)     //显示效果:卷帘入
 143   2          {
 144   3           dispram[i]=0;
 145   3               dispram0[i]=0;
 146   3           if(i%2)delay(100);
 147   3          }
 148   2       }
 149   1       }
 150           /*-------------延时------------*/
 151           void delay(unsigned int dt)
 152          {
 153   1       register unsigned char bt;
 154   1       for(;dt;dt--)
 155   1       for(bt=0;bt<225;bt++);
 156   1       }
 157          
 158          
 159          
 160           /*-------显示屏扫描(定时器T0中断)函数-------------*/
 161           void leddisplay(void) interrupt 1 using 1
 162           {
 163   1       register unsigned char i,j=BLKN;
 164   1       TH0=0xf8;                      //设定显示屏刷新率每秒62.5帧
 165   1       TL0=0x30;
 166   1       i=P1;                          //读出当前显示的行号
 167   1       i=++i&0x0f;                    //行号加1屏蔽高四位
 168   1       do
 169   1       {
 170   2       j--;
 171   2      SBUF=~dispram0[i*BLKN+j];        //送显示数据
 172   2       //SBUF=dispram0[i*BLKN+j]; 
 173   2       while (!TI);TI=0;
 174   2       }
 175   1       while(j);                       //完成一行数据传输
 176   1      j=BLKN;
 177   1      do
 178   1      {j--;
 179   2      SBUF=~dispram[i*BLKN+j];
C51 COMPILER V8.08   16_32                                                                 05/15/2009 18:17:48 PAGE 4   

 180   2      //SBUF=dispram[i*BLKN+j];
 181   2      while(!TI);TI=0;
 182   2      }
 183   1      while(j); 
 184   1       G=1;                            //消隐(关闭显示)
 185   1       P1&=0xf0;                       //行号端清0
 186   1       CLK=1;                         //显示数据输出到锁存寄存器
 187   1       P1 |=i;                         //写入行号
 188   1       CLK=0;                         //锁存器显示数据
 189   1       G=0;                            //打开显示
 190   1       }
 191          
 192          
 193          void showtime(uchar shijian)
 194          {
 195   1       uchar l,k;
 196   1               for(k=1;k<9;k++)
 197   1                  {
 198   2                   for(l=0;l<16;l++)
 199   2                      {
 200   3                       dispram[l*BLKN]=dispram[l*BLKN]
 201   3      <<1|dispram[l*BLKN+1]>>7;
 202   3                           dispram[l*BLKN+1]=dispram[l*BLKN+1]
 203   3      <<1|dispram0[l*BLKN]>>7;
 204   3                       dispram0[l*BLKN]=dispram0[l*BLKN]
 205   3      <<1|dispram0[l*BLKN+1]>>7;
 206   3                       dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
 207   3      <<1|time[shijian/16][l]>>(8-k);
 208   3                       }
 209   2                   delay(100);
 210   2                               }
 211   1                               for(k=1;k<9;k++)
 212   1                  {
 213   2                   for(l=0;l<16;l++)
 214   2                      {
 215   3                       dispram[l*BLKN]=dispram[l*BLKN]
 216   3      <<1|dispram[l*BLKN+1]>>7;
 217   3                           dispram[l*BLKN+1]=dispram[l*BLKN+1]
 218   3      <<1|dispram0[l*BLKN]>>7;
 219   3                       dispram0[l*BLKN]=dispram0[l*BLKN]
 220   3      <<1|dispram0[l*BLKN+1]>>7;
 221   3                       dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
 222   3      <<1|time[shijian%16][l]>>(8-k);
 223   3                       }
 224   2                   delay(100);
 225   2                               }
 226   1                               }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1550    ----
   CONSTANT SIZE    =   1040    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     78       6
   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 + -