📄 1302.lst
字号:
C51 COMPILER V8.02 1302 08/23/2007 20:11:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "1302.h"
3 #include "1602.h"
4
5 //#define uchar unsigned char
6 //#define uint unsigned int
7
8 uchar clk_time[]={0x30,0x56,0x19,0x16,0x08,0x04,0x07}; //秒,分,时,天,月,星期,年寄存器初始值
9 uchar sec0,sec1,min0,min1,hr0,hr1,date0,date1,mon0,mon1,week,year0,year1;
10
11 /******************DS1302:写入操作(上升沿)*********************/
12 void write_byte(unsigned char da)
13 {
14 1 unsigned char i;
15 1 ACC=da;
16 1 for(i=8;i>0;i--)
17 1 {
18 2 T_IO=ACC0;
19 2 T_CLK=0;
20 2 T_CLK=1;
21 2 ACC=ACC>>1;
22 2 }
23 1 }
24
25 /*******************DS1302:读取操作(下降沿)******************/
26 unsigned char read_byte(void)
27 {
28 1 unsigned char i;
29 1 for(i=0;i<8;i++)
30 1 {
31 2 ACC=ACC>>1;
32 2 T_CLK = 1;
33 2 T_CLK = 0;
34 2 ACC7 = T_IO;
35 2 }
36 1 return(ACC);
37 1 }
38
39 /******************DS1302:写入数据(先送地址,再写数据)***************************/
40 void write_1302(unsigned char addr,unsigned char da)
41 {
42 1 T_RST=0; //停止工作
43 1 T_CLK=0;
44 1 T_RST=1; //重新工作
45 1 write_byte(addr); //写入地址
46 1
47 1 write_byte(da);
48 1 T_RST=0;
49 1 T_CLK=1;
50 1 }
51
52 /******************DS1302:读取数据(先送地址,再读数据)**************************/
53 unsigned char read_1302(unsigned char addr)
54 {
55 1 unsigned char temp;
C51 COMPILER V8.02 1302 08/23/2007 20:11:14 PAGE 2
56 1 T_RST=0; //停止工作
57 1 T_CLK=0;
58 1 T_RST=1; //重新工作
59 1 write_byte(addr); //写入地址
60 1 temp=read_byte();
61 1 T_RST=0;
62 1 T_CLK=1; //停止工作
63 1 return(temp);
64 1 }
65
66 /******************************DS1302写时间子程序*************************/
67 void WriteTime()
68 {
69 1 uchar i;
70 1 uchar temp=0x80; //DS1302秒的写寄存器地址 0x80
71 1 for(i=0;i<7;i++)
72 1 {
73 2 write_1302(temp,clk_time[i]);
74 2 temp+=2;
75 2 }
76 1
77 1 }
78
79
80 /*********************************DS1302读时间子程序*********************/
81 void ReadTime()
82 {
83 1 uchar i;
84 1 uchar temp=0x81; //DS1302秒的写寄存器地址 0x81
85 1 for(i=0;i<7;i++)
86 1 {
87 2 clk_time[i]=read_1302(temp);
88 2 temp+=2;
89 2 }
90 1
91 1 }
92
93 /******************************初始化显示时间****************************************/
94 void DisplayInit()
95 {
96 1 Show(1,1,2+48);
97 1 Show(2,1,48);
98 1
99 1 year1=(clk_time[6]&0xF0)>>4; //读 年 的高位
100 1 Show(3,1,year1+48); // 显示
101 1 year0=clk_time[6]&0x0F; // 读年的低位
102 1 Show(4,1,year0+48); //显示
103 1
104 1
105 1 Show(5,1,'-'); //显示‘-’
106 1
107 1 week=clk_time[5]&0x07; //显示星期
108 1
109 1 mon1=(clk_time[4]&0x10)>>4; //月
110 1 Show(6,1,mon1+48);
111 1 mon0=clk_time[4]&0x0F;
112 1 Show(7,1,mon0+48);
113 1
114 1 Show(8,1,'-');
115 1
116 1 date1=(clk_time[3]&0x30)>>4; //天
117 1 Show(9,1,date1+48);
C51 COMPILER V8.02 1302 08/23/2007 20:11:14 PAGE 3
118 1 date0=clk_time[3]&0x0F;
119 1 Show(10,1,date0+48);
120 1
121 1 Show(11,1,'-');
122 1
123 1 Display(12,1,"Thu");
124 1
125 1 hr1=(clk_time[2]&0x30)>>4; //时
126 1 Show(1,2,hr1+48);
127 1 hr0=clk_time[2]&0x0F;
128 1 Show(2,2,hr0+48);
129 1
130 1 Show(3,2,':');
131 1
132 1 min1=(clk_time[1]&0x70)>>4; //分
133 1 Show(4,2,min1+48);
134 1 min0=clk_time[1]&0x0F;
135 1 Show(5,2,min0+48);
136 1
137 1 Show(6,2,':');
138 1
139 1 sec1=(clk_time[0]&0x70)>>4; //秒
140 1 Show(7,2,sec1+48);
141 1 sec0=clk_time[0]&0x0F;
142 1 Show(8,2,sec0+48);
143 1 }
144
145 /*******************************时间判断自加函数**********************************/
146 void Judgetime()
147 {
148 1 if(sec0==0&&sec1==0) //判断如果秒都为0则分加一显示
149 1 {
150 2 min1=(clk_time[1]&0x70)>>4;
151 2 Show(4,2,min1+48);
152 2 min0=clk_time[1]&0x0F;
153 2 Show(5,2,min0+48);
154 2 // P21=0;
155 2
156 2 }
157 1 if(min0==0&&min1==0) //判断如果分都为0则时加一显示
158 1 {
159 2 min1=1; //让min1为别的值
160 2 hr1=(clk_time[2]&0x30)>>4;
161 2 Show(1,2,hr1+48);
162 2 hr0=clk_time[2]&0x0F;
163 2 Show(2,2,hr0+48);
164 2 }
165 1 if(hr0==0&&hr1==0) //判断如果时都为0则天加一显示
166 1 {
167 2 hr0=1; //date让为别的值
168 2 date1=(clk_time[3]&0x30)>>4;
169 2 Show(9,1,date1+48);
170 2 date0=clk_time[3]&0x0F;
171 2 Show(10,1,date0+48);
172 2 switch (clk_time[5]) //同时显示星期
173 2 {
174 3 case 1: Display(12,1,"Mon"); break;
175 3 case 2: Display(12,1,"Tue"); break;
176 3 case 3: Display(12,1,"Wen"); break;
177 3 case 4: Display(12,1,"Thu"); break;
178 3 case 5: Display(12,1,"Fri"); break;
179 3 case 6: Display(12,1,"Sat"); break;
C51 COMPILER V8.02 1302 08/23/2007 20:11:14 PAGE 4
180 3 case 7: Display(12,1,"Sun"); break;
181 3 default:break;
182 3
183 3 }
184 2
185 2 }
186 1 if(date1==0&&date0==1) //判断如果天都为01则月加一显示
187 1 {
188 2 date0=0; //date让为别的值
189 2 mon1=(clk_time[4]&0x10)>>4;
190 2 Show(6,1,mon1+48);
191 2 mon0=clk_time[4]&0x0F;
192 2 Show(7,1,mon0+48);
193 2 }
194 1
195 1 if(mon1==0&&mon0==1) //判断如果月为01则年加一显示
196 1 {
197 2 mon0=0; //让为别的值
198 2 year1=(clk_time[6]&0xF0)>>4;
199 2 Show(3,1,year1+48);
200 2 year0=clk_time[6]&0x0F;
201 2 Show(4,1,year0+48);
202 2 }
203 1 }
204
205
206
207 void sec()
208 {
209 1 sec1=(clk_time[0]&0x70)>>4;
210 1 Show(7,2,sec1+48);
211 1 sec0=clk_time[0]&0x0F;
212 1 Show(8,2,sec0+48);
213 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 777 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 ----
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 + -