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

📄 ds1307.lst

📁 这是一个大模式下ucos51的移植结果,因为大部分可载的ucos51都是小模式下的
💻 LST
字号:
C51 COMPILER V7.50   DS1307                                                                01/02/2009 14:29:38 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          /*********************************LCD定义部分********************************/
   4          //输入方式设置
   5          #define LCD_AC_AUTO_INCREMENT     0x06         //数据读、写操作后,AC自动增一
   6          #define LCD_AC_AUTO_DECREASE      0x04         //数据读、写操作后,AC自动减一
   7          #define LCD_MOVE_ENABLE           0x05         //数据读、写操作,画面平移
   8          #define LCD_MOVE_DISENABLE        0x04         //数据读、写操作,画面不动
   9          #define LCD_GO_HOME               0x02         //AC=0,光标、画面回HOME位
  10          //设置显示、光标及闪烁开、关
  11          #define LCD_DISPLAY_ON            0x0C         //显示开
  12          #define LCD_DISPLAY_OFF           0x08         //显示关
  13          #define LCD_CURSOR_ON             0x0A         //光标显示
  14          #define LCD_CURSOR_OFF            0x08         //光标不显示
  15          #define LCD_CURSOR_BLINK_ON       0x09         //光标闪烁
  16          #define LCD_CURSOR_BLINK_OFF      0x08         //光标不闪烁
  17          //光标、画面移动,不影响DDRAM
  18          #define LCD_LEFT_MOVE             0x18         //LCD显示左移一位
  19          #define LCD_RIGHT_MOVE            0x1C         //LCD显示右移一位
  20          #define LCD_CURSOR_LEFT_MOVE      0x10         //光标左移一位
  21          #define LCD_CURSOR_RIGHT_MOVE     0x14         //光标右移一位
  22          //工作方式设置
  23          #define LCD_DISPLAY_DOUBLE_LINE   0x38         //两行显示
  24          #define LCD_DISPLAY_SINGLE_LINE   0x30         //单行显示
  25          #define LCD_CLEAR_SCREEN  0X01   //清屏
  26          /***********************LCD1602地址相关******************************/
  27          #define LINE1_HEAD    0x80   // 第一行DDRAM起始地址 
  28          #define LINE2_HEAD    0xc0   //  第二行DDRAM起始地址
  29          #define LINE1         0      //第一行
  30          #define LINE2         1      //第二行
  31          #define LINE_LENGTH   16     //每行的最大字符长度
  32          /***********************LCD1602接线引脚定义**************************
  33          **********************可根据实际电路改变*******************************/
  34          #define LCDIO     P2         //定义P2口与LCD1602的数据口相接
  35            sbit   LCD_RS=P1^4;         
  36            sbit   LCD_RW=P1^3;         
  37            sbit   LCD_EN=P1^2;
  38            sbit  LCD_BUSY=LCDIO^7;
  39           /**********************另外相关的定义*********************************/
  40           #define HIGH               1
  41           #define LOW                0   
  42           #define TURE               1
  43           #define  FALSE             0
  44           #define  uchar unsigned char
  45           #define  uint  unsigned int
  46           
  47           /*************************以下是函数的申明部分*************************/
  48           void LCD_init(void);                    //LCD1602初始化
  49           void LCD_send_command(uchar command);   //
  50           void LCD_send_data(uchar dat);
  51           void LCD_write_char(uchar x,uchar y,uchar dat);
  52           void LCD_write_string(uchar x,uchar y,char *Data);
  53           void delay_ms(uint n);
  54           void LCD_check_busy(void);
  55           /*********************结束***********************************************/
C51 COMPILER V7.50   DS1307                                                                01/02/2009 14:29:38 PAGE 2   

  56          /***************************DS1307开始*****************************************************************/
  57          #define    Wait1us        _nop_();
  58          #define    Wait2us        {_nop_();_nop_();}
  59          #define    Wait4us        {Wait2us;Wait2us;}
  60          #define    Wait8us        {Wait4us;Wait4us;}
  61          #define    Wait10us    {Wait8us;Wait2us;}
  62          #define  WRITEDS1307    0xD0
  63          #define     READDS1307    0xD1
  64          #define  WRITE2402    0xa0
  65          #define     READ2402    0xa1
  66            sbit SDA=P1^4;      //DS1307 Serial-Data Input    pin 5 
  67            sbit SCL=P1^3;     //DS1307 Serial-Clock Input    pin 6
  68          /************************************************************/
  69          void I2C_start(void);//I2C start function
  70          void I2C_stop(void);//I2C stop function
  71          //void I2C_send_ack(void);//I2C send responsion function 
  72          void I2C_send_noack(void);
  73          unsigned char I2C_write_byte(unsigned char IIC_data);//I2C bus write byte function 
  74          unsigned char I2C_read_byte(void);//I2C bus read byte function
  75          /***********************************************************************/
  76          void Write1307(unsigned char add,unsigned char dat);//write information to ds1307
  77          unsigned char Read1307(unsigned char add);//read information from ds1307
  78          void Read_RTC(void);//read RTC 
  79          void Set_RTC(void);//set RTC 
  80          /***********************************************************************/
  81          unsigned char set_rtc_code[7];
  82          code unsigned char rtc_address[7]={0x00,0x01,0x02,0x03,0x04,0x05,0x06};
  83          code unsigned char *day[7]={"Mon","Tue","Wen","Thu","Fri","Sat","Sun"};
  84          unsigned char read_rtc_code[7];
  85          /***********************************************************************/
  86          void Initial(void);//system initize function
  87          void Display(void);//RTC display function
  88          /***********************************************************************/
  89          /***********************************************************************/
  90          
  91          /***********************************************************************/
  92          /*void Initial(void)       
  93          { 
  94                  Set_RTC();    
  95          }*/
  96          /***********************************************************************/
  97          void I2C_start(void)
  98          {
  99   1              SDA=1;
 100   1              SCL=1;
 101   1              Wait8us;
 102   1              SDA=0;
 103   1              Wait8us;
 104   1              SCL=0;
 105   1        
 106   1      }
 107          /***********************************************************************/
 108          void I2C_stop(void)
 109          {
 110   1              SDA=0;
 111   1              SCL=1;
 112   1              Wait8us;
 113   1              SDA=1;
 114   1              Wait4us;
 115   1              SCL=0;
 116   1      }
 117          
