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();
    }

しかし、私はPCの時間を表示したくありません。別の時間 (私の場合はマイクロコントローラーからの 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()のデフォルト値を取得しているためです。の値は、マイクロプロセッサへの API 呼び出しDateTimeで初期化する必要があります。DateTime

私はあなたのマイクロプロセッサの API について何も知らないので、疑似コードしか書けません。2 番目の例では、次の行を置き換えます...

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でDatetime dtを初期化する必要があります。そのような

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

これがどれだけうまく機能するかはわかりませんが、これが可能かどうかを確認してください。

マイクロ コントローラーから時間を取得できる場合は、定期的にマイクロ コントローラーから時間を読み取り続け、UI でコントロールを更新するタイマーを使用してみませんか??

于 2012-08-03T10:02:31.487 に答える