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

📄 main.lst

📁 32*16点阵显示例程 模拟奥运会开幕式的
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  10/15/2008 21:14:04 PAGE 1   


C51 COMPILER V8.02, 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          程序名称:LED3216点阵流动显示汉字
   3          简要说明:最大可显示16*16汉字
   4                    P0口接上行线,P2口接下行线,P3口接扫描线
   5                            P3.0接左屏译码器使能端(CS1)
   6                            P3.1接右屏译码器使能端(CS2)
   7          编    写:JiangX.net
   8          *********************************************************/
   9          #include <AT89X52.h>
  10          #include "ziku.h"                                               //字库“再别康桥”
  11          //#include "test_ziku.h"                                        //字库“LED屏测试”,切换这两个字库可方便切换已存储于程序中的显示内容
  12          #define uchar unsigned char
  13          #define uint unsigned int                       
  14          #define ulong unsigned long                             //宏定义
  15          #define hang1           P0                                  //上行线
  16          #define hang2           P2                                  //下行线
  17          #define lie                     P1                                  //列线
  18          #define CS1                     P3_0                        //接左屏154译码器使能端
  19          #define CS2                     P3_1                        //接右屏154译码器使能端
  20          #define sum                     sizeof(hanzi)/32        //自动计算汉字字数
  21          
  22          /*****参数设置*****/
  23          #define ziti            16                                      //字体大小(宽度)
  24          #define light           50                                  //显示亮度
  25          #define move_speed      25                              //移动速度
  26          
  27          uint    k=0,j;                                                  //移位变量,k:移位个数
  28          uint    a=0;                                            //用于软件延时          
  29          ulong   s=(sum+1)*ziti;                                 //s为全部列数
  30          uchar   disbuf[32][2];                                  //定义显示缓冲区(32行两列的二维数组以开辟2个16*16汉字的空间)
  31          bit             move_st;                                                //移动标志
  32          
  33          /*****可变延时*****/
  34          void delay(void)                                                //用来改变扫描延时以调节亮度
  35          {
  36   1              uchar i;
  37   1              for(i=0;i<light;i++);
  38   1      }
  39          
  40          /*****初始化子程序*****/
  41          void init(void)                                 //定时器初始化,设置定时器0工作方式1,定时时间1ms
  42          {                        
  43   1              TMOD=0x1;
  44   1              TH0=0xfc;
  45   1              TL0=0x18;
  46   1      }
  47          
  48          /*****计数器中断程序*****/
  49          void timer0(void) interrupt 1                   //中断处理
  50          {
  51   1              TH0=0xfc;
  52   1              TL0=0x18;
  53   1              a++;                                            
  54   1      }
  55          
C51 COMPILER V8.02   MAIN                                                                  10/15/2008 21:14:04 PAGE 2   

  56          /*****汉字循环显示*****/
  57          void run_move(void)
  58          {
  59   1              uchar   k1,k2;
  60   1              if(a>=move_speed)                               //move_speed控制移动速度
  61   1              {                               
  62   2                                                              
  63   2                      if(k>s-ziti-1)k=0;                              //整屏移动列数          
  64   2                      k1=k/ziti;
  65   2                      k2=k%ziti;
  66   2                      j=ziti*2*k1+k2;                                 //显示指针
  67   2                      k++;
  68   2                      move_st=1;
  69   2                      a=0;
  70   2              } 
  71   1      }
  72          
  73          /*****装载显示数据至缓冲区*****/
  74          void load_hanzi(void)
  75          {               
  76   1              uchar i;
  77   1              run_move();
  78   1              if(move_st)
  79   1              {       
  80   2                      for(i=0;i<31;i++)
  81   2                      {
  82   3                              disbuf[i][0]=disbuf[i+1][0];//移位处理
  83   3                              disbuf[i][1]=disbuf[i+1][1];//移位处理
  84   3                      } 
  85   2                      disbuf[31][0]=hanzi[j];
  86   2                      disbuf[31][1]=(hanzi[ziti+j]);                  
  87   2                      move_st=0;                                         
  88   2              }               
  89   1      }
  90          
  91          /*****扫描显示数据缓冲区的内容*****/
  92          void display(void)
  93          {               
  94   1              uchar i;
  95   1              CS2=1;                                                          //关右屏
  96   1              CS1=0;                                                          //开左屏
  97   1              for (i=0;i<16;i++)
  98   1              {
  99   2                      lie=i;                                                  
 100   2                      hang1=disbuf[i][0];
 101   2                      hang2=disbuf[i][1];
 102   2                      delay();
 103   2                      hang1=0;
 104   2                      hang2=0;                           
 105   2              }
 106   1              CS1=1;                                                          //关左屏
 107   1              CS2=0;                                          //开右屏
 108   1              for (i=0;i<16;i++)
 109   1              {
 110   2                      lie=i<<4;
 111   2                      hang1=disbuf[i+16][0];
 112   2                      hang2=disbuf[i+16][1];
 113   2                      delay();
 114   2                      hang1=0;
 115   2                      hang2=0;
 116   2              }
 117   1      
C51 COMPILER V8.02   MAIN                                                                  10/15/2008 21:14:04 PAGE 3   

 118   1      }
 119          
 120          /*****主程序*****/
 121          void main (void)
 122          {
 123   1              init();
 124   1              EA=1;                                                           //开中断
 125   1              TR0=1;                                          
 126   1              ET0=1;                                                  
 127   1              while(1)
 128   1              {
 129   2                      load_hanzi();
 130   2                      display();
 131   2              }
 132   1      }
 133          
 134          /*****END*****/
 135          /*****欢迎到作者博客交流:http://www.jiangx.net*****/   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    313    ----
   CONSTANT SIZE    =   7648    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     74    ----
   IDATA SIZE       =   ----    ----
   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 + -