' ' ************************************************************* ' * * ' * ATtiny45 + NUMITRON DA-2900 6桁 デジタル時計 プログラム * ' * * ' * AVR is using ATtiny45 * ' * Basic Compiler is BASCOM-AVR * ' * Copyright By O-Family 2008. 9. 15 * ' ************************************************************* ' ' Ver 1.01 初回公開バージョン ' ' $regfile = "ATtiny45.DAT" $crystal = 12800000 $eepleave ' Const Prgver = &H0101 'プログラム・バージョン。 ' ' Dim _sec As Byte '秒 カウンター。 Dim _min As Byte '分 カウンター。 Dim _hour As Byte '時 カウンター。 Dim _day As Byte '日 カウンター。 Dim _month As Byte '月 カウンター。 Dim _year As Byte '年 カウンター。 ' Dim T10msflag As Byte '10ms 経過フラグ。 Dim T1scun As Byte '1秒カウンター。 Dim T1sflag As Byte '1秒 経過フラグ。 Dim Dispchgf As Byte '表示更新フラグ。 Dim Disponf As Byte '時刻表示 ON/OFF フラグ。 Dim Monend As Byte '月の最終日 計算用。 Dim Dpblkt As Byte 'D.P点滅 500mSタイマー。 Dim Dpdispf As Byte 'D.P表示制御フラグ。(bitごとに点灯) Dim Keycun As Byte 'キー入力チェック用タイマーカウンター。 Dim Keyflg As Byte 'キー入力検出フラグ。 Dim Keydat As Byte 'キー入力データ。 Dim Keytemp As Byte 'キー入力用テンポラリ。 Dim Mf1224h As Byte 'モード・フラグ 0=24時間制 / 1=12時間制 Dim Mf82ds As Byte 'モード・フラグ 0=通常表示 / 1=8秒時間-2秒日付表示 ' Dim Segdt(6) As Byte '[桁] 表示データ・バッファー。 Dim Segcvt(10) As Byte 'セグメント・データ 変換テーブル。 ' Dim Temp1 As Byte '汎用テンポラリ変数 Byte型 No.1 Dim Temp2 As Byte '汎用テンポラリ変数 Byte型 No.2 Dim Temp3 As Byte '汎用テンポラリ変数 Byte型 No.3 Dim Temp4 As Byte '汎用テンポラリ変数 Byte型 No.4 Dim Temp5 As Byte '汎用テンポラリ変数 Byte型 No.5 Dim Temp6 As Byte '汎用テンポラリ変数 Byte型 No.6 Dim Temp7 As Byte '汎用テンポラリ変数 Byte型 No.7 Dim Tempw1 As Word '汎用テンポラリ変数 Word型 No.1 Dim Ltemp1 As Byte 'ローカル専用、汎用テンポラリ変数 Byte型 No.1 Dim Ltemp2 As Byte 'ローカル専用、汎用テンポラリ変数 Byte型 No.2 Dim Ltemp3 As Byte 'ローカル専用、汎用テンポラリ変数 Byte型 No.3 ' ' ' ' * ポートの初期設定 * ' Config Portb.0 = Output 'ポートBピン0を出力に設定。 Config Portb.1 = Output 'ポートBピン1を出力に設定。 Config Portb.2 = Output 'ポートBピン2を出力に設定。 ' ' * タイマーを設定 * ' Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1 'Timer0 12800000 / 1024 = 12,500Hz Ocr0a = 124 '12,500Hz / 100Hz = 125カウント。10mS タイマーを設定。 On Oc0a T10msint '10ms 割り込み処理ルーチン。 Enable Oc0a 'Timer0A 比較一致割り込みを許可。 ' ' * A/Dコンバーターを設定 * ' Config Adc = Single , Prescaler = Auto 'A/Dコンバーターの初期設定。 Start Adc 'A/Dコンバータに電源を供給。 ' ' * 変数の初期値設定 * ' Segcvt(1) = &HBE '"0" セグメント変換テーブルに、データをセット。 Segcvt(2) = &H24 '"1" Segcvt(3) = &HDC '"2" Segcvt(4) = &HF4 '"3" Segcvt(5) = &H66 '"4" Segcvt(6) = &HF2 '"5" Segcvt(7) = &HFA '"6" Segcvt(8) = &H34 '"7" Segcvt(9) = &HFE '"8" Segcvt(10) = &HF6 '"9" ' _year = 8 _month = 1 _day = 1 Disponf = 1 '時刻表示 ON/OFF フラグ。 ' ' Enable Interrupts '割り込みを許可。 ' ' ****************************** ' * EEPROM 保存データ 読み込み * ' ****************************** ' Readeeprom Mf1224h , 1 'EEPROM (1) 12/24時間制 表示フラグ。 Readeeprom Mf82ds , 2 'EEPROM (2) 8秒時間-2秒日付 表示フラグ。 ' If Mf1224h > 1 Then 'If EEPROMが初期状態? Then Mf1224h = 0 '0=24時間制 / 1=12時間制 Mf82ds = 0 '0=通常表示 / 1=8秒時間-2秒日付表示 Gosub Eepwrs 'EEPROMに書き込み。 End If ' ' ******************************** ' * プログラム・バージョンを表示 * ' ******************************** ' Prgvds: Dpdispf = &B00001000 '上位D.Pを点灯。 Temp4 = 1 '表示を点滅してキー入力待ち。 Prgvds3: Temp5 = 20 Prgvds1: If T10msflag = 0 Then Goto Prgvds1 'If 10mS経過したか? Else T10msflag = 0 '10ms 経過フラグをリセット。 ' Gosub Keyin If Keyflg <> 0 Then Goto Prgvds2 'If キー入力有り? Then Temp5 = Temp5 - 1 If Temp5 <> 0 Then Goto Prgvds1 'If 点滅タイマー カウント終了? Else If Temp4 = 0 Then '点滅用 F/Fを反転。 Temp4 = 1 Temp2 = &H05 '上位桁を消灯。 Gosub Segcver Temp2 = &H03 '下位桁を消灯。 Gosub Segcver Else Temp4 = 0 Temp3 = High(prgver) 'プログラム・バージョンの上位を表示。 Temp2 = &H05 Gosub Segcvwp Temp3 = Low(prgver) 'プログラム・バージョンの下位を表示。 Temp2 = &H03 Gosub Segcvwp End If Gosub Tx62705 '[桁]表示バッファーのデータを[TB62705CP]に送信する。 Goto Prgvds3 ' Prgvds2: Gosub Keyoff 'キーが離されるまで待つ。 Dpdispf = 0 'D.Pを消灯。 ' ' ' ' ******************* ' * メイン ルーチン * ' ******************* ' Main: Gosub Tim1sec '時刻のカウント処理。 Gosub Tim10ms '10mS 経過処理 & キー入力チェック。 Gosub Timdisp '時刻表示処理。 Goto Main ' End ' ' ***************************** ' * 時刻カウント 処理ルーチン * ' ***************************** ' Tim1sec: If T1sflag = 0 Then Return 'If 1秒 経過したか? Else T1sflag = 0 Dispchgf = 1 '表示更新フラグをセット。 ' _sec = _sec + 1 '秒を更新。 If _sec < 60 Then Return 'If 60秒 経過したか? Else ' _sec = 0 _min = _min + 1 '分を更新。 If _min < 60 Then Return 'If 60分 経過したか? Else ' _min = 0 _hour = _hour + 1 '時を更新。 If _hour < 24 Then Return 'If 24時間 経過したか? Else ' _hour = 0 _day = _day + 1 '日を更新。 Gosub Monchk '月ごとの日にちの最終日を計算 If _day =< Monend Then Return 'If 月の最終日を超えたか? Else ' _day = 1 _month = _month + 1 '月を更新。 If _month < 13 Then Return 'If 12ヶ月 経過したか? Else ' _month = 1 _year = _year + 1 '年を更新。 If _year < 100 Then Return 'If 100年 経過したか? Else _year = 0 Return ' ' ************************************************ ' * 月ごとの日にちの最終日を計算するサブルーチン * (Monend = その月の最終日) ' ************************************************ ' Monchk: Select Case _month '月をチェック。 Case 2 : Ltemp1 = _year And &H03 If Ltemp1 = 0 Then 'If 閏年? Then Monend = 29 Else Monend = 28 End If Case 4 : Monend = 30 Case 6 : Monend = 30 Case 9 : Monend = 30 Case 11 : Monend = 30 Case Else : Monend = 31 End Select Return ' ' ********************************************* ' * 10mS 経過処理 & キー入力チェック ルーチン * ' ********************************************* ' Tim10ms: If T10msflag = 0 Then Return 'If 10mS経過したか? Else T10msflag = 0 '10ms 経過フラグをリセット。 ' If Dpblkt = 0 Then Goto Keyin 'If D.P点滅タイマー カウント終了? Then Dpblkt = Dpblkt - 1 If Dpblkt <> 0 Then Goto Keyin 'If D.P点灯から500mS経過? Else Dpdispf = 0 'D.Pを消灯。 Gosub Tx62705 '[桁]表示バッファーのデータを[TB62705CP]に送信する。 ' ' ************************* ' * キー入力 サブルーチン * (Keyflg = キー入力が有ると1) ' ************************* (Keydat = キーデータ) ' Keyin: If Keycun = 0 Then Goto Keyin01 'If キー入力チェック開始? Then If Keycun < 3 Then Goto Keyin05 'If チャタリング チェック期間? Then If Keycun = 3 Then Goto Keyin03 'If キー入力再確認? Then ' Gosub Keyport 'キーオフを確認 If Keydat <> Keytemp Then Goto Keyin04 'If キーオフ? Then If Keycun < 103 Then Goto Keyin05 'If リピート期間待ち(1Sec)? Then Keyflg = 1 Keycun = 92 'リピート開始 Return ' ' Keyin01: 'キー入力チェック開始。 Gosub Keyport 'キー接続ポートからデータを入力。 If Keydat <> 0 Then Goto Keyin02 'If キー入力有り? Then Keyin04: Keycun = 0 Return ' Keyin02: 'キー入力有り。 Keytemp = Keydat 'キー・データを一時保存。 Keyin05: Keycun = Keycun + 1 Return ' Keyin03: 'キー入力再確認 Gosub Keyport 'キー接続ポートからデータを入力。 If Keydat <> Keytemp Then Goto Keyin04 'If キー入力エラー? Then Keyflg = 1 Goto Keyin05 ' ' *********************************************** ' * キー接続ポートからデータを入力 サブルーチン * (Keydat = キー・データ) ' *********************************************** ' Keyport: Tempw1 = Getadc(2 , &H20) 'アナログ入力2、左揃えモードを設定。 Ltemp1 = High(tempw1) 'ワード型変数の上位を取り出し。 Select Case Ltemp1 Case 198 To 209 : Keydat = 1 'スイッチ A Case 147 To 158 : Keydat = 2 'スイッチ B Case 99 To 109 : Keydat = 3 'スイッチ C Case 127 To 138 : Keydat = 4 'スイッチ A+B Case 76 To 86 : Keydat = 5 'スイッチ B+C Case 88 To 98 : Keydat = 6 'スイッチ A+C Case Else : Keydat = 0 '上記以外の場合。 End Select Return ' ' *************************************** ' * キーが離されるまで待つ サブルーチン * ' *************************************** ' Keyoff: Gosub Keyport 'キー接続ポートからデータを入力。 If Ltemp1 < 245 Then Goto Keyoff 'If キーが離されたか? Else Waitms 100 Return ' ' ***************************** ' * 時刻表示 処理ルーチン * ' ***************************** ' Timdisp: If Keyflg <> 0 Then Goto Timdsp01 'If キー入力が有り? Then Gosub Keyport If Keydat <> 0 Then Return 'If キーが押され続けている? Then ' ' If Dispchgf = 0 Then Return 'If [秒]が更新されたか? Else Dpdispf = &B00001010 '上位・下位のD.Pを点灯。 Dpblkt = 50 'D.P点滅 500mSタイマーセット。 Timdsp05: Dispchgf = 0 If Disponf = 0 Then Goto Timdsp02 'If 時刻表示 消灯モード? Then ' If Mf82ds = 1 Then Goto Timdsp03 'If 8秒時間-2秒日付表示モード? Then Timdsp04: Temp1 = _sec '[秒]を表示。 Temp2 = &H01 '桁を1,2にセット。 Gosub Segcvw Temp1 = _min '[分]を表示。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = _hour '[時]を表示。 Temp2 = &H85 '桁を5,6にセット。 Gosub Hourcv Timdspen: Gosub Tx62705 '[桁]表示バッファーのデータを[TB62705CP]に送信する。 Return ' Timdsp02: '時刻表示をすべて消灯。 Temp2 = &H01 '桁1,2を消灯。 Gosub Segcver Temp2 = &H03 '桁3,4を消灯。 Gosub Segcver Temp2 = &H05 '桁5,6を消灯。 Gosub Segcver Goto Timdspen ' ' Timdsp03: '8秒時間-2秒日付表示モード Temp1 = Makebcd(_sec) Temp1 = Temp1 And &H0F If Temp1 > 7 Then Goto Timdsp11 'If [秒]の下位が8-9? Then Goto Timdsp04 ' ' Timdsp01: 'キー入力有り Keyflg = 0 'キー入力フラグをリセット。 If Keydat = 1 Then Goto Timdsp11 'If [A]キーが押された? Then If Keydat = 2 Then Goto Timdsp21 'If [B]キーが押された? Then If Keydat = 3 Then Goto Timdsp31 'If [C]キーが押された? Then If Keydat = 4 Then Goto Timdsp41 'If [A+B]キーが押された? Then If Keydat = 6 Then Goto Timdsp61 'If [A+C]キーが押された? Then If Keydat = 5 Then Goto Timdsp51 'If [B+C]キーが押された? Then Return ' ' Timdsp11: '[A]キーが押された。(月・日を表示) Dpdispf = 0 'D.Pを消灯。 Temp2 = &H01 '桁1,2を消灯。 Gosub Segcver Temp1 = _day '[日]を表示。 Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Temp1 = _month '[月]を表示。 Temp2 = &H85 '桁を5,6にセット。 Gosub Segcvw Goto Timdspen ' ' Timdsp21: '[B]キーが押された。(年を表示) Dpdispf = 0 'D.Pを消灯。 Temp2 = &H01 '桁1,2を消灯。 Gosub Segcver Temp1 = _year '[年]下位を表示。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = 20 '[年]上位を表示。 Temp2 = &H05 '桁を5,6にセット。 Gosub Segcvw Goto Timdspen ' ' Timdsp31: '[C]キーが押された。(時刻表示のON/OFF) Toggle Disponf.0 '時刻表示 ON/OFF フラグを反転。 Goto Timdsp05 ' ' Timdsp41: '[A+B]キーが押された。(12/24時間制の切り換え) Toggle Mf1224h.0 '12/24時間制モード・フラグを反転。 Gosub Eepwrs 'EEPROMに書き込み。 Goto Timdsp05 ' ' Timdsp61: '[A+C]キーが押された。(表示モードの切り換え) Toggle Mf82ds.0 '8秒時間-2秒日付表示モード・フラグを反転。 Gosub Eepwrs 'EEPROMに書き込み。 Goto Timdsp05 ' ' Timdsp51: '[B+C]キーが押された。(時刻設定モード) Waitms 10 '10mSの待ち時間。 Gosub Keyin If Keydat <> 5 Then Goto Timdsp05 'If [B+C]キーが押されている? Else If Keyflg = 0 Then Goto Timdsp51 'If 1秒以上押された? Else ' ' ************************* ' * 時刻設定 処理ルーチン * ' ************************* ' Timset: Dpdispf = 0 'D.Pを消灯。 Temp2 = &H01 '桁1,2を消灯。 Gosub Segcver Temp2 = &H03 '桁3,4を消灯。 Gosub Segcver ' Temp1 = 20 '[年]設定。 Temp2 = &H05 '桁を5,6にセット。 Gosub Segcvw Gosub Tx62705 '[桁]表示バッファーのデータを[TB62705CP]に送信する。 Gosub Keyoff 'キーが離されるまで待つ。 ' Temp1 = _year 'Temp1 = 設定するデータ値。 Temp2 = &H03 '桁を3,4にセット。 ' Timset21: Temp4 = 0 'Temp4 = 設定値の下限。 Temp5 = 99 'Temp5 = 設定値の上限。 Gosub Tmskey If Keydat <> 1 Then Goto Timset21 'If [A]キーが押された? Else _year = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _day '[月]設定。 Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Temp1 = _month 'Temp1 = 設定するデータ値。 Temp2 = &H85 '桁を5,6にセット。 ' Timset31: Temp4 = 1 'Temp4 = 設定値の下限。 Temp5 = 12 'Temp5 = 設定値の上限。 Gosub Tmskey If Keydat <> 1 Then Goto Timset31 'If [A]キーが押された? Else _month = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _month '[日]設定。 Temp2 = &H85 '桁を5,6にセット。 Gosub Segcvw Gosub Monchk '月ごとの日にちの最終日を計算 Temp1 = _day 'Temp1 = 設定するデータ値。 Temp2 = &H83 '桁を3,4にセット。 ' Timset41: Temp4 = 1 'Temp4 = 設定値の下限。 Temp5 = Monend 'Temp5 = 設定値の上限。 Gosub Tmskey If Keydat <> 1 Then Goto Timset41 'If [A]キーが押された? Else _day = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Dpdispf = &B00001000 '上位D.Pを点灯。 Temp1 = _min '[時]設定。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = _hour 'Temp1 = 設定するデータ値。 Temp2 = &HC5 '桁を5,6にセット。 ' Timset51: Temp4 = 0 'Temp4 = 設定値の下限。 Temp5 = 23 'Temp5 = 設定値の上限。 Gosub Tmskey If Keydat <> 1 Then Goto Timset51 'If [A]キーが押された? Else _hour = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _hour '[分]設定。 Temp2 = &H85 '桁を5,6にセット。 Gosub Hourcv Temp1 = _min 'Temp1 = 設定するデータ値。 Temp2 = &H03 '桁を3,4にセット。 ' Timset61: Temp4 = 0 'Temp4 = 設定値の下限。 Temp5 = 59 'Temp5 = 設定値の上限。 Gosub Tmskey If Keydat <> 1 Then Goto Timset61 'If [A]キーが押された? Else _min = Temp1 ' _sec = 0 '[秒]をリセット。 T1sflag = 0 '1秒カウンターをリセット。 T1scun = 0 Goto Timdsp05 ' ' ************************************ (Temp1 = 設定するデータ値) ' * 時刻設定用 キー入力 サブルーチン * (Temp2 = 設定するデータの桁位置) ' ************************************ (Temp4 = 設定値の下限) ' (Temp5 = 設定値の上限) Tmskey: Temp6 = 1 '点滅用 F/F。 Temp7 = 1 '点滅用タイマー値。 ' Tmskey1: If T10msflag = 0 Then Goto Tmskey1 'If 10mS経過したか? Else T10msflag = 0 '10ms 経過フラグをリセット。 ' Gosub Keyin If Keyflg <> 0 Then Goto Tmskey2 'If キー入力有り? Then Temp7 = Temp7 - 1 If Temp7 <> 0 Then Goto Tmskey1 'If 点滅タイマー カウント終了? Else If Temp6 = 0 Then '点滅用 F/Fを反転。 Temp6 = 1 Temp7 = 20 '点滅用タイマー値。 Gosub Segcver '指定[桁]を消灯。 Else Temp6 = 0 Temp7 = 40 '点滅用タイマー値。 If Temp2.6 = 1 Then 'If [時]表示? Then Gosub Hourcv '指定[桁]を点灯。 Else Gosub Segcvw '指定[桁]を点灯。 End If End If Gosub Tx62705 '[桁]表示バッファーのデータを[TB62705CP]に送信する。 Goto Tmskey1 ' ' Tmskey2: Keyflg = 0 'キー入力フラグをリセット。 If Keydat = 1 Then Return 'If [A]キーが押された? Then If Keydat = 2 Then Goto Tmskey3 'If [B]キーが押された? Then If Keydat = 3 Then Goto Tmskey4 'If [C]キーが押された? Then Goto Tmskey1 ' ' Tmskey3: '設定値を加算。 Temp1 = Temp1 + 1 If Temp1 > Temp5 Then Temp1 = Temp4 'If 設定値が上限を超えたか? Then Return ' Tmskey4: '設定値を減算。 If Temp1 = Temp4 Then 'If 設定値が下限を超えるか? Then Temp1 = Temp5 Else Temp1 = Temp1 - 1 End If Return ' ' ************************************************* ' * バイナリ値を2桁のセグメント・データに変換して * (Temp1 = バイナリ・データ) ' * [桁] 表示バッファーに書き込むサブルーチン * (Temp2 bit3-0 = 書き込む桁番号 (1,3,5) ' ************************************************* (Temp2 Bit7 = (1)でゼロサプレス制御。 ' Segcvw: Temp3 = Makebcd(temp1) 'バイナリ値を、BCD(Binary coded decimal)値に変換。 Segcvwp: Ltemp2 = Temp2 And &H0F 'Ltemp2 = 書き込む桁番号。(01,03,05) Ltemp1 = Temp3 And &H0F 'Ltemp1 = BCD値の下位桁。 Segdt(ltemp2) = Segcvt(ltemp1 + 1) '[桁] 表示バッファーに下位桁の値を書き込む。 ' Ltemp1 = Temp3 And &HF0 'Ltemp1 = BCD値の上位桁。 Shift Ltemp1 , Right , 4 If Temp2.7 = 1 Then Goto Segcvw1 'If ゼロサプレスが有効? Then Segcvw2: Segdt(ltemp2 + 1) = Segcvt(ltemp1 + 1) '[桁] 表示バッファーに上位桁の値を書き込む。 Return ' ' Segcvw1: 'ゼロサプレス処理。 If Ltemp1 <> 0 Then Goto Segcvw2 'If 上位桁の値が0? Else Segdt(ltemp2 + 1) = 0 '上位桁を消灯。 Return ' ' *********************************** ' * 指定[桁]を消灯する サブルーチン * (Temp2 bit3-0 = 消灯する桁番号 (1,3,5) ' *********************************** ' Segcver: Ltemp1 = Temp2 And &H0F 'Temp4 = 消灯する桁番号。(01,03,05) Segdt(ltemp1) = 0 '消灯。 Segdt(ltemp1 + 1) = 0 Return ' ' ****************************************** (Temp1 = バイナリ・データ) ' * 時間 12/24時間制 識別表示 サブルーチン * (Temp2 bit3-0 = 書き込む桁番号 (3,5) ' ****************************************** (Temp2 Bit7 = (1)でゼロサプレス制御。 ' Hourcv: If Mf1224h = 1 Then Goto Hourcv1 'If 12時間制? Then ' Gosub Segcvw '24時間制表示。 Return ' ' Hourcv1: '12時間制表示。 Ltemp3 = Temp1 '24時間制時刻を12時間制に変換。 If Temp1 = 0 Then Temp1 = 24 If Temp1 > 12 Then Temp1 = Temp1 - 12 Gosub Segcvw ' If Ltemp3 < 12 Then 'If AM or PM? Set Segdt(6).1 '[AM] (セグメントf)を点灯。 Else Set Segdt(6).3 '[PM] (セグメントe)を点灯。 End If Temp1 = Ltemp3 Return ' ' ******************************************************************* ' * [桁] 表示バッファーのデータを[TB62705CP]に送信する サブルーチン * ' ******************************************************************* ' Tx62705: For Ltemp1 = 0 To 5 Ltemp2 = Segdt(ltemp1 + 1) If Dpdispf.ltemp1 = 1 Then Set Ltemp2.0 Shiftout Portb.2 , Portb.0 , Ltemp2 , 1 '6データを送信する。 Next Ltemp1 ' Set Portb.1 '[/LATCH]端子を制御。 Reset Portb.1 Return ' ' ******************************** ' * EEPROM 書き込み サブルーチン * ' ******************************** ' Eepwrs: Writeeeprom Mf1224h , 1 Writeeeprom Mf82ds , 2 Return ' ' ********************************* ' * 10msec 割り込み 処理ルーチン * ' ********************************* ' T10msint: T10msflag = 1 '10ms 経過フラグをセット。 T1scun = T1scun + 1 '1秒カウンターを更新。 If T1scun > 99 Then 'If 1秒 経過したか? Then T1scun = 0 T1sflag = 1 '1秒 経過フラグをセット。 End If Return ' End