📄 ds1302clock.lst
字号:
C51 COMPILER V7.10 DS1302CLOCK 11/08/2008 19:50:12 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE DS1302CLOCK
OBJECT MODULE PLACED IN DS1302clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302clock.C ROM(COMPACT) DEBUG OBJECTEXTEND
line level source
1 /******************************************************************************
2 文件名 :ds1302clock.c
3 CPU: stc89c58 主频:11.0592M
4 液晶型号: 生产厂家:1602
5 硬件连接:
6 ---------------------------------------------------------------
7 |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.2 |
8 |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 |
9 |DB2-----P0.2 | DB6-----P0.6 | E -------P2.5 |
10 |DB3-----P0.3 | DB7-----P0.7 | Vo接1k电阻到地
11 ---------------------------------------------------------------
12 ******************************************************************************/
13 #include <reg52.h>
14 #include <string.h>
15 #include <intrins.h>
16
17 #define uchar unsigned char
18 #define uint unsigned int
19
20 #define LCM_Data P0
21 #define Busy 0x80 //用于检测LCM状态字中的Busy标识
22 sbit LCM_RW = P2^3;//定义引脚
23 sbit LCM_RS = P2^4;
24 sbit LCM_E = P2^5;
25
26 sbit key1 = P2^0;
27 sbit key2 = P2^1;
28 sbit key3 = P2^2;
29 sbit key4 = P3^2;
30
31 uchar id,timecount;
32 bit flag,sflag; //flag是时钟冒号闪烁标志,sflag是温度负号显示标志
33 void Disp_line1(void); //显示屏幕第一行
34 void Disp_line2(void); //显示屏幕第二行
35 void id_case1_key();
36
37 //*********** DS1302 时间显示定义部分
38 sbit T_CLK = P3^5;
39 sbit T_IO = P3^6;
40 sbit T_RST = P3^7;
41 sbit ACC0=ACC^0;
42 sbit ACC7=ACC^7;
43 void Set(uchar,uchar); //根据选择调整相应项目
44 void RTInputByte(uchar); /* 输入 1Byte */
45 uchar RTOutputByte(void); /* 输出 1Byte */
46 void W1302(uchar, uchar); // 向DS1302写入一个字节
47 uchar R1302(uchar); // 从DS1302读出一个字节
48 void Set1302(uchar * ); // 设置时间
49 bit sec,min,hour,year,mon,day,weekk; //闪烁标志位
50 //初始化后设置为:04年12月2日星期4 0点0分0秒
51 uchar inittime[7]={0x01,0x01,0x01,0x02,0x01,0x11,0x08};
52 // 秒 分钟 小时 日 月 年 星期
53
54 //***** 18B20温度显示定义部分
55 sbit DQ = P2^6; //18B20 接P07口
C51 COMPILER V7.10 DS1302CLOCK 11/08/2008 19:50:12 PAGE 2
56 typedef unsigned char byte;
57 typedef unsigned int word;
58 Read_Temperature(char,char);
59 void mychar(void);
60 void adjust_res(char res); //res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
61 // 0.5, 0.25, 0.125
62 //******* 1602LCD驱动 **********************************************************
63 void WriteDataLCM(uchar WDLCM);
64 void WriteCommandLCM(uchar WCLCM,BuysC);
65 uchar ReadStatusLCM(void);
66 void LCMInit(void);
67 void DisplayOneChar(uchar X, uchar Y, uchar DData);
68 void DisplayListChar(uchar X, uchar Y, uchar code *DData);
69 void Delay5Ms(void);
70 void Delay400Ms(void);
71 uchar code week[]={"Week."};
72 /******************************************************************************************
73 * 函数名称 :
74 * 功能描述 :
75 * 参数 : 参数名称: 输入/输出? 类型 描述
76 *
77 * 返回值 :
78 * 作者 :
79 * 创建日期 :2006-12-19
80 * 全局变量 :
81 * 全局静态变量:
82 * 局部静态变量:
83 *----------------------------------------修改历史------------------------------------------
84 * 当前版本 : 修改人: 修改日期:
85 * 修改说明 :
86 ******************************************************************************************/
87 void main(void)
88 {
89 1 Delay400Ms(); //启动等待,等LCM讲入工作状态
90 1 LCMInit(); //LCM初始化
91 1 Delay5Ms(); //延时片刻(可不要)
92 1 mychar(); //显示自定义字符
93 1
94 1 TMOD=0x01;
95 1 TH0=(65535-50000)/256;
96 1 TL0=(65535-50000)%256;
97 1 EA=1;
98 1 TR0=1;
99 1 ET0=1;
100 1 W1302(0x90,0xa5);//打开充电二级管 一个二级管串联一个2K电阻
101 1 W1302(0x8e,0x80);//写保护,禁止写操作
102 1 Set1302(inittime);
103 1 adjust_res(0x1f); //调整18B20的分辨率 0x1f:0.5; 0x3f:0.25; 0x5f:0.125
104 1
105 1 while(1)
106 1 {
107 2 if ((key1|key2)==0) //初始化
108 2 {
109 3 Delay5Ms();
110 3 if ((key1|key2)==0);
111 3 Set1302(inittime);
112 3 }
113 2 if (key3==0) // 设置和选择项目键
114 2 {
115 3 Delay5Ms();
116 3 if(key3==0)
117 3 {
C51 COMPILER V7.10 DS1302CLOCK 11/08/2008 19:50:12 PAGE 3
118 4 id++;
119 4 if(id>7)
120 4 id=0;
121 4 }
122 3 while(key3==0);
123 3 }
124 2 switch(id)
125 2 {
126 3 case 0:
127 3 sec=0;
128 3 Disp_line1();
129 3 Disp_line2();
130 3 break;
131 3 case 1://年
132 3 year=1;
133 3 Disp_line1();
134 3 Disp_line2();
135 3 id_case1_key();
136 3 break;
137 3 case 2://月
138 3 year=0;
139 3 mon=1;
140 3 Disp_line1();
141 3 Disp_line2();
142 3 id_case1_key();
143 3 break;
144 3 case 3://日
145 3 mon=0;
146 3 day=1;
147 3 Disp_line1();
148 3 Disp_line2();
149 3 id_case1_key();
150 3 break;
151 3 case 4://星期
152 3 day=0;
153 3 weekk=1;
154 3 Disp_line1();
155 3 Disp_line2();
156 3 id_case1_key();
157 3 break;
158 3 case 5://小时
159 3 weekk=0;
160 3 hour=1;
161 3 Disp_line1();
162 3 Disp_line2();
163 3 id_case1_key();
164 3 break;
165 3 case 6://分钟
166 3 hour=0;
167 3 min=1;
168 3 Disp_line1();
169 3 Disp_line2();
170 3 id_case1_key();
171 3 break;
172 3 case 7://秒
173 3 min=0;
174 3 sec=1;
175 3 Disp_line1();
176 3 Disp_line2();
177 3 id_case1_key();
178 3 break;
179 3 }
C51 COMPILER V7.10 DS1302CLOCK 11/08/2008 19:50:12 PAGE 4
180 2 }
181 1 }
182 /******************************************************************************************
183 * 函数名称 :
184 * 功能描述 :中断入口,冒号闪烁
185 * 参数 : 参数名称: 输入/输出? 类型 描述
186 *
187 * 返回值 :
188 * 作者 :
189 * 创建日期 :2006-12-19
190 * 全局变量 :
191 * 全局静态变量:
192 * 局部静态变量:
193 *----------------------------------------修改历史------------------------------------------
194 * 当前版本 : 修改人: 修改日期:
195 * 修改说明 :
196 ******************************************************************************************/
197 void t0(void) interrupt 1 using 0
198 {
199 1 TH0=(65535-50000)/256; //50ms定时
200 1 TL0=(65535-50000)%256;
201 1 timecount++;
202 1 if(timecount>9)
203 1 {
204 2 timecount=0;
205 2 flag=~flag;
206 2 }
207 1 }
208 /******************************************************************************************
209 * 函数名称 :id_case1_key
210 * 功能描述 :id为1时的下一级选择
211 * 参数 : 参数名称: 输入/输出? 类型 描述
212 *
213 * 返回值 :
214 * 作者 :
215 * 创建日期 :2006-12-19
216 * 全局变量 :
217 * 全局静态变量:
218 * 局部静态变量:
219 *----------------------------------------修改历史------------------------------------------
220 * 当前版本 : 修改人: 修改日期:
221 * 修改说明 :
222 ******************************************************************************************/
223 void id_case1_key()
224 {
225 1 if(key2==0) //增加
226 1 {
227 2 Delay5Ms();
228 2 if(key2==0)
229 2 Set(id,0);
230 2 if(id!=7)
231 2 while(key2==0);
232 2 }
233 1 if(key1==0) //减少
234 1 {
235 2 Delay5Ms();
236 2 if(key1==0)
237 2 Set(id,1);
238 2 if(id!=7)
239 2 while(key1==0);
240 2 }
241 1 }
C51 COMPILER V7.10 DS1302CLOCK 11/08/2008 19:50:12 PAGE 5
242
243 /******************************************************************************************
244 * 函数名称 :Set
245 * 功能描述 :根据选择调整相应项目并写入DS1302
246 * 参数 : 参数名称: 输入/输出? 类型 描述
247 *
248 * 返回值 :
249 * 作者 :
250 * 创建日期 :2006-12-19
251 * 全局变量 :
252 * 全局静态变量:
253 * 局部静态变量:
254 *----------------------------------------修改历史------------------------------------------
255 * 当前版本 : 修改人: 修改日期:
256 * 修改说明 :
257 ******************************************************************************************/
258 void Set(uchar sel,uchar sel_1)
259 {
260 1 signed char address,item;
261 1 signed char max,mini;
262 1 if(sel==7)
263 1 {
264 2 address=0x80;
265 2 max=59;
266 2 mini=0;
267 2 } //秒
268 1 if(sel==6)
269 1 {
270 2 address=0x82;
271 2 max=59;
272 2 mini=0;
273 2 } //分钟
274 1 if(sel==5)
275 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -