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

📄 text1.lst

📁 lcd 12864+pcf8563
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.09   TEXT1                                                                 06/22/2011 21:07:37 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include"zifuku.h"
   3          //#include "delay11us().c"
   4          //#include "PCF8563().C"
   5          
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          sbit CS1=P2^0;                  //LCD右屏幕
   9          sbit CS2=P2^1;                  //LCD左屏幕
  10          sbit RS=P2^2;                   //LCD数据、指令寄存器
  11          sbit RW=P2^3;                   //LCD读、写操作
  12          sbit E=P2^4;                    //LCD使能信号,下降沿有效
  13          
  14          
  15          
  16          void delay11us(unsigned char t)
  17          {
  18   1        for (;t>0;t--);
  19   1      }
  20          
  21          
  22          #define uchar unsigned char
  23          #define uint unsigned int
  24          
  25          uchar   lcd16_1[16];
  26          uchar   lcd16_2[16] = {"welcome"};
  27          struct time
  28          {
  29                  uchar  second;
  30                  uchar   minute;
  31                  uchar   hour;
  32                  uchar   day;
  33                  uchar   weekday;
  34                  uchar   month;
  35                  uint    year;
  36          } time;
  37          
  38          sbit tim_sda=P1^7;
  39          sbit tim_scl=P1^6;
  40          
  41          
  42          
  43          bit      tim_ack;               // i2c slave ack.
  44          bit      tim_err;
  45          uchar tim_rd_buffer[16];
  46          uchar tim_wr_buffer[16];
  47          
  48          
  49          // i2c start.
  50          void PCF8563_start()    //start flag is when tim_scl 1, tim_sdafrom 1 to 0.
  51          {
  52   1              tim_sda = 1;
  53   1              delay11us(1);
  54   1              tim_scl = 1;
  55   1              delay11us(1);
C51 COMPILER V8.09   TEXT1                                                                 06/22/2011 21:07:37 PAGE 2   

  56   1              tim_sda = 0;
  57   1              delay11us(1);
  58   1      }
  59          
  60          // i2c stop.
  61          void PCF8563_stop()                     //start flag is when tim_scl 1, tim_sdafrom 0 to 1.
  62          {
  63   1              tim_sda = 0;
  64   1              delay11us(1);
  65   1              tim_scl = 1;
  66   1              delay11us(1);
  67   1              tim_sda = 0;
  68   1      }
  69          
  70          //i2c slave respons.
  71          void PCF8563_respons()
  72          {
  73   1              uchar i;
  74   1              tim_scl = 1;
  75   1              delay11us(1);
  76   1              while((tim_sda)&&(i<250))  i++;
  77   1              if(!tim_sda)
  78   1                      tim_ack = 1;
  79   1              else
  80   1                      tim_ack = 0;
  81   1              tim_scl = 0;
  82   1              delay11us(1);
  83   1      }
  84          
  85          // i2c master respons.
  86          void PCF8563_master_respons(bit master_ack)
  87          {
  88   1              tim_scl = 0;
  89   1              delay11us(1);
  90   1              tim_sda = ~master_ack;
  91   1              delay11us(1);
  92   1              tim_scl = 1;
  93   1              delay11us(1);
  94   1              tim_scl = 0;
  95   1              delay11us(1);
  96   1      }
  97          
  98          //i2c init.
  99          void PCF8563_init()
 100          {
 101   1              tim_sda = 1;
 102   1              delay11us(1);
 103   1              tim_scl = 1;
 104   1              delay11us(1);
 105   1      }
 106          
 107          // i2c write n byte.
 108          void PCF8563_wr_byte(uchar dat)
 109          {
 110   1              uchar i , temp;
 111   1              temp = dat;
 112   1              for(i=0;i<8;i++)
 113   1              {
 114   2      //              temp = temp<<1;          //send high to low,
 115   2                      tim_scl = 0;
 116   2                      delay11us(1);
 117   2      //              tim_sda = CY;
C51 COMPILER V8.09   TEXT1                                                                 06/22/2011 21:07:37 PAGE 3   

 118   2                      
 119   2                      if(temp&0x80)
 120   2                              tim_sda = 1;
 121   2                      else
 122   2                              tim_sda = 0;
 123   2                      temp = temp<<1;
 124   2                      
 125   2                      delay11us(1);
 126   2                      tim_scl = 1;
 127   2                      delay11us(1);
 128   2      //              tim_scl = 0;
 129   2      //              delay11us(1);
 130   2              }
 131   1              tim_scl = 0;
 132   1              delay11us(1);
 133   1              tim_sda = 1;                    //set tim_sda to 1 to wait respons.
 134   1              delay11us(1);
 135   1      }
 136          
 137          uchar PCF8563_rd_byte()
 138          {
 139   1              uchar i,k;
 140   1              tim_scl = 0;
 141   1              delay11us(1);
 142   1              tim_sda = 1;
 143   1              delay11us(1);
 144   1              for(i=0;i<8;i++)
 145   1              {
 146   2                      tim_scl = 1;
 147   2                      delay11us(1);
 148   2                      k = (k<<1)|tim_sda;
 149   2                      tim_scl = 0;
 150   2                      delay11us(1);
 151   2              }
 152   1              return k;
 153   1      }
 154          
 155          void PCF8563_write_n_byte(uchar add,uchar com,uchar *dat,uchar n_byte)   //
 156          {
 157   1              uchar i = 0;
 158   1              uchar temp;
 159   1      
 160   1              temp = *dat;                            // send to begin address to 'temp'.
 161   1      
 162   1              add = add<<1;
 163   1              add = 0xa0+add+0x00;                    
 164   1      
 165   1              PCF8563_start();
 166   1              PCF8563_wr_byte(add);           //send EEPROM address, bit 0 = 0 is write.
 167   1              PCF8563_respons();
 168   1              if(!tim_ack)                            //if i2c respons.
 169   1              {
 170   2                      tim_err = 1;
 171   2                      return;
 172   2              }
 173   1              
 174   1              PCF8563_wr_byte(com);                   //send EEPROM beginning address.
 175   1              PCF8563_respons();
 176   1              if(!tim_ack)                            //if i2c respons.
 177   1              {
 178   2                      tim_err = 1;
 179   2                      return;
C51 COMPILER V8.09   TEXT1                                                                 06/22/2011 21:07:37 PAGE 4   

 180   2              }
 181   1              
 182   1              while(n_byte)                      //write n byte.
 183   1              {
 184   2                      PCF8563_wr_byte(temp);
 185   2                      PCF8563_respons();
 186   2                      if(!tim_ack)                            
 187   2                      {
 188   3                              tim_err = 1;
 189   3                              PCF8563_stop(); 
 190   3                              return;
 191   3                      }
 192   2                      temp++;
 193   2                      n_byte--;
 194   2              }
 195   1              
 196   1              PCF8563_stop(); 
 197   1      }
 198          
 199          void PCF8563_read_n_byte(uchar add,uchar com,uchar n_byte)
 200          {
 201   1              uchar *temp;
 202   1      
 203   1              temp = tim_rd_buffer;
 204   1      
 205   1              add = add<<1;
 206   1              add = 0xa0+add+0x00;
 207   1              
 208   1      //      com = com - 1;                  
 209   1      
 210   1              PCF8563_start();
 211   1      
 212   1              PCF8563_wr_byte(add);                           //send address + wr.
 213   1              PCF8563_respons();
 214   1      
 215   1              PCF8563_wr_byte(com);                           // first byte address.
 216   1              PCF8563_respons();
 217   1      
 218   1              add = add+0x01;                 
 219   1      
 220   1              PCF8563_start();
 221   1              PCF8563_wr_byte(add);                      //send address + rd.
 222   1              PCF8563_respons();
 223   1      
 224   1              while(n_byte)                              // rd n byte . 
 225   1              {
 226   2                      *temp = PCF8563_rd_byte();
 227   2                      if(n_byte != 1)                         //if i2c respons.
 228   2                      {
 229   3                              PCF8563_master_respons(1);      //if the number is not the last one, master send a ack bit.
 230   3      //                      return;
 231   3                      }
 232   2                      temp++;
 233   2                      n_byte--;
 234   2              }
 235   1              PCF8563_stop();
 236   1      }
 237          

⌨️ 快捷键说明

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