📄 1302.lst
字号:
C51 COMPILER V7.50 1302 09/01/2006 17:31:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************/
2 /* 程序名:实时时钟DS1302代码 */
3 /* */
4 /* 晶振:12.0 M CPU型号:AT89S52 */
5 /* */
-
6 /* */
7 /* 功能描述: 将J6和6,7,8脚分别和J7的6,7,8脚 */
8 /* (自上往下数)用短路帽连接起来! */
9 /* */
10 /* http://www.mculover.net */
11 /* http://www.mculover.net/bbs */
12 /* */
13 /* */
14 /* 湘灵电子工作室 版权所有 */
-
15 /* 2006-03-20 */
16 /************************************************************************************/
17 #include<reg51.h>
18
19 sbit clock_clk = P1 ^ 7;//ds1302_clk
20 sbit clock_dat = P1 ^ 6;//ds1302_dat
21 sbit clock_rst = P1 ^ 5;//ds1302_rst
22
23 //为了编程方便定义的位变量
24 sbit a0 = ACC ^ 0;
25 sbit a1 = ACC ^ 1;
26 sbit a2 = ACC ^ 2;
27 sbit a3 = ACC ^ 3;
28 sbit a4 = ACC ^ 4;
29 sbit a5 = ACC ^ 5;
30 sbit a6 = ACC ^ 6;
31 sbit a7 = ACC ^ 7;
32
33 unsigned char Tab_Num[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,
34 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
35
36 /*****************************************************************/
37 void Delay(int num)//延时函数
38 {
39 1 while(num--) ;
40 1 }
41
42 /*************************1 3 0 2 *****************************/
43 void clock_out(unsigned char dd)
44 {
45 1 ACC=dd;
46 1 clock_dat=a0; clock_clk=1; clock_clk=0;
47 1 clock_dat=a1; clock_clk=1; clock_clk=0;
48 1 clock_dat=a2; clock_clk=1; clock_clk=0;
49 1 clock_dat=a3; clock_clk=1; clock_clk=0;
50 1 clock_dat=a4; clock_clk=1; clock_clk=0;
51 1 clock_dat=a5; clock_clk=1; clock_clk=0;
52 1 clock_dat=a6; clock_clk=1; clock_clk=0;
53 1 clock_dat=a7; clock_clk=1; clock_clk=0;
C51 COMPILER V7.50 1302 09/01/2006 17:31:20 PAGE 2
54 1 }
55
56 unsigned char clock_in(void)
57 {
58 1 clock_dat=1;
59 1 a0=clock_dat;
60 1 clock_clk=1; clock_clk=0; a1=clock_dat;
61 1 clock_clk=1; clock_clk=0; a2=clock_dat;
62 1 clock_clk=1; clock_clk=0; a3=clock_dat;
63 1 clock_clk=1; clock_clk=0; a4=clock_dat;
64 1 clock_clk=1; clock_clk=0; a5=clock_dat;
65 1 clock_clk=1; clock_clk=0; a6=clock_dat;
66 1 clock_clk=1; clock_clk=0; a7=clock_dat;
67 1 return(ACC);
68 1 }
69
70 unsigned char read_clock(unsigned char ord)
71 {
72 1 unsigned char dd=0;
73 1 clock_clk=0;
74 1 clock_rst=0;
75 1 clock_rst=1;
76 1 clock_out(ord);
77 1 dd=clock_in();
78 1 clock_rst=0;
79 1 clock_clk=1;
80 1 return(dd);
81 1 }
82
83 void write_clock(unsigned char ord, unsigned char dd)
84 {
85 1 clock_clk=0;
86 1 clock_rst=0;
87 1 clock_rst=1;
88 1 clock_out(ord);
89 1 clock_out(dd);
90 1 clock_rst=0;
91 1 clock_clk=1;
92 1 }
93
94 /******************************************************************/
95 void Disp(void)//显示和闪烁函数
96 {
97 1 unsigned char d, e;
98 1
99 1 d=read_clock(0x81);//读秒
100 1 e=d;
101 1 d=d>>4;
102 1 e=e&0x0f;
103 1
104 1 P0 = Tab_Num[ d ];
105 1 P2 = 0xfd;
106 1 Delay(250);
107 1 P2 = 0xff;
108 1 P0 = Tab_Num[ e ];
109 1 P2 = 0xfe;
110 1 Delay(250);
111 1 P2 = 0xff;
112 1
113 1 d=read_clock(0x83);//读分钟
114 1 e=d;
115 1 d=d>>4;
C51 COMPILER V7.50 1302 09/01/2006 17:31:20 PAGE 3
116 1 e=e&0x0f;
117 1
118 1 P0 = Tab_Num[ d ];
119 1 P2 = 0xef;
120 1 Delay(250);
121 1 P2 = 0xff;
122 1 P0 = Tab_Num[ e ];
123 1 P2 = 0xe7;
124 1 Delay(250);
125 1 P2 = 0xff;
126 1
127 1 d=read_clock(0x85);//读小时
128 1 e=d;
129 1 d=d>>4;
130 1 e=e&0x0f;
131 1
132 1 P0 = Tab_Num[ d ];
133 1 P2 = 0x7f;
134 1 Delay(250);
135 1 P2 = 0xff;
136 1 P0 = Tab_Num[ e ];
137 1 P2 = 0xbf;
138 1 Delay(250);
139 1 P2 = 0xff;
140 1
141 1 /*************************************************************
142 1 d=read_clock(0x87);//读日
143 1 e=d;
144 1 d=d>>4;
145 1 e=e&0x0f;
146 1 P0 = Tab_Num[ d ];
147 1 P2 = 0x01;
148 1 Delay(2000);
149 1 P2 = 0x00;
150 1 P0 = Tab_Num[ e ];
151 1 P2 = 0x02;
152 1 Delay(2000);
153 1 P2 = 0x00;
154 1
155 1 d=read_clock(0x89);//读月
156 1 e=d;
157 1 d=d>>4;
158 1 e=e&0x0f;
159 1 P0 = Tab_Num[ d ];
160 1 P2 = 0x01;
161 1 Delay(2000);
162 1 P2 = 0x00;
163 1 P0 = Tab_Num[ e ];
164 1 P2 = 0x02;
165 1 Delay(2000);
166 1 P2 = 0x00;
167 1
168 1 d=read_clock(0x8d);//读年
169 1 e=d;
170 1 d=d>>4;
171 1 e=e&0xf;
172 1 P0 = Tab_Num[ d ];
173 1 P2 = 0x01;
174 1 Delay(2000);
175 1 P2 = 0x00;
176 1 P0 = Tab_Num[ e ];
177 1 P2 = 0x02;
C51 COMPILER V7.50 1302 09/01/2006 17:31:20 PAGE 4
178 1 Delay(2000);
179 1 P2 = 0x00;
180 1 **********************************************************/
181 1 }
182
183 /*--------------------时钟的初始化---------------------------*/
184 void Init_1302(void)
185 {
186 1 write_clock(0x8e,0x00);//close_protect
187 1 Delay(250);
188 1 write_clock(0x8c,0x05);//year
189 1 Delay(250);
190 1 write_clock(0x8a,0x04);//week_day
191 1 Delay(250);
192 1 write_clock(0x88,0x10);//month
193 1 Delay(250);
194 1 write_clock(0x86,0x20);//date
195 1 Delay(250);
196 1 write_clock(0x84,0x00);//hour
197 1 Delay(250);
198 1 write_clock(0x82,0x22);//minute
199 1 Delay(250);
200 1 write_clock(0x80,0x00);//second
201 1 Delay(250);
202 1
203 1 write_clock(0x90,0xa5);//supply_power
204 1 Delay(250);
205 1 write_clock(0x8e,0x80);//open_protect
206 1 Delay(250);
207 1 }
208
209 /*******************主函数************************************/
210 void main(void)
211 {
212 1 Init_1302( );//初始化DS1302寄存器
213 1
214 1 while(1)
215 1 {
216 2 Disp( );
217 2 }
218 1 }
219
220
221
222
223
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 408 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -