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

📄 sd2000.lst

📁 lcd1602的四位数据线用法
💻 LST
字号:
C51 COMPILER V8.02   SD2000                                                                03/14/2009 10:38:56 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SD2000
OBJECT MODULE PLACED IN sd2000.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sd2000.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <intrins.h>
   2          #include"sd2000.h"
   3          
   4          unsigned char   date[7];   //日期数组
   5                            /*date[0]=year,date[1]=month,date[2]=day,date[3]=week,
   6                              date[4]=hour,date[5]=minute,date[6]=second*/
   7          /*********I2C延时***********/
   8          void I2CWait(void)
   9          {       
  10   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();
  11   1      }
  12          
  13          
  14          /********开启SD2000的I2C总线********/
  15          bit I2CStart(void)
  16          {
  17   1              SDA=1;
  18   1              SCL=1;
  19   1              I2CWait();
  20   1              if(!SDA)return false;//SDA线为低电平则总线忙,退出
  21   1              SDA=0;
  22   1              I2CWait();
  23   1              while(SDA)return false;//SDA线为高电平则总线出错,退出
  24   1              SCL=0;
  25   1              I2CWait();
  26   1              return true;
  27   1      }
  28          
  29          
  30          /********关闭SD2000的I2C总线*******/
  31          void I2CStop(void)
  32          {
  33   1              SDA=0;
  34   1              SCL=0;
  35   1              I2CWait();
  36   1              SCL=1;
  37   1              I2CWait();
  38   1              SDA=1;
  39   1      }
  40          
  41          
  42          /*********发送 ACK*********/
  43          void I2CAck(void)
  44          {       
  45   1              SDA=0;
  46   1              SCL=0;
  47   1              I2CWait();
  48   1              SCL=1;
  49   1              I2CWait();
  50   1              SCL=0;
  51   1      }
  52          
  53          
  54          /*********发送NO ACK*********/
  55          void I2CNoAck(void)
C51 COMPILER V8.02   SD2000                                                                03/14/2009 10:38:56 PAGE 2   

  56          {       
  57   1              SDA=1;
  58   1              SCL=0;
  59   1              I2CWait();
  60   1              SCL=1;
  61   1              I2CWait();
  62   1              SCL=0;
  63   1      }
  64          
  65          
  66          /*********读取ACK信号*********/
  67          bit I2CWaitAck(void)  //返回为:1=有ACK,0=无ACK
  68          {
  69   1              uchar errtime=255;
  70   1              SCL=0;
  71   1              SDA=1;
  72   1              I2CWait();
  73   1              SCL=1;
  74   1              I2CWait();
  75   1              while(SDA)
  76   1              {
  77   2                      errtime--;
  78   2                      if(!errtime)
  79   2                      SCL=0;
  80   2                      return false;
  81   2              }
  82   1              SCL=0;
  83   1              return true;
  84   1      }
  85          
  86          
  87          /************从SD2000发送一个字节*************/
  88          void I2CSendByte(uchar demand,bit order) //order=1,H_L;order=0,L_H
  89          {
  90   1              uchar i=8;                       //order=1,从HI-->LO发送8bit数据
  91   1                                               //order=0,从LO-->HI发送8bit数据
  92   1              if(order)
  93   1              {
  94   2                      while(i--)
  95   2                      {
  96   3                              SCL=0;
  97   3                              _nop_();
  98   3                              _nop_();
  99   3                              SDA=(bit)(demand&0x80);
 100   3                              demand<<=1;
 101   3                              I2CWait();
 102   3                              SCL=1;
 103   3                              I2CWait();
 104   3                      }
 105   2                      SCL=0;
 106   2              }
 107   1           else
 108   1              {
 109   2                      while(i--)
 110   2                       {
 111   3                              SCL=0;
 112   3                              _nop_();
 113   3                              _nop_();
 114   3                              SDA=(bit)(demand&0x01);
 115   3                              demand>>=1;
 116   3                              I2CWait();
 117   3                              SCL=1;
C51 COMPILER V8.02   SD2000                                                                03/14/2009 10:38:56 PAGE 3   

 118   3                              I2CWait();
 119   3                       }
 120   2                       SCL=0;
 121   2              }
 122   1      }
 123          
 124          
 125          /*********MCU从SD2000读入一字节*********/
 126          uchar I2CReceiveByte(void)
 127          {
 128   1              uchar i=8;
 129   1              uchar ddata=0;
 130   1              SDA=1;
 131   1              while(i--)
 132   1              {
 133   2                      ddata>>=1;          //数据从低位开始读取
 134   2                      SCL=0;
 135   2                      I2CWait();
 136   2                      SCL=1;
 137   2                      I2CWait();         //从低位开始 ddata|=SDA;ddata>>=1
 138   2                      if(SDA)
 139   2                      {
 140   3                              ddata|=0x80;
 141   3                      }
 142   2              }
 143   1              SCL=0;
 144   1              return ddata;
 145   1      }
 146          
 147          
 148          /******读SD2000实时数据寄存器******/
 149          void I2CReadDate(void)
 150          {
 151   1              uchar n;
 152   1              I2CStart();
 153   1              I2CSendByte(0x65,1);       //从年开始读取数据
 154   1              I2CWaitAck();
 155   1              for(n=0;n<7;n++)
 156   1              {
 157   2                      date[n]=I2CReceiveByte();
 158   2                      if (n!=6)         //最后一个数据不应答
 159   2                      {
 160   3                              I2CAck();
 161   3                      }
 162   2              }
 163   1              I2CNoAck();
 164   1              I2CStop();
 165   1      }
 166          
 167          
 168          /*写SD2000状态寄存器命令*/
 169          void I2CWriteStatus(void)
 170          {               
 171   1              I2CStart();
 172   1              I2CSendByte(0x62,1);      //发送SD2000状态寄存器命令,
 173   1              I2CWaitAck();   
 174   1              I2CSendByte(0x7f,0);      //24小时制,开所有中断
 175   1              I2CWaitAck();
 176   1              I2CStop();        
 177   1      }
 178          
 179          /*写SD2000时间寄存器命令*/
C51 COMPILER V8.02   SD2000                                                                03/14/2009 10:38:56 PAGE 4   

 180          void I2CWriteTime(void)
 181          {               
 182   1              
 183   1              uchar n;
 184   1                  date[0]=0x06;//year;06/11/15/06/13/14/50
 185   1              date[1]=0x12;//month
 186   1              date[2]=0x15;//day
 187   1              date[3]=0x05;//week
 188   1              date[4]=0x09;//hour
 189   1              date[5]=0x19;//minute
 190   1              date[6]=0x00;//second   
 191   1              I2CStart();
 192   1              I2CSendByte(0x64,1);      //发送SD2000写时间寄存器命令,
 193   1              I2CWaitAck();   
 194   1              for(n=0;n<7;n++)
 195   1                  {
 196   2                      I2CSendByte(date[n],0);
 197   2                      I2CWaitAck();
 198   2                  }
 199   1              I2CStop();
 200   1                    
 201   1      }
 202          
 203          /*********延时子程序*********
 204          void Delay(uint nn)
 205          {
 206             while(nn--);
 207             }
 208          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    393    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14    ----
   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 + -