📄 pcf8563.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 + -