📄 time.lst
字号:
C51 COMPILER V7.07 TIME 06/13/2008 13:33:20 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 ////////////////////////////////////////////////////////////
2 #include<reg52.h>
3
4 extern void line_disp (unsigned char lines , unsigned char *chn);
5
6 sbit TIMER_CLK = P2^1;
7 sbit TIMER_IO = P2^2;
8 sbit TIMER_RST = P2^3;
9
10 unsigned char bdata timer_data;
11 sbit hbit_data = timer_data^7;
12 sbit lbit_data = timer_data^0;
13 unsigned char bdata timer_address;
14 sbit lbit_addr = timer_address^0;
15
16
17 unsigned char idata MINUTE;
18 unsigned char idata HOUR;
19 unsigned char idata DATE;
20 unsigned char idata MONTH;
21 unsigned char idata DAY;
22 unsigned char idata YEAR;
23
24
25 void delay (unsigned char us) //delay time
26 {
27 1 while(us--);
28 1 }
29
30 void write_timer(unsigned char address,unsigned char value)
31 {
32 1 unsigned char i;
33 1 timer_address = address;
34 1 timer_data = value;
35 1
36 1 TIMER_CLK = 0 ; delay(2);
37 1 TIMER_RST = 1 ; delay(2);
38 1 for (i=0;i<8;i++) //写地址。
39 1 {
40 2 TIMER_CLK = 0;
41 2 TIMER_IO = lbit_addr;
42 2 delay(2);
43 2 TIMER_CLK = 1;
44 2 timer_address = timer_address>>1;
45 2 }
46 1 for (i=0;i<8;i++) //写数据
47 1 {
48 2 TIMER_CLK = 0;
49 2 TIMER_IO = lbit_data;
50 2 delay(2);
51 2 TIMER_CLK=1;
52 2 timer_data = timer_data>>1;
53 2 }
54 1 TIMER_RST = 0 ; delay(2);
55 1 TIMER_CLK = 0 ;
C51 COMPILER V7.07 TIME 06/13/2008 13:33:20 PAGE 2
56 1 }
57
58 unsigned char read_timer(unsigned char address)
59 {
60 1 unsigned char i ;
61 1 timer_address = address;
62 1
63 1 TIMER_CLK = 0 ; delay(2);
64 1 TIMER_RST = 1 ; delay(2);
65 1 for (i=0;i<8;i++) //写地址
66 1 {
67 2 TIMER_CLK = 0;
68 2 TIMER_IO = lbit_addr;
69 2 delay(2);
70 2 TIMER_CLK = 1;
71 2 timer_address = timer_address>>1;
72 2 }
73 1 TIMER_IO=1;
74 1 for(i=0;i<7;i++) //读数据
75 1 {
76 2 TIMER_CLK = 0;
77 2 hbit_data = TIMER_IO;
78 2 TIMER_CLK = 1;
79 2 timer_data = timer_data>>1;
80 2 }
81 1 TIMER_CLK = 0; //这里有第八位
82 1 hbit_data = TIMER_IO;
83 1 delay(2);
84 1 TIMER_RST = 0 ; delay(2);
85 1 TIMER_CLK = 0;
86 1 return timer_data;
87 1 }
88
89
90 void timer_init(void)
91 {
92 1 unsigned char flag;
93 1 TIMER_CLK=0;
94 1 TIMER_RST=0;
95 1 flag = read_timer(0xc1); //读标志
96 1 if (flag != 0x55)
97 1 {
98 2 write_timer(0x8e,0x00); //关闭写保护
99 2 write_timer(0x8c,0x08); //预制年份2008
100 2 write_timer(0x88,0x06); //预制月份6
101 2 write_timer(0x86,0x13); //预制日期13
102 2 write_timer(0x8a,0x05); //预制星期5
103 2 write_timer(0x84,0x08); //预制小时6
104 2 write_timer(0x82,0x00); //预制分钟时间
105 2 write_timer(0x90,0x00); //写充电控制寄存器
106 2 write_timer(0xc0,0x55); //写标志防止重复初始化
107 2 write_timer(0x80,0x00); //启动时钟
108 2 write_timer(0x8e,0x80); //打开写保护
109 2 }
110 1 }
111
112 void readRTC(void)
113 {
114 1 YEAR = read_timer(0x8d);
115 1 DAY = read_timer(0x8b);
116 1 MONTH = read_timer(0x89);
117 1 DATE = read_timer(0x87);
C51 COMPILER V7.07 TIME 06/13/2008 13:33:20 PAGE 3
118 1 HOUR = read_timer(0x85);
119 1 MINUTE = read_timer(0x83);
120 1 }
121
122
123 unsigned char code week[7][2]={{"一"},{"二"},{"三"},{"四"},{"五"},{"六"},{"天"}};
124
125 void time_disp2 (void)
126 {
127 1 unsigned char timebar1[16]={" 年 月 日 "};
128 1 unsigned char timebar2[16]={" - 星期 "};
129 1
130 1 readRTC();
131 1
132 1 timebar1[2]=(YEAR>>4)+0x30; timebar1[3]=(YEAR&0x0F)+0x30;
133 1 timebar1[6]=(MONTH>>4)+0x30; timebar1[7]=(MONTH&0x0F)+0x30;
134 1 timebar1[10]=(DATE>>4)+0x30; timebar1[11]=(DATE&0x0F)+0x30;
135 1
136 1 timebar2[2]=(HOUR>>4)+0x30; timebar2[3]=(HOUR&0x0F)+0x30;
137 1 timebar2[5]=(MINUTE>>4)+0x30; timebar2[6]=(MINUTE&0X0F)+0x30;
138 1 timebar2[12]=week[DAY-1][0]; timebar2[13]=week[DAY-1][1];
139 1
140 1 line_disp(0,timebar1);
141 1 line_disp(1,timebar2);
142 1 }
143
144
145 extern void rs232_send(unsigned char *address, unsigned char length);
146 void time_disp1(unsigned char x)
147 {
148 1 unsigned char timebar3[16]={"20 - - - "};
149 1
150 1 readRTC();
151 1
152 1 timebar3[2]=(YEAR>>4)+0x30; timebar3[3]=(YEAR&0X0F)+0x30;
153 1 timebar3[5]=(MONTH>>4)+0x30; timebar3[6]=(MONTH&0X0F)+0x30;
154 1 timebar3[8]=(DATE>>4)+0x30; timebar3[9]=(DATE&0X0F)+0x30;
155 1 timebar3[11]=(HOUR>>4)+0x30; timebar3[12]=(HOUR%0X0F)+0x30;
156 1 timebar3[14]=(MINUTE>>4)+0x30; timebar3[15]=(MINUTE&0X0F)+0x30;
157 1
158 1 line_disp(0,timebar3);
159 1 if(x)
160 1 rs232_send(timebar3,16);
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 621 ----
CONSTANT SIZE = 62 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 49
IDATA SIZE = 6 ----
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 + -