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

📄 pcf8563.lst

📁 单片机C语言程序设计.日历时钟用液晶显示
💻 LST
字号:
C51 COMPILER V8.05a   PCF8563                                                              08/04/2007 17:18:56 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE PCF8563
OBJECT MODULE PLACED IN PCF8563.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8563.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f020.h>
   2          #include"I2C.H"
   3          #include "KS0108.H"
   4          //------------------------------------------------------------------------------------
   5          // Global CONSTANTS
   6          //------------------------------------------------------------------------------------
   7          #define     PCF8563 0xa2
   8          
   9          typedef union 
  10          {
  11                  unsigned char Clock[7];
  12                  struct RealClock
  13                  {
  14                          unsigned char Year,Month,Week,Day,Hour,Minute,Second;
  15                  } RT;
  16          } SZ;
  17          
  18          SZ xdata RealTime;
  19          
  20          unsigned char code t_initab[16] = { 0x00,0x00,0x50,0x56,0x14,0x09,0x01,0x07,
  21                                              0x07,0x80,0x80,0x80,0x80,0x00,0x00,0x5a
  22                                                                            };//定义为2006年1月1日 星期三00:00:59,控制寄存器的命令
  23          
  24          unsigned char code Pinbi_tab[7] = { 0xff,0x7f,0x3f,0x3f,0x07,0x9f,0xff };
  25                                                                                  //屏蔽所读取的时钟的无效位码表
  26          /*=========================================
  27          实时时钟PCF8563  初始化子函数
  28          ==========================================*/
  29          void Pcf8563_Init(void)
  30          {
  31   1              unsigned char temp;
  32   1              while (SM_BUSY);                        
  33   1              SM_BUSY = 1;                                    
  34   1              SMB0CN  = 0x44;                //SMBus0允许,在应答周期内返回“确认”应答                               
  35   1              COMMAND = ( PCF8563 | READ );
  36   1              HIGH_ADD= 0x02;
  37   1              Attrib  = 0;
  38   1              NByte   = 1;
  39   1              I2CDataBuff = &temp;                                                    
  40   1              STA = 1;                           //当作为主器件时,若总线空闲,则发出一个起始条件                                     
  41   1              while ( SM_BUSY );
  42   1              if( temp & 0x80 )
  43   1              {         
  44   2                      COMMAND = ( PCF8563 | WRITE );    
  45   2                      HIGH_ADD= 0x00;
  46   2                      Attrib  = 0;
  47   2                      NByte   = 16;
  48   2                      I2CDataBuff = t_initab;
  49   2                      STA = 1;
  50   2              }                       
  51   1      }
  52          
  53          void Read_times(void)
  54          {
  55   1              unsigned char i,j;
C51 COMPILER V8.05a   PCF8563                                                              08/04/2007 17:18:56 PAGE 2   

  56   1              while (SM_BUSY);                                
  57   1              SM_BUSY = 1;                                    
  58   1              SMB0CN  = 0x44;                                 
  59   1              COMMAND = ( PCF8563 | READ );         
  60   1              HIGH_ADD= 0x02;
  61   1              Attrib  = 0;
  62   1              NByte   = 7;
  63   1              I2CDataBuff = RealTime.Clock;                                                   
  64   1              STA = 1;                                                
  65   1              while (SM_BUSY);
  66   1      
  67   1              for( i=0;i<7;i++ )
  68   1                 RealTime.Clock[i]&=Pinbi_tab[i];
  69   1              for( i=0;i<3;i++ )
  70   1              {
  71   2                 j = RealTime.Clock[i];
  72   2                 RealTime.Clock[i] = RealTime.Clock[6-i];
  73   2                 RealTime.Clock[6-i] = j;
  74   2              }
  75   1      }
  76          
  77          void TestI2C (void)
  78          {
  79   1              
  80   1              SMBus0_Init();
  81   1              SM_BUSY = 0;                                                                    // Free SMBus for first transfer.
  82   1      
  83   1              Pcf8563_Init();
  84   1      
  85   1              InitLCD();
  86   1                                                        
  87   1              Display(0,0,"www.ecoa.com");
  88   1      
  89   1              for (;;)
  90   1              {
  91   2                      Read_times();
  92   2                      
  93   2                      LCD_DispChar(0,2,((RealTime.RT.Hour>>4)&0x0f)+0x30);//(RealTime.RT.Hour>>4)&0x0f); //128*64  取值x=0-128
             - y=0-8
  94   2                      LCD_DispChar(8,2,(RealTime.RT.Hour&0x0f)+0x30);
  95   2                      LCD_DispChar(16,2,':');
  96   2                      LCD_DispChar(24,2,((RealTime.RT.Minute>>4)&0x0f)+0x30);
  97   2                      LCD_DispChar(32,2,(RealTime.RT.Minute&0x0f)+0x30);
  98   2                      LCD_DispChar(40,2,':');
  99   2                      LCD_DispChar(48,2,((RealTime.RT.Second>>4)&0x0f)+0x30);
 100   2                      LCD_DispChar(56,2,(RealTime.RT.Second&0x0f)+0x30);
 101   2                      //在0,4处显示02/01/01
 102   2                      LCD_DispChar(0,4,((RealTime.RT.Year>>4)&0x0f)+0x30); 
 103   2                      LCD_DispChar(8,4,(RealTime.RT.Year&0x0f)+0x30);
 104   2                      LCD_DispChar(16,4,'/');
 105   2                      LCD_DispChar(24,4,((RealTime.RT.Month>>4)&0x0f)+0x30);
 106   2                      LCD_DispChar(32,4,(RealTime.RT.Month&0x0f)+0x30);
 107   2                      LCD_DispChar(40,4,'/');
 108   2                      LCD_DispChar(48,4,((RealTime.RT.Day>>4)&0x0f)+0x30);
 109   2                      LCD_DispChar(56,4,(RealTime.RT.Day&0x0f)+0x30);
 110   2                      Delay1ms(500);   
 111   2              }
 112   1      }
 113          
 114          
 115          
 116          
C51 COMPILER V8.05a   PCF8563                                                              08/04/2007 17:18:56 PAGE 3   

 117          
 118          


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