小弟刚接触arduino没多久,用定时器中断MsTimer2做了一个时钟实验。每1s调用一次定时器中断,中断里的内容就是second++,最后通过数码管显示。实验发现这个MsTimer2特别不准..每隔1小时就与正常时间差了将近20s!
是我程序的问题,还是定时器中断本身的缺陷?求大神解答{:soso_e118:}
#include <MsTimer2.h>
int dataPin = 7;
int clockPin = 12;
int latchPin = 13;
unsigned char led_segbit[]={0x08,0x04,0x02,0x01};
unsigned char led_table[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0xBF};
unsigned char led_disbuf[4]={0,0,0,0};
unsigned char led_date[4];
unsigned char second=00;
unsigned char minute=15;
unsigned char hour=16;
void change(){
   second++;
    if(second > 59)
    {
      second = 0;
      minute ++;
      if(minute > 59)
      {
        minute = 0;
        hour ++;
        if(hour > 23) hour = 0;
      }
    }
            
            
           
}
void setup()
{
    pinMode(dataPin,OUTPUT);
    pinMode(clockPin,OUTPUT);
    pinMode(latchPin,OUTPUT);
    MsTimer2::set(1000, change);
    MsTimer2::start();
    Serial.begin(9600);
}
void loop()
{
   
     
        LED4_Display ();
     
}    
    
void LED4_Display (void)
{
     led_date[0]=hour/10;
     led_date[1]=hour%10;
     led_date[2]=minute/10;
     led_date[3]=minute%10;
   
    unsigned char* led_address;
    for(int i=0;i<4;i++)
    {
       led_address=led_table+led_date;
       led_disbuf=*led_address;
digitalWrite(latchPin,LOW);
        shiftOut(dataPin,clockPin,MSBFIRST,led_disbuf);
        shiftOut(dataPin,clockPin,MSBFIRST,led_segbit);
        digitalWrite(latchPin,HIGH);
    }             
        
} |