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