📄 pcf8563.lst
字号:
223 3 SetPCF8563(day,rbuf[2]);
224 3 }
225 2 else if(count==5)
226 2 {
227 3 rbuf[1]=rbuf[1]&0x3f;
228 3 if(rbuf[1]==0x09)
229 3 rbuf[1]=0x10;
230 3 else if(rbuf[1]==0x19)
231 3 rbuf[1]=0x20;
232 3 else if(rbuf[1]==0x23)
233 3 rbuf[1]=0x0;
234 3 else
235 3 rbuf[1]+=1;
236 3 SetPCF8563(hour,rbuf[1]);
237 3 }
238 2 else if(count==6)
239 2 {
240 3 rbuf[0]=rbuf[0]&0x7f;
241 3 gw=rbuf[0]&0x0f;
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 5
242 3 sw=(rbuf[0]>>4)&0x0f;
243 3 if(gw==0x09)
244 3 { if(sw==0x05)
245 4 {sw=0;
246 5 gw=0;
247 5 }
248 4 else
249 4 {gw=0;
250 5 sw+=1;
251 5 }
252 4 }
253 3 else
254 3 gw+=1;
255 3 rbuf[0]=(sw<<4)+gw;
256 3 SetPCF8563(minute,rbuf[0]);
257 3 }
258 2 else
259 2 break;
260 2 break;
261 2
262 2 case 13: if(count==1) //相减键,相减键为1是调节年寄存器中的数值!
263 2 {
264 3 gw=rbuf[5]&0x0f; //年的个位十位分离
265 3 sw=(rbuf[5]>>4)&0x0f;
266 3 if(gw==0x0) //判断个位和十位是否为0
267 3 {
268 4 if(sw==0x0)
269 4 {gw=9;
270 5 sw=9;
271 5 }
272 4 else
273 4 { gw=9;
274 5 sw-=1;
275 5 }
276 4 }
277 3 else
278 3 gw-=1;
279 3
280 3 rbuf[5]=(sw<<4)+gw;
281 3 SetPCF8563(year,rbuf[5]);
282 3 }
283 2 else if(count==2) //调节月寄存器中的数值!
284 2 {
285 3 rbuf[4]=rbuf[4]&0x1f;
286 3 if(rbuf[4]==0x10)
287 3 rbuf[4]=0x9;
288 3 else if(rbuf[4]==0x01)
289 3 rbuf[4]=0x12;
290 3 else
291 3 rbuf[4]-=1;
292 3 SetPCF8563(month,rbuf[4]);
293 3 }
294 2 else if(count==4)
295 2 {
296 3 rbuf[3]=rbuf[3]&0x07;
297 3 if(rbuf[3]==0x0)
298 3 rbuf[3]=0x06;
299 3 else
300 3 rbuf[3]=rbuf[3]-1;
301 3 SetPCF8563(week,rbuf[3]);
302 3 }
303 2 else if(count==3)
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 6
304 2 {
305 3 rbuf[2]=rbuf[2]&0x3f;
306 3 gw=rbuf[2]&0x0f;
307 3 sw=(rbuf[2]>>4)&0x0f;
308 3 if(rbuf[2]==0x01) //判断个位和十位是否为1
309 3 {gw=1;
310 4 sw=3;
311 4 }
312 3 else if(gw==0x0)
313 3 {gw=9;
314 4 sw-=1;
315 4 }
316 3 else
317 3 gw-=1;
318 3 rbuf[2]=(sw<<4)+gw;
319 3 SetPCF8563(day,rbuf[2]);
320 3 }
321 2 else if(count==5)
322 2 {
323 3 rbuf[1]=rbuf[1]&0x3f;
324 3 if(rbuf[1]==0x10)
325 3 rbuf[1]=0x9;
326 3 else if(rbuf[1]==0x20)
327 3 rbuf[1]=0x19;
328 3 else if(rbuf[1]==0x0)
329 3 rbuf[1]=0x23;
330 3 else
331 3 rbuf[1]-=1;
332 3 SetPCF8563(hour,rbuf[1]);
333 3 }
334 2 else if(count==6)
335 2 {
336 3 rbuf[0]=rbuf[0]&0x7f;
337 3 gw=rbuf[0]&0x0f;
338 3 sw=(rbuf[0]>>4)&0x0f;
339 3 if(gw==0x0)
340 3 { if(sw==0x0)
341 4 {sw=5;
342 5 gw=9;
343 5 }
344 4 else
345 4 {gw=9;
346 5 sw-=1;
347 5 }
348 4 }
349 3 else
350 3 gw-=1;
351 3 rbuf[0]=(sw<<4)+gw;
352 3 SetPCF8563(minute,rbuf[0]);
353 3 }
354 2 else
355 2 break;
356 2 break;
357 2 case 10: EnterCount=0;
358 2 lcd_init();
359 2 switch(AlarmCount)
360 2 {case 0:lcd_display(0x40,AlarmMinute);break;
361 3 case 1:lcd_display(0x40,AlarmHour);break;
362 3 case 2:lcd_display(0x40,AlarmDay); break;
363 3 case 3:lcd_display(0x40,AlarmWeek);break;
364 3 default:break;
365 3 }
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 7
366 2 AlarmCount+=1;
367 2 if(AlarmCount>4)
368 2 AlarmCount=0;
369 2 break;
370 2 case 11: EnterCount++; //确认键,按下1次表示确定设定类型
371 2 lcd_init();
372 2 if(EnterCount==1)
373 2 {
374 3 AlarmCount--;
375 3 if(AlarmCount<0)
376 3 AlarmCount=0;
377 3 if(AlarmCount==0)
378 3 lcd_display(0x40,TimeM);
379 3 else if(AlarmCount==1)
380 3 lcd_display(0x40,TimeH);
381 3 else if(AlarmCount==2)
382 3 lcd_display(0x40,TimeD);
383 3 else
384 3 {AlarmCount=3;
385 4 lcd_display(0x40,TimeW);
386 4 }
387 3 GetPCF8563(minAlarm,4,abuf);//把相应寄存器中的报警数据读出
388 3 alarm_display(abuf);
389 3 }
390 2 else if(EnterCount==2) //按下第二次表示发送报警数据
391 2 {
392 3 ddata=(data1<<4)+data2;
393 3 if(AlarmCount==0)
394 3 {if((ddata>0x59)||(ddata<0x00))
395 4 {
396 5 lcd_display(0x40,Error);
397 5 EnterCount=0;
398 5 }
399 4 else
400 4 {
401 5 lcd_display(0x40,TestOk);
402 5 }
403 4 }
404 3 else if(AlarmCount==1)
405 3 {if(ddata>0x23||ddata<0x00)
406 4 {
407 5 lcd_display(0x40,Error);
408 5 EnterCount=0;
409 5 }
410 4 else
411 4 {
412 5 lcd_display(0x40,TestOk);
413 5 }
414 4 }
415 3 else if(AlarmCount==2)
416 3 {if(ddata>0x31||ddata<0x01)
417 4 {
418 5 lcd_display(0x40,Error);
419 5 EnterCount=0;
420 5 }
421 4 else
422 4 {
423 5 lcd_display(0x40,TestOk);
424 5 }
425 4 }
426 3 else
427 3 { AlarmCount=3;
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 8
428 4 if(ddata>0x6||ddata<0x00)
429 4 {
430 5 lcd_display(0x40,Error);
431 5 EnterCount=0;
432 5 }
433 4 else
434 4 {
435 5 lcd_display(0x40,TestOk);
436 5 }
437 4 }
438 3 }
439 2 else if(EnterCount==3) //按下第3次表示发送报警数据
440 2 {EnterCount=0;
441 3 SetPCF8563(ctrl2,0x02); //把AIE设置为1,AF设置为0
442 3 abuf[AlarmCount]=(ddata&0x7f);//把AE设定为0
443 3 SetPCF8563(minAlarm+AlarmCount,abuf[AlarmCount]);//报警设置完毕
444 3 lcd_display(0x40,AlarmFinish);
445 3 //显示闹钟符号
446 3 }
447 2 else
448 2 EnterCount=0;
449 2 break;
450 2 break;
451 2 case 0: if(EnterCount==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -