📄 text1.lst
字号:
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 + -