C51 COMPILER V7.50   DS1307                                                                01/02/2009 14:29:38 PAGE 3   

 118          void I2C_send_noack(void)
 119          {
 120   1              SDA=1;
 121   1              SCL=1;
 122   1              Wait4us;
 123   1              SCL=0;
 124   1      }
 125          /***********************************************************************/
 126          unsigned char I2C_write_byte(unsigned char IIC_data)
 127          {
 128   1      unsigned char i;
 129   1              for(i=0;i<8;i++)
 130   1              {
 131   2                      SCL=0;
 132   2                      if((IIC_data<<i) & 0x80)
 133   2                              SDA=1;                   //判断发送位
 134   2                      else 
 135   2                              SDA=0;
 136   2                              Wait2us;
 137   2                              SCL=1;
 138   2                              Wait4us;
 139   2                              SCL=0;
 140   2              }
 141   1              Wait4us;
 142   1              SDA=1; //发送完8bit,释放总线准备接收应答位
 143   1              Wait2us;
 144   1              SCL=1;
 145   1              Wait4us; //sda上数据即是从应答位
 146   1              if (SDA==1)
 147   1              {
 148   2                      SCL=0; //不考虑从应答位 但要控制好时序
 149   2                      return 1;
 150   2              }
 151   1              else
 152   1              {
 153   2                      SCL=0; //不考虑从应答位 但要控制好时序
 154   2                      return 0;
 155   2              }
 156   1       }
 157          /***********************************************************************/
 158          unsigned char I2C_read_byte(void)
 159          {
 160   1      unsigned char i,dat;
 161   1              dat=0;
 162   1              SDA=1;
 163   1              for (i=0;i<8;i++)
 164   1              {
 165   2                      dat=dat<<1;
 166   2                      SCL=1;
 167   2                      Wait2us;
 168   2                      if(SDA==1)
 169   2                      {
 170   3                              dat++;
 171   3                      }
 172   2           
 173   2                      SCL=0;  
 174   2              }  
 175   1              return (dat); 
 176   1      }
 177          /***********************************************************************/
 178          /******************************** DS1307 PART START  ****************/
 179          void Write1307(unsigned char add,unsigned char dat)
C51 COMPILER V7.50   DS1307                                                                01/02/2009 14:29:38 PAGE 4   

 180          {
 181   1              I2C_start();
 182   1              I2C_write_byte(WRITEDS1307);
 183   1              I2C_write_byte(add);
 184   1              I2C_write_byte(dat);
 185   1              I2C_stop();
 186   1      }
 187            
 188          /***********************************************************************/
 189          unsigned char Read1307(unsigned char add)
 190          {
 191   1        
 192   1      unsigned char dat;
 193   1              I2C_start();
 194   1              I2C_write_byte(WRITEDS1307);
 195   1              I2C_write_byte(add);
 196   1              I2C_start();
 197   1              I2C_write_byte(READDS1307);
 198   1              dat=I2C_read_byte(); 
 199   1              I2C_send_noack();
 200   1              I2C_stop();        
 201   1              return (dat);
 202   1      }
 203          /****************************读DS1307的寄存器*******************************************/
 204          void Read_RTC(void)
 205          {
 206   1      unsigned char i,*p;
 207   1              p=rtc_address;
 208   1              for(i=0;i<7;i++)
 209   1              {
 210   2                      read_rtc_code[i]=Read1307(*p);
 211   2                      p++;
 212   2              }
 213   1      }
 214          /***************************DS1307的初始化********************************************/
 215          void Set_RTC(void)
 216          {
 217   1      unsigned char i;
 218   1      //      p=rtc_address;
 219   1              Write1307(0,0x81);
 220   1              
 221   1              for(i=8;i>1;i--)
 222   1              {
 223   2                      Write1307((i-2),set_rtc_code[i-2]);
 224   2              }
 225   1      }  
 226          
 227          
 228          
 229          void Write2402(unsigned char add,unsigned char dat)
 230          {
 231   1              I2C_start();
 232   1              I2C_write_byte(WRITE2402);
 233   1              I2C_write_byte(add);
 234   1              I2C_write_byte(dat);
 235   1              I2C_stop();
 236   1      }
 237            
 238          /***********************************************************************/
 239          unsigned char Read2402(unsigned char add)
 240          {
 241   1        
C51 COMPILER V7.50   DS1307                                                                01/02/2009 14:29:38 PAGE 5   

 242   1      unsigned char dat;
 243   1              I2C_start();
 244   1              I2C_write_byte(WRITE2402);
 245   1              I2C_write_byte(add);
 246   1              I2C_start();
 247   1              I2C_write_byte(READ2402);
 248   1              dat=I2C_read_byte(); 
 249   1              I2C_send_noack();
 250   1              I2C_stop();        
 251   1              return (dat);
 252   1      }


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