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

📄 eeprom.lst

📁 用单片机实现LCD显示字符和图形
💻 LST
字号:
C51 COMPILER V7.09   EEPROM                                                                04/14/2009 08:43:10 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG

line level    source

   1          #include "reg52.h"
   2          #include "eeprom.h"
   3          #define HIGH 1
   4          #define LOW 0 
   5          void I2CDelay_nms(uint Delay);
   6          void delay( uint a)  
   7          { 
   8   1        uint K;
   9   1        for( K=0;K<a;K++)
  10   1        ;
  11   1      }
  12          
  13          ////////////////////////////////I2C///////////////////////////////////////
  14          //提供I2C总线工作时序中的起始位
  15          void I_start(void)
  16          {
  17   1              I2C_SDA = HIGH;
  18   1              delay(4);
  19   1              I2C_SCK = HIGH;
  20   1              delay(4);
  21   1              I2C_SDA = LOW;//当I2C_SCK为高时,I2C_SDA的一个下降沿作为起始位
  22   1              delay(4);
  23   1              I2C_SCK = LOW;
  24   1              delay(4);
  25   1      }
  26          //提供I2C总线工作时序中的停止位
  27          void I_stop(void)
  28          {
  29   1              I2C_SDA = LOW;
  30   1              delay(4);
  31   1              I2C_SCK = HIGH;
  32   1              delay(4);
  33   1              I2C_SDA = HIGH;//当I2C_SCK为高时,I2C_SDA的一个上升沿作为停止位
  34   1              delay(4);
  35   1              I2C_SCK = LOW;
  36   1              delay(4);
  37   1      }
  38            
  39          //提供I2C总线的时钟信号,并返回时钟电平为高期间I2C_SDA信号线上状态
  40          bit I_clock(void)
  41          {
  42   1              bit sample;
  43   1              I2C_SCK = HIGH;
  44   1              delay(4);
  45   1              sample = I2C_SDA;
  46   1              I2C_SCK = LOW;
  47   1              delay(4);
  48   1              return (sample);
  49   1      }
  50          //向I2C总线发送8位数据,并请求一个应答信号ACK。如果收到ACK应答,则返回1,否则返回0。
  51          bit I_send(uchar I_data)
  52          {
  53   1              register uchar i;
  54   1              /*发送8位数据*/
  55   1       
C51 COMPILER V7.09   EEPROM                                                                04/14/2009 08:43:10 PAGE 2   

  56   1              for(i=0;i<8;i++)
  57   1              {
  58   2                      I2C_SDA = (bit)(I_data & 0x80);           //向总线发数据
  59   2                      I_data <<= 1;
  60   2                      I_clock();                                               //提供总线时钟
  61   2              }
  62   1              /*请求应答信号ACK*/
  63   1              I2C_SDA = HIGH;
  64   1              delay(4);
  65   1              return(~I_clock());
  66   1      }
  67          //从I2C总线上接收8位数据信号,并将接收到的8位数据作为一个字节返回,不回送应答信号。
  68          //主函数在调用本函数之前应保证I2C_SDA信号线处于浮置状态,I2C_SDA=1.
  69          uchar I_receive(void)
  70          {
  71   1              uchar I_data = 0;
  72   1              register uchar i;
  73   1              for(i=0;i<8;i++)
  74   1              {
  75   2                      I_data*=2;
  76   2                      if(I_clock())I_data++;
  77   2              }
  78   1              return (I_data);
  79   1      }
  80          
  81          uchar readI2c ( uchar address )
  82          {
  83   1        uchar ibuf = 0 ;
  84   1        I_start() ;
  85   1        I_send(0xa0);
  86   1        I2CDelay_nms(8);
  87   1        I_send(0x00);
  88   1        I2CDelay_nms(8);
  89   1        I_send( address );
  90   1        I2CDelay_nms(8);
  91   1        I_start() ;
  92   1        I2CDelay_nms(5);
  93   1        I_send(0xa1);
  94   1        ibuf = I_receive() ;
  95   1        I_stop( ) ;
  96   1         I2CDelay_nms(8);
  97   1        return ibuf ;
  98   1      }
  99             
 100           
 101          
 102          void writeI2c ( ) // 首地址 秒/分/时/天
 103          {
 104   1      
 105   1        I_start() ;
 106   1        I_send(0xa0);          //     write command
 107   1        I2CDelay_nms(5);               // address     high byte
 108   1        I_send(0x00);
 109   1        I2CDelay_nms(5);
 110   1        I_send(0x00);          //address  low byte
 111   1        I2CDelay_nms(5);
 112   1        I_send(total_t[0]);   //data
 113   1        I2CDelay_nms(5);
 114   1        I_send(total_t[1]);   //data
 115   1        I2CDelay_nms(5);
 116   1        I_send(total_t[2]);   //data
 117   1        I2CDelay_nms(5);
C51 COMPILER V7.09   EEPROM                                                                04/14/2009 08:43:10 PAGE 3   

 118   1        I_send(total_t[3]);    //data
 119   1        I2CDelay_nms(5);
 120   1        I_stop( ) ;
 121   1        I2CDelay_nms(5);
 122   1      }
 123          //--------------------------------------------------
 124          void I2CDelay_nms(uint Delay) // f = 9.216MHZ
 125          { uint i;
 126   1        for(;Delay>0;Delay--)
 127   1         { for(i=0;i<83;i++)
 128   2               ;
 129   2         }
 130   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    317    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -