📄 1302.lst
字号:
C51 COMPILER V7.50 1302 04/01/2006 13:01:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: e:\xp\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 ^ 5;//ds1302_clk
20 sbit clock_dat = P1 ^ 6;//ds1302_dat
21 sbit clock_rst = P1 ^ 7;//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 04/01/2006 13:01:11 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 P0 = Tab_Num[ d ];
104 1 P2 = 0xbf;
105 1 Delay(2000);
106 1 P2 = 0x00;
107 1 P0 = Tab_Num[ e ];
108 1 P2 = 0x7f;
109 1 Delay(2000);
110 1 P2 = 0x00;
111 1
112 1 d=read_clock(0x83);//读分钟
113 1 e=d;
114 1 d=d>>4;
115 1 e=e&0x0f;
C51 COMPILER V7.50 1302 04/01/2006 13:01:11 PAGE 3
116 1 P0 = Tab_Num[ d ];
117 1 P2 = 0xf7;
118 1 Delay(2000);
119 1 P2 = 0x00;
120 1 P0 = Tab_Num[ e ];
121 1 P2 = 0xef;
122 1 Delay(2000);
123 1 P2 = 0x00;
124 1
125 1 d=read_clock(0x85);//读小时
126 1 e=d;
127 1 d=d>>4;
128 1 e=e&0x0f;
129 1 P0 = Tab_Num[ d ];
130 1 P2 = 0xfe;
131 1 Delay(2000);
132 1 P2 = 0x00;
133 1 P0 = Tab_Num[ e ];
134 1 P2 = 0xfd;
135 1 Delay(2000);
136 1 P2 = 0x00;
137 1
138 1 /*************************************************************
139 1 d=read_clock(0x87);//读日
140 1 e=d;
141 1 d=d>>4;
142 1 e=e&0x0f;
143 1 P0 = Tab_Num[ d ];
144 1 P2 = 0x01;
145 1 Delay(2000);
146 1 P2 = 0x00;
147 1 P0 = Tab_Num[ e ];
148 1 P2 = 0x02;
149 1 Delay(2000);
150 1 P2 = 0x00;
151 1
152 1 d=read_clock(0x89);//读月
153 1 e=d;
154 1 d=d>>4;
155 1 e=e&0x0f;
156 1 P0 = Tab_Num[ d ];
157 1 P2 = 0x01;
158 1 Delay(2000);
159 1 P2 = 0x00;
160 1 P0 = Tab_Num[ e ];
161 1 P2 = 0x02;
162 1 Delay(2000);
163 1 P2 = 0x00;
164 1
165 1 d=read_clock(0x8d);//读年
166 1 e=d;
167 1 d=d>>4;
168 1 e=e&0xf;
169 1 P0 = Tab_Num[ d ];
170 1 P2 = 0x01;
171 1 Delay(2000);
172 1 P2 = 0x00;
173 1 P0 = Tab_Num[ e ];
174 1 P2 = 0x02;
175 1 Delay(2000);
176 1 P2 = 0x00;
177 1 **********************************************************/
C51 COMPILER V7.50 1302 04/01/2006 13:01:11 PAGE 4
178 1 }
179
180 /*--------------------时钟的初始化---------------------------*/
181 void Init_1302(void)
182 {
183 1 write_clock(0x8e,0x00);//close_protect
184 1 write_clock(0x8c,0x05);//year
185 1 write_clock(0x8a,0x04);//week_day
186 1 write_clock(0x88,0x10);//month
187 1 write_clock(0x86,0x20);//date
188 1 write_clock(0x84,0x00);//hour
189 1 write_clock(0x82,0x22);//minute
190 1 write_clock(0x80,0x00);//second
191 1
192 1 write_clock(0x90,0xa5);//supply_power
193 1 write_clock(0x8e,0x80);//open_protect
194 1 }
195
196 /*******************主函数************************************/
197 void main(void)
198 {
199 1 Init_1302( );//初始化DS1302寄存器
200 1
201 1 while(1)
202 1 {
203 2 Disp( );
204 2 }
205 1 }
206
207
208
209
210
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 400 ----
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 + -