📄 rtc.lst
字号:
180 2 }
181 1 }
182 /********************************************************************
183 函 数 名:ds1302主程序
184 功 能:读取ds1302的时间值并通过数码管进行显示
185 说 明:
186 调 用:
187 入口参数:
188 返 回 值:
189 设 计:蓝海微芯
190 ***********************************************************************/
191 void SET_RTC(void)
192 {
193 1 Get1302(&SClock); /*把当前的时间值读取到数组SClock[3]中去*/
194 1 SClock[0]|=0x80; /*使ds1302的时间停止运行*/
195 1 Set1302(SClock);
196 1
197 1 // ch451_key = 0xff;
198 1 key_flag++;
199 1 if(key_flag==4)
200 1 {
201 2 key_flag = 0;
202 2 // ch451_write(0x600);
203 2 SClock[0]&=0x7f;
204 2 Set1302(SClock);
205 2 }
206 1 switch(key_flag)
207 1 {
208 2 case 1:
209 2 //ch451_write(0x6C0); /*让秒显示位进行闪烁*/
210 2 break;
211 2 case 2:
212 2 //ch451_write(0x618); /*让分显示位进行闪烁*/
213 2 break;
214 2 case 3:
215 2 //ch451_write(0x603); /*让小时显示位进行闪烁*/
216 2 break;
217 2 default:break;
218 2 }
219 1 }
220 /********************************************************************
221 函 数 名:SET_TIME()
222 功 能:根据按键值&按键被按下的次数作相应的处理
223 说 明:
224 调 用:
225 入口参数:
226 返 回 值:
227 设 计:蓝海微芯
228 ***********************************************************************/
229 void SET_TIME(void)
230 {
231 1 switch(key_flag)
232 1 {
233 2 case 1:
234 2 SClock[0]&=0x7f;
235 2 // ch451_bcd(SClock[0]); /*将秒显示位的十位和个位进行分离*/
236 2 N++; /*秒值加一*/
237 2 if(N==10)
238 2 {
239 3 N = 0;
240 3 M++;
241 3 if(M==6)
C51 COMPILER V7.50 RTC 06/12/2007 17:35:07 PAGE 5
242 3 {
243 4 M = 0;
244 4 }
245 3 }
246 2 M<<=4;
247 2 SClock[0] = M|N|0x80;
248 2 W1302(0x8e,0x00); /*控制命令,wp=0,可以进行写操作*/
249 2 W1302(0x80, SClock[0]); /*将修改过的秒值写到ds1302中*/
250 2 // ch451_key=0xff;
251 2 break;
252 2 case 2:
253 2 // ch451_bcd(SClock[1]); /*将分显示位的十位和个位进行分离*/
254 2 N++; /*分值加一*/
255 2 if(N==10)
256 2 {
257 3 N = 0;
258 3 M++;
259 3 if(M==6)
260 3 {
261 4 M = 0;
262 4 }
263 3 }
264 2 M<<=4;
265 2 SClock[1] = M|N;
266 2 W1302(0x8e,0x00); /*控制命令,wp=0,可以进行写操作*/
267 2 W1302(0x82, SClock[1]); /*将修改过的分值写到ds1302中*/
268 2 // ch451_key=0xff;
269 2 break;
270 2 case 3:
271 2 // ch451_bcd(SClock[2]); /*将小时显示位的十位和个位进行分离*/
272 2 N++; /*小时值加一*/
273 2 if(N==4)
274 2 {
275 3 if(M==2) /*小时十位为2时个位最大值不能超过3*/
276 3 {
277 4 M = 0;
278 4 N = 0;
279 4 }
280 3 }
281 2 if(N==10)
282 2 {
283 3 N = 0;
284 3 M++;
285 3 }
286 2 M<<=4;
287 2 SClock[2] = M|N;
288 2 W1302(0x8e,0x00); /*控制命令,wp=0,可以进行写操作*/
289 2 W1302(0x84,SClock[2]); /*将修改过的分值写到ds1302中*/
290 2 // ch451_key=0xff;
291 2 break;
292 2 default:break;
293 2 }
294 1 // ch451_key = 0xff;
295 1 }
296 /********************************************************************
297 函 数 名:ds1302主程序
298 功 能:读取ds1302的时间值并通过数码管进行显示
299 说 明:
300 调 用:
301 设 计:蓝海微芯
302 ***********************************************************************/
303 main()
C51 COMPILER V7.50 RTC 06/12/2007 17:35:07 PAGE 6
304 {
305 1 uchar WClock[3]={0x00,0x01,0x02};
306 1 uchar RClock[3];
307 1 uchar ds_hour;
308 1 uchar ds_min;
309 1 uchar ds_sec;
310 1
311 1 P1_3 = 1;
312 1 P1_5 = 1;
313 1 Set1302(WClock); /*对ds1302显示的时间初值进行设定*/
314 1 // ch451_init(); /*对ch451进行初始化*/
315 1 // ch451_write(0x403); /*关看门狗开键盘显示*/
316 1 // ch451_write(0x580); /*以译码方式进行显示*/
317 1 // ch451_write(CH451_DIG5|0x12); /*数码管的第2位显示"-"*/
318 1 // ch451_write(CH451_DIG2|0x12); /*数码管的第7位显示"-"*/
319 1 // ch451_key = 0xff;
320 1 key_flag = 0;
321 1 EA = 1;
322 1 EX1 =1;
323 1
324 1 while(1)
325 1 {
326 2 // if(ch451_key==0x5A) /*判断设置按键是否按下*/
327 2 // {
328 2 // SET_RTC();
329 2 // }
330 2 // if((key_flag!=0)&&(ch451_key==0x59))/*判断修改时间键是否被按下*/
331 2 // {
332 2 // SET_TIME();
333 2 // }
334 2 Get1302(&RClock); /*获取当前时间值*/
335 2 ds_sec = RClock[0]&0x7f; /*得到当前时间秒值*/
336 2 ds_min = RClock[1]; /*得到当前时间分值*/
337 2 ds_hour = RClock[2]; /*得到当前时间小时值*/
338 2
339 2 // ch451_bcd(ds_hour); /*对小时值进行转化*/
340 2 // ch451_write(CH451_DIG0|M); /*写小时高位*/
341 2 // ch451_write(CH451_DIG1|N); /*写小时低位*/
342 2
343 2 // ch451_bcd(ds_min); /*对分钟值进行转化*/
344 2 // ch451_write(CH451_DIG3|M); /*写分钟高位*/
345 2 // ch451_write(CH451_DIG4|N); /*写分钟低位*/
346 2
347 2 // ch451_bcd(ds_sec); /*对秒值进行转化*/
348 2 // ch451_write(CH451_DIG6|M); /*写秒值高位*/
349 2 // ch451_write(CH451_DIG7|N); /*写秒值低位*/
350 2 }
351 1 }
352 /*********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 396 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 13
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 + -