📄 led.lst
字号:
219 1 RTC_SCL=1;
220 1 RTC_RST=0;
221 1 return dat;
222 1 }
223
224
225 typedef struct __SYSTEMTIME__
226 {
227 uint8 Second;
228 uint8 Mine;
229 uint8 Hour;
230 uint8 Day;
231 uint8 Month;
232 uint8 Week;
233 uint8 Year;
234 }SYSTEMTIME;
235 static SYSTEMTIME TIMETYPE;
236
237 void CurrentTime(SYSTEMTIME *dat)
238 {
239 1 uint8 TimeValue;
240 1 TimeValue=RTC_Read_Byte(READ_SECOND);
241 1 dat->Second=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
242 1 TimeValue=RTC_Read_Byte(READ_MINE);
243 1 dat->Mine= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
244 1 TimeValue=RTC_Read_Byte(READ_HOUR);
245 1 dat->Hour= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
246 1 TimeValue=RTC_Read_Byte(READ_DAY);
247 1 dat->Day= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
248 1 TimeValue=RTC_Read_Byte(READ_MONTH);
249 1 dat->Month= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
250 1 TimeValue=RTC_Read_Byte(READ_WEEK);
251 1 dat->Week= (TimeValue&0x0f);
252 1 TimeValue=RTC_Read_Byte(READ_YEAR);
253 1 dat->Year= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
254 1 }
255 bit LCD_BUSY()
256 {
257 1 bit result;
258 1 LCD_RS=0;
259 1 LCD_RW=1;
260 1 LCD_EN=1;
261 1 _nop_();
262 1 _nop_();
263 1 result=(bit)(LCD_PORT&0x80);
264 1 LCD_EN=0;
265 1 return result;
266 1 }
267 void LCD_Write(uint8 dat,uint8 type)
268 {
269 1 uint8 i;
270 1 while((LCD_BUSY()&&i<100)){i++;}
C51 COMPILER V7.50 LED 09/28/2008 21:00:12 PAGE 6
271 1 if(i>99)LCD_NO=1;
272 1 LCD_RS=type;
273 1 LCD_RW=0;
274 1 LCD_EN=0;
275 1 _nop_();
276 1 _nop_();
277 1 _nop_();
278 1 _nop_();
279 1 LCD_PORT=dat;
280 1 _nop_();
281 1 _nop_();
282 1 _nop_();
283 1 _nop_();
284 1 LCD_EN=1;
285 1 _nop_();
286 1 _nop_();
287 1 _nop_();
288 1 _nop_();
289 1 LCD_EN=0;
290 1 }
291 void LCD_INITIALIZE()
292 {
293 1 LCD_Write(0x06,LCD_COMMAND);
294 1 LCD_Write(0x38,LCD_COMMAND);
295 1 LCD_Write(0x0c,LCD_COMMAND);
296 1 LCD_Write(0x01,LCD_COMMAND);
297 1 }
298 void LCD_Prints(uint8 *dat,uint8 add)
299 {
300 1 LCD_Write(add|0x80,LCD_COMMAND);
301 1 while(*dat!='\0')LCD_Write((*(dat++)),LCD_DATA);
302 1 }
303 void et0() interrupt 1 using 0
304 {
305 1 static uint8 i;
306 1 TH0=0xf3;
307 1 TL0=0xf3;
308 1 TR0=1;
309 1 i++;
310 1 if(i==22)
311 1 {
312 2 i=0;
313 2 WORDNUMBER++;
314 2 }
315 1 }
316 void KEY_Delay()
317 {
318 1 uint8 i,j;
319 1 for(i=0;i<200;i++)
320 1 for(j=0;j<200;j++);
321 1 }
322 void SET_YEAR()
323 {
324 1 uint8 YEAR[3];
325 1 LCD_Prints(" YEAR SETTING ",0);
326 1 LCD_Prints(" YEAR:20 ",0x40);
327 1 if((!KEY3)&&(TIMETYPE.Year<80)){KEY_Delay();i1=i2=0;TIMETYPE.Year++;}
328 1 else if(TIMETYPE.Year>79)TIMETYPE.Year=0;
329 1 if((!KEY4)&&(TIMETYPE.Year>0)){KEY_Delay();i1=i2=0;TIMETYPE.Year--;}
330 1 YEAR[0]=(TIMETYPE.Year/10)+'0';
331 1 YEAR[1]=(TIMETYPE.Year%10)+'0';
332 1 YEAR[2]='\0';
C51 COMPILER V7.50 LED 09/28/2008 21:00:12 PAGE 7
333 1 LCD_Prints(YEAR,0x49);
334 1 }
335 void SET_MONTH()
336 {
337 1 uint8 MONTH[3];
338 1 LCD_Prints(" MONTH SETTING ",0);
339 1 LCD_Prints(" MONTH: ",0x40);
340 1 if((!KEY3)&&(TIMETYPE.Month<13)){KEY_Delay();TIMETYPE.Month++;i1=i2=0;}
341 1 else if(TIMETYPE.Month>12)TIMETYPE.Month=1;
342 1 if((!KEY4)&&(TIMETYPE.Month>1)){KEY_Delay();TIMETYPE.Month--;i1=i2=0;}
343 1 MONTH[0]=(TIMETYPE.Month/10)+'0';
344 1 MONTH[1]=(TIMETYPE.Month%10)+'0';
345 1 MONTH[2]='\0';
346 1 LCD_Prints(MONTH,0x48);
347 1 }
348 void SET_DAY()
349 {
350 1 uint8 DAY[3];
351 1 LCD_Prints(" DAY SETTING ",0);
352 1 LCD_Prints(" DAY: ",0x40);
353 1 if((!KEY3)&&(TIMETYPE.Day<32)){KEY_Delay();TIMETYPE.Day++;i1=i2=0;}
354 1 else if(TIMETYPE.Day>31)TIMETYPE.Day=1;
355 1 if((!KEY4)&&(TIMETYPE.Day>1)){KEY_Delay();TIMETYPE.Day--;i1=i2=0;}
356 1 DAY[0]=(TIMETYPE.Day/10)+'0';
357 1 DAY[1]=(TIMETYPE.Day%10)+'0';
358 1 DAY[2]='\0';
359 1 LCD_Prints(DAY,0x46);
360 1 }
361 void SET_WEEK()
362 {
363 1 uint8 WEEK[2];
364 1 LCD_Prints(" WEEK SETTING ",0);
365 1 LCD_Prints(" WEEK: ",0x40);
366 1 if((!KEY3)&&(TIMETYPE.Week<8)){KEY_Delay();TIMETYPE.Week++;i1=i2=0;}
367 1 else if(TIMETYPE.Week>7)TIMETYPE.Week=1;
368 1 if((!KEY4)&&(TIMETYPE.Week>1)){KEY_Delay();TIMETYPE.Week--;i1=i2=0;}
369 1 WEEK[0]=TIMETYPE.Week+'0';
370 1 WEEK[1]='\0';
371 1 LCD_Prints(WEEK,0x47);
372 1 }
373 void SET_HOUR()
374 {
375 1 uint8 HOUR[3];
376 1 LCD_Prints(" HOUR SETTING ",0);
377 1 LCD_Prints(" HOUR: ",0x40);
378 1 if((!KEY3)&&(TIMETYPE.Hour<24)){KEY_Delay();TIMETYPE.Hour++;i1=i2=0;}
379 1 else if(TIMETYPE.Hour>23)TIMETYPE.Hour=0;
380 1 if((!KEY4)&&(TIMETYPE.Hour>0)){KEY_Delay();TIMETYPE.Hour--;i1=i2=0;}
381 1 HOUR[0]=(TIMETYPE.Hour/10)+'0';
382 1 HOUR[1]=(TIMETYPE.Hour%10)+'0';
383 1 HOUR[2]='\0';
384 1 LCD_Prints(HOUR,0x47);
385 1 }
386 void SET_MINE()
387 {
388 1 uint8 MINE[3];
389 1 LCD_Prints(" MINE SETTING ",0);
390 1 LCD_Prints(" MINE: ",0x40);
391 1 if((!KEY3)&&(TIMETYPE.Mine<60)){KEY_Delay();TIMETYPE.Mine++;i1=i2=0;}
392 1 else if(TIMETYPE.Mine>59)TIMETYPE.Mine=0;
393 1 if((!KEY4)&&(TIMETYPE.Mine>0)){KEY_Delay();TIMETYPE.Mine--;i1=i2=0;}
394 1 MINE[0]=(TIMETYPE.Mine/10)+'0';
C51 COMPILER V7.50 LED 09/28/2008 21:00:12 PAGE 8
395 1 MINE[1]=(TIMETYPE.Mine%10)+'0';
396 1 MINE[2]='\0';
397 1 LCD_Prints(MINE,0x47);
398 1 }
399 void SET_SECOND()
400 {
401 1 uint8 SECOND[3];
402 1 LCD_Prints(" SECOND SETTING ",0);
403 1 LCD_Prints(" SECOND: ",0x40);
404 1 if((!KEY3)&&(TIMETYPE.Second<60)){KEY_Delay();TIMETYPE.Second++;i1=i2=0;}
405 1 else if(TIMETYPE.Second>59)TIMETYPE.Second=0;
406 1 if((!KEY4)&&(TIMETYPE.Second>0)){KEY_Delay();TIMETYPE.Second--;i1=i2=0;}
407 1 SECOND[0]=(TIMETYPE.Second/10)+'0';
408 1 SECOND[1]=(TIMETYPE.Second%10)+'0';
409 1 SECOND[2]='\0';
410 1 LCD_Prints(SECOND,0x48);
411 1 }
412 void Write_Time()
413 {
414 1 uint8 year,month,day,hour,mine,second,week;
415 1 year=((TIMETYPE.Year/10)<<4)|(TIMETYPE.Year%10);
416 1 month=((TIMETYPE.Month/10)<<4)|(TIMETYPE.Month%10);
417 1 day=((TIMETYPE.Day/10)<<4)|(TIMETYPE.Day%10);
418 1 week=TIMETYPE.Week;
419 1 hour=((TIMETYPE.Hour/10)<<4)|(TIMETYPE.Hour%10);
420 1 mine=((TIMETYPE.Mine/10)<<4)|(TIMETYPE.Mine%10);
421 1 second=((TIMETYPE.Second/10)<<4)|(TIMETYPE.Second%10);
422 1 RTC_Write_Byte(0x8e,0x00); //写入允许
423 1 RTC_Write_Byte(0x80,WRITE_SECOND|0x80);
424 1 RTC_Write_Byte(0x8e,0x80); //禁止写入
425 1 RTC_Write_Byte(0x8e,0x00); //写入允许
426 1 RTC_Write_Byte(WRITE_YEAR,year); //写入新的秒数
427 1 RTC_Write_Byte(WRITE_MONTH,month); //写入新的秒数
428 1 RTC_Write_Byte(WRITE_DAY,day); //写入新的秒数
429 1 RTC_Write_Byte(WRITE_HOUR,hour); //写入新的秒数
430 1 RTC_Write_Byte(WRITE_MINE,mine&0x7f); //写入新的秒数
431 1 RTC_Write_Byte(WRITE_WEEK,week); //写入新的秒数
432 1 RTC_Write_Byte(WRITE_SECOND,second);
433 1 RTC_Write_Byte(0x8e,0x00); //写入允许
434 1 RTC_Write_Byte(0x8E,0x80);
435 1 }
436 void SET_TIME()
437 {
438 1 uint8 i;
439 1 CurrentTime(&TIMETYPE);
440 1 while(1)
441 1 {
442 2 switch(i)
443 2 {
444 3 case 0:SET_YEAR();break;
445 3 case 1:SET_MONTH();break;
446 3 case 2:SET_DAY(); break;
447 3 case 3:SET_WEEK();break;
448 3 case 4:SET_HOUR();break;
449 3 case 5:SET_MINE();break;
450 3 case 6:SET_SECOND();break;
451 3 }
452 2 if(!KEY2){i++;KEY_Delay();i1=i2=0;}
453 2 if(i==7){i=0;Write_Time();break;}
454 2 i1++;
455 2 if(i1==10){i2++;i1=0;}
456 2 if(i2==100){i=0;Write_Time();break;}
C51 COMPILER V7.50 LED 09/28/2008 21:00:12 PAGE 9
457 2 }
458 1 }
459
460 void TIMESETTING()
461 {
462 1 if(!KEY1){LED_EN=1;SET_TIME();}
463 1 WORDNUMBER=0;
464 1 WORDNUM=0;
465 1 }
466 void LED_Ser(uint8 dat)
467 {
468 1 SBUF=dat;
469 1 while(TI==0);
470 1 TI=0;
471 1 }
472 void LED_Delay()
473 {
474 1 uint8 i,j;
475 1 for(i=0;i<11;i++)
476 1 for(j=0;j<16;j++);
477 1 }
478 void SET_STB()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -