📄 text1.lst
字号:
C51 COMPILER V7.20 TEXT1 03/11/2007 08:52:38 PAGE 1
C51 COMPILER V7.20, 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 <reg52.h>
2
3 sbit T_CLK = P2^4; /*实时时钟时钟线引脚 */
4 sbit T_IO = P2^3; /*实时时钟数据线引脚 */
5 sbit T_RST = P2^2; /*实时时钟复位线引脚 */
6 sbit ACC0=ACC^0;
7 sbit ACC7=ACC^7;
8 sbit rs=P2^0;
9 sbit rw=P2^1;
10 sbit e=P2^7;
11 sbit setd=P3^2;
12 sbit sett=P3^3;
13 sbit add=P2^5;
14 sbit enter=P2^6;
15 sbit speaker=P3^7;
16 unsigned char code tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
17
18
19 void v_RTInputByte(unsigned char ucDa)
20 {
21 1 unsigned char i;
22 1 ACC = ucDa;
23 1 for(i=8; i>0; i--)
24 1 {
25 2 T_IO = ACC0; /*相当于汇编中的 RRC */
26 2 T_CLK = 1;
27 2 T_CLK = 0;
28 2 ACC = ACC >> 1;
29 2 }
30 1 }
31
32 unsigned char uc_RTOutputByte(void)
33 {
34 1 unsigned char i;
35 1 for(i=8; i>0; i--)
36 1 {
37 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
38 2 ACC7 = T_IO;
39 2 T_CLK = 1;
40 2 T_CLK = 0;
41 2 }
42 1 return(ACC);
43 1 }
44
45 void v_W1302(unsigned char ucAddr, unsigned char ucDa)
46 {
47 1 T_RST = 0;
48 1 T_CLK = 0;
49 1 T_RST = 1;
50 1 v_RTInputByte(ucAddr); /* 地址,命令 */
51 1 v_RTInputByte(ucDa); /* 写1Byte数据*/
52 1 T_CLK = 1;
53 1 T_RST =0;
54 1 }
55
C51 COMPILER V7.20 TEXT1 03/11/2007 08:52:38 PAGE 2
56 unsigned char uc_R1302(unsigned char ucAddr)
57 {
58 1 unsigned char ucDa;
59 1 T_RST = 0;
60 1 T_CLK = 0;
61 1 T_RST = 1;
62 1 v_RTInputByte(ucAddr); /* 地址,命令 */
63 1 ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
64 1 T_CLK = 1;
65 1 T_RST =0;
66 1 return(ucDa);
67 1 }
68
69 void v_BurstW1302T(unsigned char *pSecDa)
70 {
71 1 unsigned char i;
72 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
73 1 T_RST = 0;
74 1 T_CLK = 0;
75 1 T_RST = 1;
76 1 v_RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
77 1 for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
78 1 {
79 2 v_RTInputByte(*pSecDa);/* 写1Byte数据*/
80 2 pSecDa++;
81 2 }
82 1 T_CLK = 1;
83 1 T_RST =0;
84 1 }
85
86 void v_BurstR1302T(unsigned char *pSecDa)
87 {
88 1 unsigned char i;
89 1 T_RST = 0;
90 1 T_CLK = 0;
91 1 T_RST = 1;
92 1 v_RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */
93 1 for (i=8; i>0; i--)
94 1 {
95 2 *pSecDa = uc_RTOutputByte(); /* 读1Byte数据 */
96 2 pSecDa++;
97 2 }
98 1 T_CLK = 1;
99 1 T_RST =0;
100 1 }
101
102 void v_BurstW1302R(unsigned char *pReDa)
103 {
104 1 unsigned char i;
105 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
106 1 T_RST = 0;
107 1 T_CLK = 0;
108 1 T_RST = 1;
109 1 v_RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */
110 1 for (i=31;i>0;i--) /*31Byte 寄存器数据 */
111 1 {
112 2 v_RTInputByte(*pReDa); /* 写1Byte数据*/
113 2 pReDa++;
114 2 }
115 1 T_CLK = 1;
116 1 T_RST =0;
117 1 }
C51 COMPILER V7.20 TEXT1 03/11/2007 08:52:38 PAGE 3
118
119 void v_BurstR1302R(unsigned char *pReDa)
120 {
121 1 unsigned char i;
122 1 T_RST = 0;
123 1 T_CLK = 0;
124 1 T_RST = 1;
125 1 v_RTInputByte(0xff); /* 0xbf:时钟多字节读命令 */
126 1 for (i=31; i>0; i--) /*31Byte 寄存器数据 */
127 1 {
128 2 *pReDa = uc_RTOutputByte(); /* 读1Byte数据 */
129 2 pReDa++;
130 2 }
131 1 T_CLK = 1;
132 1 T_RST =0;
133 1 }
134
135 void v_setd1302(unsigned char *pSecDa)
136 {
137 1 unsigned char i;
138 1 unsigned char ucAddr = 0x80;
139 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
140 1 for(i =7;i>0;i--)
141 1 {
142 2 v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
143 2
144 2 pSecDa++;
145 2 ucAddr +=2;
146 2 }
147 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
148 1 }
149
150
151 void delay()
152 { unsigned char y;
153 1 for(y=0;y<0xff;y++)
154 1 {;}
155 1 }
156
157
158 void wc51r(unsigned char j)//写命令
159 {
160 1 e=0;rs=0;rw=0;
161 1 e=1;
162 1 P1=j;
163 1 e=0;
164 1 delay();
165 1 }
166
167 void init()//初始化
168 {
169 1 wc51r(0x01);
170 1 wc51r(0x38);
171 1 wc51r(0x38);
172 1 wc51r(0x0e);
173 1 wc51r(0x06);
174 1 wc51r(0x0c);
175 1 }
176
177
178 void wc51ddr(unsigned char j)//写数据
179 {
C51 COMPILER V7.20 TEXT1 03/11/2007 08:52:38 PAGE 4
180 1 e=0;rs=1;rw=0;
181 1 e=1;
182 1 P1=j;
183 1 e=0;
184 1 delay();
185 1 }
186
187 void write1602(unsigned char add,unsigned char da)//写入显示数据
188 {wc51r(add);wc51ddr(da);}
189
190
191
192 void main(void)
193 {
194 1 unsigned char ucCurtime[7];
195 1 unsigned char i,yearh,yearl,monh,monl,dah,dal,hoh,hol,mih,mil,seh,sel;
196 1 unsigned char ucAddr;
197 1 unsigned int c;
198 1
199 1 init();
200 1 write1602(0x85,0x35);
201 1 for(c=0;c<30000;c++);
202 1 write1602(0x86,0x32);
203 1 for(c=0;c<30000;c++);
204 1 write1602(0x87,0x4D);
205 1 for(c=0;c<30000;c++);
206 1 write1602(0x88,0x43);
207 1 for(c=0;c<30000;c++);
208 1 write1602(0x89,0x55);
209 1 for(c=0;c<30000;c++);
210 1 write1602(0xC2,0x51);
211 1 write1602(0xC3,0x51);
212 1 write1602(0xC4,0x3A);
213 1 write1602(0xC5,0x35);
214 1 write1602(0xC6,0x39);
215 1 write1602(0xC7,0x37);
216 1 write1602(0xC8,0x33);
217 1 write1602(0xC9,0x38);
218 1 write1602(0xCA,0x35);
219 1 write1602(0xCB,0x33);
220 1 write1602(0xCC,0x36);
221 1 write1602(0xCD,0x39);
222 1 for(c=0;c<50000;c++);
223 1 init();//LCD初始化
224 1
225 1
226 1
227 1
228 1
229 1 TMOD=0X20;
230 1 TH1=0XF3;
231 1 TL1=0XF3;
232 1 SCON=0X50;
233 1 PCON=0X00;
234 1 IT0=1;
235 1 EX0=1;
236 1 IT1=1;
237 1 EX1=1;
238 1 TR1=1;
239 1 EA=1;
240 1 ES=1;
241 1 while(1)
C51 COMPILER V7.20 TEXT1 03/11/2007 08:52:38 PAGE 5
242 1 {ucAddr = 0x81;
243 2 for (i=0;i<7;i++)
244 2 {
245 3 ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
246 3 ucAddr += 2;
247 3 }
248 2
249 2
250 2 yearh=ucCurtime[6]/16;
251 2 yearl=ucCurtime[6]%16;
252 2 monh=ucCurtime[4]/16;
253 2 monl=ucCurtime[4]%16;
254 2 dah=ucCurtime[3]/16;
255 2 dal=ucCurtime[3]%16;
256 2
257 2 hoh=ucCurtime[2]/16;
258 2 hol=ucCurtime[2]%16;
259 2 mih=ucCurtime[1]/16;
260 2 mil=ucCurtime[1]%16;
261 2 seh=ucCurtime[0]/16;
262 2 sel=ucCurtime[0]%16;
263 2
264 2
265 2
266 2 write1602(0x80,0x44);
267 2 write1602(0x81,0x61);
268 2 write1602(0x82,0x74);
269 2 write1602(0x83,0x65);
270 2 write1602(0x84,0x3a);//显示date:
271 2
272 2 write1602(0x85,tab[yearh]);
273 2 write1602(0x86,tab[yearl]);
274 2 write1602(0x87,0x2d);//显示年
275 2 write1602(0x88,tab[monh]);
276 2 write1602(0x89,tab[monl]);
277 2 write1602(0x8a,0x2d);//显示月
278 2 write1602(0x8b,tab[dah]);
279 2 write1602(0x8c,tab[dal]);
280 2
281 2 write1602(0xc0,0x54);
282 2 write1602(0xc1,0x69);
283 2 write1602(0xc2,0x6d);
284 2 write1602(0xc3,0x65);
285 2 write1602(0xc4,0x3a);//显示time:
286 2
287 2 write1602(0xc5,tab[hoh]);
288 2 write1602(0xc6,tab[hol]);
289 2 write1602(0xc7,0x3a);//显示小时
290 2 write1602(0xc8,tab[mih]);
291 2 write1602(0xc9,tab[mil]);
292 2 write1602(0xca,0x3a);//显示小时
293 2 write1602(0xcb,tab[seh]);
294 2 write1602(0xcc,tab[sel]);
295 2
296 2 if((ucCurtime[1]==0)&(ucCurtime[0]==0|ucCurtime[0]==1|ucCurtime[0]==2))//3秒整点报时
297 2 speaker=0;
298 2 else speaker=1;
299 2
300 2 }
301 1 }
302
303
C51 COMPILER V7.20 TEXT1 03/11/2007 08:52:38 PAGE 6
304
305
306 serint() interrupt 4
307 { //EA=0;
308 1 static unsigned char k;
309 1 unsigned char temp,year,month,date,hour,min,sec,week;
310 1 unsigned char stemp[7]={0};
311 1 RI=1;
312 1 temp=SBUF;
313 1 RI=0;
314 1 k++;
315 1 switch (k)
316 1 { case 1:sec=temp;
317 2 break;
318 2 case 2:min=temp;
319 2 break;
320 2 case 3:hour=temp;
321 2 break;
322 2 case 4:date=temp;
323 2 break;
324 2 case 5:month=temp;
325 2 break;
326 2 case 6:week=temp;
327 2 break;
328 2 case 7:year=temp;
329 2 stemp[0]=(sec/10)*16+sec%10;
330 2 stemp[1]=(min/10)*16+min%10;
331 2 stemp[2]=(hour/10)*16+hour%10;
332 2 stemp[3]=(date/10)*16+date%10;
333 2 stemp[4]=(month/10)*16+month%10;
334 2 stemp[5]=(week/10)*16+week%10;
335 2 stemp[6]=(year/10)*16+year%10;
336 2 v_setd1302(stemp);//设定值
337 2 k=0;
338 2 break;
339 2 }
340 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1250 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 29
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 + -