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

📄 24c02-c.lst

📁 基于51单片机的LED/24C02程序
💻 LST
字号:
C51 COMPILER V8.08   24C02_C                                                               03/09/2009 12:03:53 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 24C02_C
OBJECT MODULE PLACED IN 24c02-C.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE 24c02-C.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*24C02-多花样流水灯演示程序(C51)
   2          /* 将演示数据先写入24C02芯片内,再将其数据逐个读出送P0口LED显示。                               
   3          /*******************************************************************/
   4          #include <reg51.h>
   5          #include <intrins.h>
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          #define OP_WRITE 0xa0          // 器件地址以及写入操作
   9          #define OP_READ  0xa1           // 器件地址以及读取操作
  10          
  11          uchar code display[72]={
  12                  0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
  13                  0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
  14                  0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
  15                  0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
  16                  0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,
  17                  0x9F,0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,
  18                  0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
  19                  0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
  20                  0xAA,0x55,0x18,0xFF,0xF0,0x0F,
  21                  0x00,0xFF,0x00,0xFF };
  22          
  23          sbit SDA = P3^5;
  24          sbit SCL = P3^4;
  25          
  26          void start();
  27          void stop();
  28          uchar shin();
  29          bit shout(uchar write_data);
  30          void write_byte( uchar addr, uchar write_data);
  31          void fill_byte(uchar fill_size,uchar fill_data);
  32          void delayms(uint ms);
  33          uchar read_current();
  34          uchar read_random(uchar random_addr);
  35          
  36          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  37          
  38          /**********************************************************/
  39          main(void)
  40          {
  41   1         uchar i;
  42   1         SDA = 1;
  43   1         SCL = 1;
  44   1         fill_byte(72,0xff);          // 将前72字节填充0xff
  45   1      
  46   1         for(i = 0 ; i < 72; i++)    //写入显示代码到AT24C02
  47   1          {
  48   2            write_byte(i,display[i]);
  49   2          }
  50   1         for(i =0 ;i <72 ; i++)      //从AT24C02移出数据送到P0口显示
  51   1         {
  52   2            P0 = read_random(i);
  53   2            delayms(350);
  54   2         } 
  55   1      }
C51 COMPILER V8.08   24C02_C                                                               03/09/2009 12:03:53 PAGE 2   

  56          
  57          /**********************************************************/
  58          void start()
  59           //开始位
  60          {
  61   1         SDA = 1;
  62   1         SCL = 1;
  63   1         delayNOP();
  64   1         SDA = 0;
  65   1         delayNOP();
  66   1         SCL = 0;
  67   1      }
  68          
  69          /**********************************************************/
  70          void stop()
  71           // 停止位
  72          {
  73   1         SDA = 0;
  74   1         delayNOP();
  75   1         SCL = 1;
  76   1         delayNOP();
  77   1         SDA = 1;
  78   1      }
  79          
  80          /**********************************************************/
  81          uchar shin()
  82          // 从AT24C02移出数据到MCU
  83          {
  84   1         uchar i,read_data;
  85   1         for(i = 0; i < 8; i++)
  86   1         {
  87   2          SCL = 1;
  88   2          read_data <<= 1;
  89   2          read_data |= SDA;
  90   2          SCL = 0;
  91   2         }
  92   1          return(read_data);
  93   1      }
  94          
  95          /**********************************************************/
  96          bit shout(uchar write_data) 
  97          // 从MCU移出数据到AT24C02
  98          {
  99   1         uchar i;
 100   1         bit ack_bit;
 101   1         for(i = 0; i < 8; i++)   // 循环移入8个位
 102   1         {
 103   2           SDA = (bit)(write_data & 0x80);
 104   2          _nop_();
 105   2          SCL = 1;
 106   2          delayNOP();
 107   2          SCL = 0;
 108   2          write_data <<= 1;
 109   2         }
 110   1         SDA = 1;                     // 读取应答
 111   1         delayNOP();
 112   1         SCL = 1;
 113   1         delayNOP();
 114   1         ack_bit = SDA;
 115   1         SCL = 0;
 116   1         return ack_bit;            // 返回AT24C02应答位
 117   1      }
C51 COMPILER V8.08   24C02_C                                                               03/09/2009 12:03:53 PAGE 3   

 118          
 119          /**********************************************************/
 120          void write_byte(uchar addr, uchar write_data)
 121          // 在指定地址addr处写入数据write_data
 122          {
 123   1         start();
 124   1         shout(OP_WRITE);
 125   1         shout(addr);
 126   1         shout(write_data);
 127   1         stop();
 128   1         delayms(10);          // 写入周期
 129   1      }
 130          
 131          /**********************************************************/
 132          void fill_byte(uchar fill_size,uchar fill_data)
 133          // 填充数据fill_data到EEPROM内fill_size字节
 134          {
 135   1         uchar i;
 136   1         for(i = 0; i < fill_size; i++)
 137   1         {
 138   2           write_byte(i, fill_data);
 139   2         }
 140   1      }
 141          
 142          /**********************************************************/
 143          uchar read_current()
 144          // 在当前地址读取
 145          {
 146   1         uchar read_data;
 147   1         start();
 148   1         shout(OP_READ);
 149   1         read_data = shin();
 150   1         stop();
 151   1         return read_data;
 152   1      }
 153          
 154          /**********************************************************/
 155          uchar read_random(uchar random_addr)
 156          // 在指定地址读取
 157          {
 158   1         start();
 159   1         shout(OP_WRITE);
 160   1         shout(random_addr);
 161   1         return(read_current());
 162   1      }
 163          
 164          /**********************************************************/
 165          void delayms(uint ms) 
 166          // 延时子程序
 167          {
 168   1         uchar k;
 169   1         while(ms--)
 170   1         {
 171   2            for(k = 0; k < 120; k++);
 172   2         }
 173   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    271    ----
   CONSTANT SIZE    =     72    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V8.08   24C02_C                                                               03/09/2009 12:03:53 PAGE 4   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   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 + -