📄 rtc.lst
字号:
C51 COMPILER V7.50 RTC 06/12/2007 17:35:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN RTC.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE RTC.C BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 /*******************************************************************************
2 * 标题: 蓝海微芯LJD-SY-5200单片机开发系统演示程序 *
3 * 文件: RTC.C *
4 * 日期: 2006-7-25 *
5 * 版本: 1.0 *
6 * 作者: 蓝海微芯 *
7 * 网站: http://www.ljd-2008.com *
8 ********************************************************************************
9 * 描述: *
10 * 通过8位数码管显示当前的时间包括时分秒,通过时间设置键可对当前的时间 *
11 * 进行设置。共有两个设置按键按键1和按键2;按键1为选定键。按键1首次被 *
12 * 按下时钟停止走时并且秒时间开始闪烁,此时可通过按键2对秒时间进行设置, *
13 * 按键2按下一次秒时间数值加一。当按键1第二次被按下时分时间被选中并不停 *
14 * 地闪烁,此时通过按键2可对分时间进行设置,按键2按下一次分时间加一。 *
15 * 按键第三次被按下时小时时间被选中并且不停的闪烁,此时通过按键2可对小 *
16 * 时时间进行设置,按键2每按下一次小时时间加一。按键1第四次被按下后时间 *
17 * 设置结束,时钟从设定的时间开始走时。 *
18 * *
19 * *
20 ********************************************************************************
21 * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
22 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
23 *******************************************************************************/
24 #include <reg52.h>
25 #include<stdio.h>
26 #include<absacc.h>
27 #include<intrins.h>
28
29
30 /*如果使用键盘中断请定义
31 #define USE_KEY */
32
33 #define uchar unsigned char
34 #define uint unsigned int
35
36 sbit T_CLK = P1^1; /*实时时钟时钟线引脚 */
37 sbit T_IO = P1^0; /*实时时钟数据线引脚 */
38 sbit T_RST = P1^4; /*实时时钟复位线引脚 */
39
40 sbit P1_3 = P1^3;
41 sbit P1_5 = P1^5;
42 sbit ACC0 = ACC^0;
43 sbit ACC7 = ACC^7;
44
45 uchar M;
46 uchar N;
47 uchar key_flag;
48
49 /*void RTInputByte(uchar); /* 输入 1Byte */
50 /*uchar RTOutputByte(void); /* 输出?1Byte */
51 /*void W1302(uchar, uchar);
52 /*uchar R1302(uchar);
53 /*void Set1302(uchar *); /* 设置时间 */
54 /*void Get1302(uchar curtime[]); /* 读取1302当前时间 */
55 uchar SClock[3];
C51 COMPILER V7.50 RTC 06/12/2007 17:35:07 PAGE 2
56 /********************************************************************
57 函 数 名:RTInputByte()
58 功 能:实时时钟写入一字节
59 说 明:往DS1302写入1Byte数据 (内部函数)
60 入口参数:d 写入的数据
61 返 回 值:无
62 设 计:蓝海微芯
63 ***********************************************************************/
64 void RTInputByte(uchar d)
65 {
66 1 uchar i;
67 1 ACC = d;
68 1 for(i=8; i>0; i--)
69 1 {
70 2 T_IO = ACC0; /*相当于汇编中的 RRC */
71 2 T_CLK = 1;
72 2 T_CLK = 0;
73 2 ACC = ACC >> 1;
74 2 }
75 1 }
76 /********************************************************************
77 函 数 名:RTOutputByte()
78 功 能:实时时钟读取一字节
79 说 明:从DS1302读取1Byte数据 (内部函数)
80 入口参数:无
81 返 回 值:ACC
82 设 计:蓝海微芯
83 ***********************************************************************/
84 uchar RTOutputByte(void)
85 {
86 1 uchar i;
87 1 for(i=8; i>0; i--)
88 1 {
89 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
90 2 ACC7 = T_IO;
91 2 T_CLK = 1;
92 2 T_CLK = 0;
93 2 }
94 1 return(ACC);
95 1 }
96 /********************************************************************
97 函 数 名:W1302()
98 功 能:往DS1302写入数据
99 说 明:先写地址,后写命令/数据 (内部函数)
100 调 用:RTInputByte() , RTOutputByte()
101 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
102 返 回 值:无
103 设 计:蓝海微芯
104 ***********************************************************************/
105 void W1302(uchar ucAddr, uchar ucDa)
106 {
107 1 T_RST = 0;
108 1 T_CLK = 0;
109 1 T_RST = 1;
110 1 RTInputByte(ucAddr); /* 地址,命令 */
111 1 RTInputByte(ucDa); /* 写1Byte数据*/
112 1 T_CLK = 1;
113 1 T_RST = 0;
114 1 }
115 /********************************************************************
116 函 数 名:R1302()
117 功 能:读取DS1302某地址的数据
C51 COMPILER V7.50 RTC 06/12/2007 17:35:07 PAGE 3
118 说 明:先写地址,后读命令/数据 (内部函数)
119 调 用:RTInputByte() , RTOutputByte()
120 入口参数:ucAddr: DS1302地址
121 返 回 值:ucData :读取的数据
122 设 计:蓝海微芯
123 ***********************************************************************/
124 uchar R1302(uchar ucAddr)
125 {
126 1 uchar ucData;
127 1 T_RST = 0;
128 1 T_CLK = 0;
129 1 T_RST = 1;
130 1 RTInputByte(ucAddr); /* 地址,命令 */
131 1 ucData = RTOutputByte(); /* 读1Byte数据 */
132 1 T_CLK = 1;
133 1 T_RST = 0;
134 1 return(ucData);
135 1 }
136 /********************************************************************
137 函 数 名:Set1302()
138 功 能:设置初始时间
139 说 明:先写地址,后读命令/数据(寄存器多字节方式)
140 调 用:W1302()
141 入口参数:pClock: 设置时钟数据
142
143 地址格式为: 秒 分 时 日 月 星期 年
144 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
145 返 回 值:无
146 设 计:蓝海微芯
147 ***********************************************************************/
148 void Set1302(uchar *pClock)
149 {
150 1 uchar i;
151 1 uchar ucAddr = 0x80;
152 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
153 1 for(i =3; i>0; i--)
154 1 {
155 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
156 2 pClock++;
157 2 ucAddr +=2;
158 2 }
159 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
160 1 }
161 /********************************************************************
162 函 数 名:Get1302()
163 功 能:读取DS1302当前时间
164 说 明:
165 调 用:R1302()
166 入口参数:ucCurtime: 保存当前时间地址。
167 当前时间格式为: 秒 分 时 日 月 星期 年
168 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
169 返 回 值:无
170 设 计:蓝海微芯
171 ***********************************************************************/
172 void Get1302(uchar ucCurtime[])
173 {
174 1 uchar i;
175 1 uchar ucAddr = 0x81;
176 1 for (i=0; i<3; i++)
177 1 {
178 2 ucCurtime[i] = R1302(ucAddr); /*格式为: 秒 分 时 日 月 星期 年 */
179 2 ucAddr += 2;
C51 COMPILER V7.50 RTC 06/12/2007 17:35:07 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -