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

📄 9346su.lst

📁 93C46存储花样流水灯实验(包括汇编源程序和C语言源程序)
💻 LST
字号:
C51 COMPILER V7.50   9346SU                                                                10/11/2008 18:56:28 PAGE 1   


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

line level    source

   1          /*******************************************************************************
   2          * 93C46读写 8路跑马灯方式数码管显示                                            *
   3          *  从地址0x00开始写入数据"1-8",然后再读出送数码管显示。                       *
   4          *硬件连接:数码管数据接P0,数码管控制接P2,93C46接P3.4--P3.7                     *                 
   5          *开机, 数码管显示0-7,移动显示,为了证明93C46的作用, 去掉93C46连线,则无显示 *
   6          *注意:在擦除或写入数据之前,必须先写入EWEN指令,  用于8位模式                 *                          
             -               
   7          */
   8          #include <reg51.h>
   9          #include <intrins.h>
  10          //define OP code
  11          #define OP_EWEN_H               0x00    // 00                                   write enable
  12          #define OP_EWEN_L               0x60    // 11X XXXX                             write enable
  13          #define OP_EWDS_H               0x00    // 00                                   disable
  14          #define OP_EWDS_L               0x00    // 00X XXXX                             disable
  15          #define OP_WRITE_H              0x40    // 01 A6-A0                             write data
  16          #define OP_READ_H               0x80    // 10 A6-A0                             read data
  17          #define OP_ERASE_H              0xc0    // 11 A6-A0                             erase a word
  18          #define OP_ERAL_H               0x00    // 00                                   erase all
  19          #define OP_ERAL_L               0x40    // 10X XXXX                             erase all
  20          #define OP_WRAL_H               0x00    // 00                                   write all       
  21          #define OP_WRAL_L               0x20    // 01X XXXX                             write all       
  22          //define pin
  23          sbit CS = P3^2;
  24          sbit SK = P1^5;
  25          sbit DI = P1^4;
  26          sbit DO = P1^3;
  27          unsigned char code dis_code[] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff,0xfd};//0,1,2,3,4,
             -5,6,7,8,9,关显示,数码管码表                            
  28          unsigned char       display[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  29          void start();
  30          void ewen();
  31          void ewds();
  32          void erase();
  33          void write(unsigned char addr, unsigned char indata);
  34          unsigned char read(unsigned char addr);
  35          void inop(unsigned char op_h, unsigned char op_l);
  36          void shin(unsigned char indata);
  37          unsigned char shout();
  38          void delayms(unsigned int ms);
  39          //*********************************************************
  40          main()
  41          {
  42   1              unsigned char i,shift;
  43   1              CS = 0;                                                 //初始化端口
  44   1              SK = 0;
  45   1              DI = 1;
  46   1              DO = 1;
  47   1              ewen();                                                 // 使能写入操作
  48   1              erase();                                                        // 擦除全部内容         
  49   1              for(i = 0 ; i < 8; i++)         //写入显示代码到AT93C46
  50   1              {
  51   2                      write(i, dis_code[i]);
  52   2              }       
  53   1              ewds();                                 // 禁止写入操作    
C51 COMPILER V7.50   9346SU                                                                10/11/2008 18:56:28 PAGE 2   

  54   1              for(i = 0 ; i < 8; i++) 
  55   1              {
  56   2                display[i]=read(i);      // 读取AT93C46内容
  57   2          }
  58   1              while(1)
  59   1              {
  60   2                 shift=0x7f;
  61   2             P2=0xff ;
  62   2             for(i=0; i<8; i++)
  63   2             {  
  64   3               P2=display[i];
  65   3               P0=shift;
  66   3               shift=_cror_(shift,1);
  67   3              delayms(400);                   //跑马灯方式显示
  68   3                 }    
  69   2              }
  70   1      }
  71          //*********************************************************
  72          void write(unsigned char addr, unsigned char indata)
  73          // 写入数据indata到addr
  74          {
  75   1              inop(OP_WRITE_H, addr);                 // 写入指令和地址
  76   1                      shin(indata);
  77   1                      CS = 0;
  78   1              delayms(10);                                            // Twp
  79   1      }
  80          //*********************************************************
  81          unsigned char read(unsigned char addr)
  82          // 读取addr处的数据
  83          {
  84   1              unsigned char out_data;
  85   1              inop(OP_READ_H, addr);                  // 写入指令和地址
  86   1              out_data = shout();
  87   1              CS = 0; 
  88   1              return out_data;
  89   1      }
  90          //*********************************************************
  91          void ewen()
  92          {
  93   1              inop(OP_EWEN_H, OP_EWEN_L);
  94   1              CS= 0;
  95   1      }
  96          //*********************************************************
  97          void ewds()
  98          {
  99   1              inop(OP_EWDS_H, OP_EWDS_L);
 100   1              CS= 0;  
 101   1      }
 102          //*********************************************************
 103          void erase()
 104          {
 105   1              inop(OP_ERAL_H, OP_ERAL_L);
 106   1              delayms(30);
 107   1              CS = 0;
 108   1      }
 109          //*********************************************************
 110          void inop(unsigned char op_h, unsigned char op_l)
 111          //移入op_h的高两位和op_l的低7位
 112          //op_h为指令码的高两位
 113          //op_l为指令码的低7位或7位地址
 114          {       
 115   1              unsigned char i;        
C51 COMPILER V7.50   9346SU                                                                10/11/2008 18:56:28 PAGE 3   

 116   1              SK = 0;                                                 // 开始位
 117   1              DI = 1;
 118   1              CS = 1;
 119   1              _nop_();
 120   1              _nop_(); 
 121   1              SK = 1;
 122   1              _nop_();
 123   1              _nop_();
 124   1              SK = 0;                                                 // 开始位结束
 125   1              DI = (bit)(op_h & 0x80);        // 先移入指令码高位
 126   1              SK = 1;
 127   1              op_h <<= 1;
 128   1              SK = 0;         
 129   1              DI = (bit)(op_h & 0x80);        // 移入指令码次高位
 130   1              SK = 1;
 131   1              _nop_();
 132   1              _nop_();        
 133   1              SK = 0; 
 134   1                                                                                      // 移入余下的指令码或地址数据
 135   1              op_l <<= 1;     
 136   1              for(i = 0; i < 7; i++)          
 137   1              {
 138   2                      DI = (bit)(op_l & 0x80);// 先移入高位
 139   2                      SK = 1;
 140   2                      op_l <<= 1;
 141   2                      SK = 0;         
 142   2              }
 143   1              DI = 1;         
 144   1      }
 145          //*********************************************************
 146          void shin(unsigned char indata)         
 147                                                                                          //移入数据
 148          {
 149   1              unsigned char i;
 150   1              for(i = 0; i < 8; i++)
 151   1              {
 152   2                      DI = (bit)(indata & 0x80);// 先移入高位
 153   2                      SK = 1;
 154   2                      indata <<= 1;
 155   2                      SK = 0;         
 156   2              }
 157   1              DI = 1;
 158   1      }
 159          //*********************************************************
 160          unsigned char shout(void)                       
 161          // 移出数据
 162          {
 163   1              unsigned char i, out_data;
 164   1              for(i = 0; i < 8; i++)
 165   1              {
 166   2                      SK = 1;
 167   2                      out_data <<= 1;
 168   2                      SK = 0;
 169   2                      out_data |= (unsigned char)DO;
 170   2              }
 171   1              return(out_data);
 172   1      }
 173          //*********************************************************
 174          void delayms(unsigned int ms)   
 175          // 延时子程序
 176          {                                               
 177   1              unsigned char i;
C51 COMPILER V7.50   9346SU                                                                10/11/2008 18:56:28 PAGE 4   

 178   1              while(ms--)
 179   1              {
 180   2                      for(i = 0; i < 240; i++);
 181   2              }
 182   1      }
 183          //*********************************************************
 184          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    311    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       3
   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 + -