先说明下: 1.单片机为MSP430F147 2.使用定时中断,定时器时钟为ACLK,1s中断一次。 3.使用了一个常数数组与一个变量数组来确定一月有多少天。内存有点费。 年、日、时、分、秒采用BCD码,以便通讯输出。 4.月因需与数组序号对应,所以为16进制码。通讯时需转换。
第3条改了下:使用了一个常数数组与一个变量数组来确定一月有多少天 改为使用了一个常数数组与一个变量来确定一月有多少天 原来的处理方法空间与时间上都比较浪费。 上午编完后总觉得不满意,呵呵 现在应该没什么不好的了。 void timer(void) { T.sec++; if( (T.sec & 0x0f) > 9) { T.sec += 6; //T.sec = (T.sec & 0xf0) + 0x10; 04.21改 } if( T.sec > 0x59 ) { T.sec = 0; T.min++; if( (T.min & 0x0f) > 9) { T.min += 6;//T.min = (T.min & 0xf0) + 0x10;04.21改 } if( T.min > 0x59 ) { T.min = 0; T.hour++; if( (T.hour & 0x0f) > 9) { T.hour += 6;//T.hour = (T.hour & 0xf0) + 0x10;04.21改 } if( T.hour > 0x23 ) { T.hour = 0; T.date++; if( (T.date & 0x0f) > 9) { T.date += 6;//T.date = (T.date & 0xf0) + 0x10;04.21改 } if( T.date > date_num )//原为if( T.date > date_num[month] ) { T.date = 1; T.month++; date_num = Date_Num[T.month];//原为date_num[T.month] = Date_Num[T.month]; if( (T.month == 1) && ((T.year<<6) ==0) )//第2月 { date_num = 0x29;//原为date_num[T.month] = 0x29; } if( T.month > 11 ) { T.month = 0; T.year++; if( (T.year & 0x0f) > 9) { T.year += 6;//T.year = (T.year & 0xf0) + 0x10;04.21改 } } } } } } } 里面有一个严重的错误,呵呵 |