📄 时钟ds1302lcd.lst
字号:
C51 COMPILER V7.02b 蔩钟DS1302LCD 02/25/2010 14:59:24 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE 蔩钟DS1302LCD
OBJECT MODULE PLACED IN 时钟DS1302LCD.OBJ
COMPILER INVOKED BY: D:\Progrom\Keil\C51\BIN\C51.EXE 时钟DS1302LCD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************
2 * 文件名 : 时钟DS1302.c
3 * 描述 : 该文件实现用DS1302来实现日历和时钟功能,数码管上显示出来。
4 * 创建人 : 东流,2009年4月10日
5 * 版本号 : 2.0
6 ***********************************************************************/
7 #include<reg52.h>
8 #include<intrins.h>
9
10 #define uchar unsigned char
11 #define uint unsigned int
12
13 uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
14 sbit ACC0 = ACC^0;
15 sbit ACC7 = ACC^7;
16 sbit P3_2 = P3^2;
17 sbit P3_5 = P3^4;
18
19 sbit T_CLK = P1^6; /*实时时钟时钟线引脚 */
20 sbit T_IO = P3^5; /*实时时钟数据线引脚 */
21 sbit T_RST = P1^7; /*实时时钟复位线引脚 */
22
23 /********************************************************************
24 * 名称 : delay()
25 * 功能 : 延时,延时时间大概为140US。
26 * 输入 : 无
27 * 输出 : 无
28 ***********************************************************************/
29
30 void delay()
31 {
32 1 int i,j;
33 1 for(i=0; i<=10; i++)
34 1 for(j=0; j<=2; j++)
35 1 ;
36 1 }
37
38 /********************************************************************
39 * 名称 : Delay_1ms()
40 * 功能 : 延时子程序,延时时间为 1ms * x
41 * 输入 : x (延时一毫秒的个数)
42 * 输出 : 无
43 ***********************************************************************/
44 void Delay_1ms(uint i)//1ms延时
45 {
46 1 uchar x,j;
47 1 for(j=0;j<i;j++)
48 1 for(x=0;x<=148;x++);
49 1 }
50
51 /********************************************************************
52 * 名称 : v_RTInputByte()
53 * 功能 : 往DS1302写入1Byte数据
54 * 输入 : ucDa 写入的数据
55 * 输出 : 无
C51 COMPILER V7.02b 蔩钟DS1302LCD 02/25/2010 14:59:24 PAGE 2
56 ***********************************************************************/
57 void v_RTInputByte(uchar ucDa)
58 {
59 1 uchar i;
60 1 ACC = ucDa;
61 1 T_RST = 1;
62 1 for(i=8; i>0; i--)
63 1 {
64 2 T_IO = ACC0;
65 2 T_CLK = 1;
66 2 T_CLK = 0;
67 2 ACC = ACC >> 1;
68 2 }
69 1 }
70
71 /********************************************************************
72 * 名称 : uc_RTOutputByte()
73 * 功能 : 从DS1302读取1Byte数据
74 * 输入 : 无
75 * 返回值: ACC
76 ***********************************************************************/
77 uchar uc_RTOutputByte(void)
78 {
79 1 uchar i;
80 1 T_RST = 1;
81 1 for(i=8; i>0; i--)
82 1 {
83 2 ACC = ACC >>1;
84 2 T_IO=1;
85 2 ACC7 = T_IO;
86 2 T_CLK = 1;
87 2 T_CLK = 0;
88 2 }
89 1 return(ACC);
90 1 }
91
92 /********************************************************************
93 * 名称 : v_W1302(uchar ucAddr, uchar ucDa)
94 * 功能 : 往DS1302写入数据
95 * 输入 : ucAddr: DS1302地址, ucDa: 要写的数据
96 * 返回值 : 无
97 ***********************************************************************/
98 void v_W1302(uchar ucAddr, uchar ucDa)
99 {
100 1 T_RST = 0;
101 1 T_CLK = 0;
102 1 T_RST = 1;
103 1 v_RTInputByte(ucAddr); // 写地址
104 1 _nop_();
105 1 _nop_();
106 1 v_RTInputByte(ucDa); // 写1Byte数据
107 1 T_CLK = 1;
108 1 T_RST = 0;
109 1 }
110
111 /********************************************************************
112 * 名称 : uc_R1302(uchar ucAddr)
113 * 功能 : 读取DS1302某地址的数据
114 * 输入 : ucAddr: DS1302地址
115 * 返回值 : ucDa :读取的数据
116 ***********************************************************************/
117 uchar uc_R1302(uchar ucAddr)
C51 COMPILER V7.02b 蔩钟DS1302LCD 02/25/2010 14:59:24 PAGE 3
118 {
119 1 uchar ucDa;
120 1 T_RST = 0;
121 1 T_CLK = 0;
122 1 T_RST = 1;
123 1 v_RTInputByte(ucAddr); //写地址,命令
124 1 _nop_();
125 1 _nop_();
126 1 ucDa = uc_RTOutputByte(); //读1Byte数据
127 1 T_CLK = 1;
128 1 T_RST = 0;
129 1 return(ucDa);
130 1 }
131
132 /********************************************************************
133 * 名称 : v_BurstW1302T
134 * 功能 : 往DS1302写入时钟数据(多字节方式)
135 * 输入 : pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
136 * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
137 * 返回值 : 无
138 ***********************************************************************/
139 void v_BurstW1302T(uchar *pSecDa)
140 {
141 1 uchar i;
142 1 v_W1302(0x8e, 0x00); //控制命令,WP=0,写操作
143 1 T_RST = 0;
144 1 T_CLK = 0;
145 1 T_RST = 1;
146 1 v_RTInputByte(0xbe); //0xbe:时钟多字节写命令
147 1 for(i=8; i>0; i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
148 1 {
149 2 v_RTInputByte(*pSecDa); //写1Byte数据
150 2 pSecDa++;
151 2 }
152 1 T_CLK = 1;
153 1 T_RST = 0;
154 1 }
155
156 /********************************************************************
157 * 名称 : v_BurstR1302T(uchar *pSecDa)
158 * 功能 : 读取DS1302时钟数据
159 * 输入 : pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
160 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
161 * 返回值 : ucDa :读取的数据
162 ***********************************************************************/
163 void v_BurstR1302T(uchar *pSecDa)
164 {
165 1 uchar i;
166 1 T_RST = 0;
167 1 T_CLK = 0;
168 1 T_RST = 1;
169 1 v_RTInputByte(0xbf); //0xbf:时钟多字节读命令
170 1 for(i=8; i>0; i--)
171 1 {
172 2 *pSecDa = uc_RTOutputByte(); //读1Byte数据
173 2 pSecDa++;
174 2 }
175 1 T_CLK = 1;
176 1 T_RST = 0;
177 1 }
178
179 /********************************************************************
C51 COMPILER V7.02b 蔩钟DS1302LCD 02/25/2010 14:59:24 PAGE 4
180 * 名称 : v_BurstW1302R(uchar *pReDa)
181 * 功能 : 往DS1302寄存器数写入数据(多字节方式)
182 * 输入 : pReDa: 寄存器数据地址
183 * 返回值 : 无
184 ***********************************************************************/
185 void v_BurstW1302R(uchar *pReDa)
186 {
187 1 uchar i;
188 1 v_W1302(0x8e,0x00); //控制命令,WP=0,写操作
189 1 T_RST = 0;
190 1 T_CLK = 0;
191 1 T_RST = 1;
192 1 v_RTInputByte(0xfe); //0xbe:时钟多字节写命令
193 1 for(i=31; i>0; i--) //31Byte 寄存器数据
194 1 {
195 2 v_RTInputByte(*pReDa); //写1Byte数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -