1

我知道如果我们想显示 pc 时间,我们将使用以下编码:

   System.Windows.Forms.Timer tmr = null;
    private void StartTimer()
    {
        tmr = new System.Windows.Forms.Timer();
        tmr.Interval = 1000;
        tmr.Tick += new EventHandler(tmr_Tick);
        tmr.Enabled = true;
    }

    void tmr_Tick(object sender, EventArgs e)
    {
        textBox6.Text = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        StartTimer();
    }

但我不想显示电脑时间。我想显示另一个时间(我的情况下来自微控制器的 rtc 时间)。

如果我从串口获取 rtc 时间并在文本框中显示为“09:00:00”。它只是静态的,对吧?如何让它在文本框上运行/递增?

我已经尝试了从上面的编码修改的以下内容:

    System.Windows.Forms.Timer rtc = null;
    private void StartRTC()
    {
        rtc = new System.Windows.Forms.Timer();
        rtc.Interval = 1000;
        rtc.Tick += new EventHandler(rtc_Tick);
        rtc.Enabled = true;
    }
    int i = 1;
    DateTime dt = new DateTime();
    void rtc_Tick(object sender, EventArgs e)
    {
        textBox17.Text = dt.AddSeconds(i).ToString("HH:mm:ss");
        i++;
    }

但是我的文本框中显示的时间总是从 00:00:00 开始递增。

我如何让它在我从微控制器 rtc 获得的时间开始增加?

4

3 回答 3

1

那是因为你开始了new DateTime(),所以你得到了一个新DateTime类的默认值。DateTime您应该使用对微处理器的 API 调用来初始化 的值。

例子

请注意,因为我对您的微处理器的 API 一无所知,所以我只能编写伪代码。在您的第二个示例中,替换以下行...

DateTime dt = new DateTime();

和...

DateTime dt = DateTime.Parse({some microprocessor API call for the RTC value});

根据上次评论编辑

System.Windows.Forms.Timer rtc = null; 
DateTime dt;  // NOTE I DON'T INITIALIZE THIS TO ANYTHING AT FIRST

private void StartRTC() 
{ 
    rtc = new System.Windows.Forms.Timer(); 
    rtc.Interval = 1000; 
    rtc.Tick += new EventHandler(rtc_Tick); 
} 

void rtc_Tick(object sender, EventArgs e) 
{ 
    // NOTE I GOT RID OF i - THAT WASN'T GOING TO WORK LIKE THAT 
    // YOU JUST WANT TO ADD ONE SECOND BECAUSE THE TIMER TICKS EVERY SECOND:
    textBox17.Text = dt.AddSeconds(1).ToString("HH:mm:ss");

    dt = DateTime.Parse(textBox17.Text);
}

 // I HAVE NO IDEA WHAT YOUR METHOD HANDLER IS CALLED, THIS IS 
 // JUST FOR THE EXAMPLE
void buttonSetRtc_Click(object sender, EventArgs e)  
{
    // HERE IS YOUR CALL TO THE MICROCONTROLLER FOR THE INITIAL TIME:
    textBox17.Text = {some call to the microcontroller};  
    dt = DateTime.Parse(textBox17.Text);  // NOW THIS LINE WON'T FAIL
    rtc.Enabled = true;  // NOTE I MOVED THIS LINE TO KEEP IT FROM FAILING
}
于 2012-08-03T09:42:11.903 回答
0

您必须使用微控制器日期时间初始化 Datetime dt。如

DateTime dt = new DateTime();
dt = dt.AddHours(9);
于 2012-08-03T09:54:44.653 回答
0

我不知道这有多好,但看看这是否可能。

当您能够从您的微控制器检索时间时,为什么不使用一个计时器,它会定期从您的微控制器读取时间并更新您在 UI 中的控制?

于 2012-08-03T10:02:31.487 回答