' ' **************************************************** ' * * ' * ATmega88 + VFD LD8035E デジタル時計 プログラム * ' * * ' * AVR is using ATmega88 * ' * Basic Compiler is BASCOM-AVR * ' * Copyright By O-Family 2008. 7. 1 * ' **************************************************** ' ' Ver 1.01 初回公開バージョン ' ' $regfile = "m88def.dat" $crystal = 8000000 $eepleave ' Const Prgver = &H0101 'プログラム・バージョン。 ' ' Disp_digit Alias Portb '表示器 [桁]制御信号 接続ポート。 Disp_segment Alias Portd '表示器 セグメント 接続ポート。 Disp_dp Alias Portc.0 '表示器 D.P.(小数点) 接続ポート。 Sw_pt Alias Portc 'スイッチ 接続ポート。 Sw_pti Alias Pinc 'スイッチ 入力ポート。 Sw_bit Alias &B00111000 'スイッチ接続ポートのビット位置。 Sw_abit Alias &B00100000 'スイッチ[A]接続ポートのビット位置。 Sw_bbit Alias &B00010000 'スイッチ[B]接続ポートのビット位置。 Sw_cbit Alias &B00001000 'スイッチ[C]接続ポートのビット位置。 Sw_ab_bit Alias &B00110000 'スイッチ[A+B]接続ポートのビット位置。 Sw_ac_bit Alias &B00101000 'スイッチ[A+C]接続ポートのビット位置。 Pt_unuse Alias &B00000110 '未使用ポートのビット位置(プルアップ用) ' ' Dim Segdt(6) As Byte 'セグメント・データ バッファ。 Dim Segcvt(10) As Byte 'セグメント・データ 変換テーブル。 ' Dim Digno As Byte 'DMA 現在の表示桁番号。 Dim Dmadspc As Byte 'DMA 表示制御カウンター。 Dim Digsup As Byte 'DMA 表示桁サプレスフラグ。(0=選択桁を消灯) Dim Digdpd As Byte 'DMA D.P 表示桁フラグ。(1=選択桁にD.Pを表示) Dim Digptmp As Byte 'DMA [桁]制御信号ポートのテンポラリ。 ' Dim Tempsec As Byte '[秒]更新用テンポラリ。 Dim Mf1224h As Byte 'モード・フラグ 0=24時間制 / 1=12時間制 Dim Mf82ds As Byte 'モード・フラグ 0=通常表示 / 1=8秒時間-2秒日付表示 Dim Mf6d4d As Byte 'モード・フラグ 0=4桁表示 / 1=6桁表示 Dim Dpblkt As Byte 'D.P点滅 500mSタイマー。 Dim Keycun As Byte 'キー入力チェック用タイマーカウンター。 Dim Keyflg As Byte 'キー入力検出フラグ。 Dim Keydat As Byte 'キー入力データ。 Dim Keytemp 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 ' ' ' ' * ポートの初期設定 * ' Config Sw_pt = Input 'スイッチ接続ポートを入力に設定。 Sw_pt = Sw_bit Or Pt_unuse 'スイッチ接続ポートと未使用ポートをプルアップ。 Config Disp_dp = Output '表示器のD.P.(小数点)接続ポートを出力に設定。 ' Config Disp_digit = Output '表示器の桁制御信号接続ポートを出力に設定。 Config Disp_segment = Output '表示器のセグメント接続ポートを出力に設定。 ' ' * 時計用のライブラリを組み込む * ' Config Clock = Soft '時計(タイマー)をSoftモードに設定。 Config Date = Ymd , Separator = / '日付の表現方法(形式)を設定。 ' ' * タイマーを設定 * ' Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1 'Timer0 = 7,812Hz Ocr0a = 77 '10mS タイマーを設定。 ' Config Timer1 = Timer , Prescale = 1 , Clear Timer = 1 'Timer1 = 8,000,000Hz Compare1a = 999 'DMA 割り込みを8,000Hz(125uS)に設定。 On Compare1a Dmaint 'DMA 割り込み処理ルーチン。 Enable Compare1a 'Timer1A 比較一致割り込みを許可。 ' ' * 変数の初期値設定 * ' Segcvt(1) = &HB7 '"0" セグメント変換テーブルに、データをセット。 Segcvt(2) = &H21 '"1" Segcvt(3) = &HE6 '"2" Segcvt(4) = &HE3 '"3" Segcvt(5) = &H79 '"4" Segcvt(6) = &HD3 '"5" Segcvt(7) = &HD7 '"6" Segcvt(8) = &HA1 '"7" Segcvt(9) = &HF7 '"8" Segcvt(10) = &HF3 '"9" ' Digno = 2 'DMA 現在の表示桁番号を2から開始。 Tempsec = 99 '[秒]更新用テンポラリに、ダミー値を格納。 _year = 8 _month = 1 _day = 1 ' ' ****************************** ' * EEPROM 保存データ 読み込み * ' ****************************** ' Readeeprom Mf1224h , 1 'EEPROM (1) 12/24時間制 表示フラグ。 Readeeprom Mf82ds , 2 'EEPROM (2) 8秒時間-2秒日付 表示フラグ。 Readeeprom Mf6d4d , 3 'EEPROM (3) 4桁/6桁 表示フラグ。 ' If Mf1224h > 1 Then 'If EEPROMが初期状態? Then Mf1224h = 0 '0=24時間制 / 1=12時間制 Mf82ds = 0 '0=通常表示 / 1=8秒時間-2秒日付表示 Mf6d4d = 1 '0=4桁表示 / 1=6桁表示 Gosub Eepwrs 'EEPROMに書き込み。 End If ' ' Enable Interrupts '割り込みを許可。 ' ' ******************************** ' * プログラム・バージョンを表示 * ' ******************************** ' Prgvds: Digdpd = &B00010000 'D.Pを点灯。 Temp3 = High(prgver) 'プログラム・バージョンの上位を表示。 Temp2 = &H05 Gosub Segcvwp Temp3 = Low(prgver) 'プログラム・バージョンの下位を表示。 Temp2 = &H03 Gosub Segcvwp ' Temp5 = 0 '表示を点滅してキー入力待ち。 Prgvds3: Temp6 = 20 Prgvds1: If Tifr0.ocf0a = 0 Then Goto Prgvds1 'If 10mS経過したか? Else Set Tifr0.ocf0a 'Timer0 比較A一致フラグをリセット。 ' Gosub Keyin If Keyflg <> 0 Then Goto Prgvds2 'If キー入力有り? Then Temp6 = Temp6 - 1 If Temp6 <> 0 Then Goto Prgvds1 'If 点滅タイマー カウント終了? Else If Temp5 = 0 Then '点滅用 F/Fを反転。 Temp5 = 1 Digsup = &B00000000 '指定[桁]を消灯。 Else Temp5 = 0 Digsup = &B00111100 '指定[桁]を点灯。 End If Goto Prgvds3 ' Prgvds2: Gosub Keyoff 'キーが離されるまで待つ。 ' ' ******************* ' * メイン ルーチン * ' ******************* ' Main: Gosub T10msec '10mSタイマー処理 & キー入力チェック。 Gosub Timdisp '時刻表示 処理。 Goto Main ' End ' ' ************************************************ ' * 10mSタイマー処理 & キー入力チェック ルーチン * ' ************************************************ ' T10msec: If Tifr0.ocf0a = 0 Then Return 'If 10mS経過したか? Else Set Tifr0.ocf0a 'Timer0 比較A一致フラグをリセット。 ' If Dpblkt = 0 Then Goto Keyin 'If D.P点滅タイマー カウント終了? Then Dpblkt = Dpblkt - 1 If Dpblkt <> 0 Then Goto Keyin 'If D.P点灯から500mS経過? Else Digdpd = 0 'D.Pを消灯。 ' ' ************************* ' * キー入力 サブルーチン * (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: Keydat = Not Sw_pti 'キー接続ポートからデータを入力。 Keydat = Keydat And Sw_bit 'キー接続ビットを抽出。 Return ' ' *************************************** ' * キーが離されるまで待つ サブルーチン * ' *************************************** ' Keyoff: Gosub Keyport 'キー接続ポートからデータを入力。 If Keydat <> 0 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 Tempsec = _sec Then Return 'If [秒]が更新されたか? Else Timdsp02: Tempsec = _sec '[秒]更新用テンポラリに、現在の[秒]を保存。 ' If Mf82ds = 1 Then Goto Timdsp03 'If 8秒時間-2秒日付表示モード? Then Timdsp04: If Mf6d4d = 0 Then 'If 表示桁数が4桁? Then Digdpd = &B00010000 '時桁のD.Pを点灯。 Else Digdpd = &B00010100 '時・分桁のD.Pを点灯。 End If Dpblkt = 50 'D.P点滅 500mSタイマーセット。 ' Temp1 = _sec '[秒]を表示。 Temp2 = &H01 '桁を1,2にセット。 Gosub Segcvw Temp1 = _min '[分]を表示。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = _hour '[時]を表示。 Temp2 = &H85 '桁を5,6にセット。 Gosub Hourcv Return ' ' 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 = Sw_abit Then Goto Timdsp11 'If [A]キーが押された? Then If Keydat = Sw_bbit Then Goto Timdsp21 'If [B]キーが押された? Then If Keydat = Sw_cbit Then Goto Timdsp31 'If [C]キーが押された? Then If Keydat = Sw_ac_bit Then Goto Timdsp41 'If [A+C]キーが押された? Then If Keydat = Sw_ab_bit Then Goto Timdsp51 'If [A+B]キーが押された? Then Return ' ' Timdsp11: '[A]キーが押された。 Digsup = Digsup And &B00111100 '[桁]1,2を消灯。 Digdpd = 0 'D.Pを消灯。 Temp1 = _day '[日]を表示。 Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Temp1 = _month '[月]を表示。 Temp2 = &H85 '桁を5,6にセット。 Gosub Segcvw Return ' ' Timdsp21: '[B]キーが押された。 Digsup = Digsup And &B00111100 '[桁]1,2を消灯。 Digdpd = 0 'D.Pを消灯。 If Mf6d4d = 0 Then Goto Timdsp22 'If 4桁表示? Then Temp1 = _year '[年]下位を表示。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = 20 '[年]上位を表示。 Temp2 = &H05 '桁を5,6にセット。 Gosub Segcvw Return ' Timdsp22: '4桁表示で[B]キーが押された。 Temp1 = _sec '[秒]を表示。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = _min '[分]を表示。 Temp2 = &H05 '桁を5,6にセット。 Gosub Segcvw Return ' ' Timdsp31: '[C]キーが押された Toggle Mf1224h.0 '12/24時間制モード・フラグを反転。 Gosub Eepwrs 'EEPROMに書き込み。 Goto Timdsp02 ' ' Timdsp41: '[A+C]キーが押された Toggle Mf82ds.0 '8秒時間-2秒日付表示モード・フラグを反転。 Gosub Eepwrs 'EEPROMに書き込み。 Goto Timdsp02 ' ' Timdsp51: '[A+B]キーが押された。 Waitms 10 '10mSの待ち時間。 Gosub Keyin If Keydat <> Sw_ab_bit Then Goto Timdsp02 'If [A+B]キーが押されている? Else If Keyflg = 0 Then Goto Timdsp51 'If 1秒以上押された? Else ' ' ************************* ' * 時刻設定 処理ルーチン * ' ************************* ' Timset: Disable Timer2 '1秒割り込みを禁止。 Digsup = Digsup And &B00111100 '[桁]1,2を消灯。 Digdpd = 0 'D.Pを消灯。 ' Temp1 = 64 '6桁/4桁 表示選択。 Temp2 = &H05 '桁を5,6にセット。 Gosub Segcvw Temp1 = Mf6d4d 'Temp1 = 設定するデータ値。 Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Gosub Keyoff 'キーが離されるまで待つ。 ' Timset11: Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Temp2 = 0 'Temp2 = 設定値の下限。 Temp3 = 1 'Temp3 = 設定値の上限。 Temp4 = &B00110000 'Temp4 = [桁]の消灯データ。(ビット) Gosub Tmskey If Keydat <> Sw_abit Then Goto Timset11 'If [A]キーが押された? Else Mf6d4d = Temp1 Gosub Eepwrs 'EEPROMに書き込み。 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = 20 '[年]設定。 Temp2 = &H05 '桁を5,6にセット。 Gosub Segcvw Temp1 = _year 'Temp1 = 設定するデータ値。 ' Timset21: Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp2 = 0 'Temp2 = 設定値の下限。 Temp3 = 99 'Temp3 = 設定値の上限。 Temp4 = &B00110000 'Temp4 = [桁]の消灯データ。(ビット) Gosub Tmskey If Keydat <> Sw_abit Then Goto Timset21 'If [A]キーが押された? Else _year = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _day '[月]設定。 Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Temp1 = _month 'Temp1 = 設定するデータ値。 ' Timset31: Temp2 = &H85 '桁を5,6にセット。 Gosub Segcvw Temp2 = 1 'Temp2 = 設定値の下限。 Temp3 = 12 'Temp3 = 設定値の上限。 Temp4 = Digsup And &B00001100 'Temp4 = [桁]の消灯データ。(ビット) Gosub Tmskey If Keydat <> Sw_abit Then Goto Timset31 'If [A]キーが押された? Else _month = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _month '[日]設定。 Temp2 = &H85 '桁を5,6にセット。 Gosub Segcvw Temp1 = _day 'Temp1 = 設定するデータ値。 ' Timset41: Temp2 = &H83 '桁を3,4にセット。 Gosub Segcvw Temp2 = 1 'Temp2 = 設定値の下限。 Temp3 = 31 'Temp3 = 設定値の上限。 Temp4 = Digsup And &B00110000 'Temp4 = [桁]の消灯データ。(ビット) Gosub Tmskey If Keydat <> Sw_abit Then Goto Timset41 'If [A]キーが押された? Else _day = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _min '[時]設定。 Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp1 = _hour 'Temp1 = 設定するデータ値。 ' Timset51: Temp2 = &H85 '桁を5,6にセット。 Gosub Hourcv Temp2 = 0 'Temp2 = 設定値の下限。 Temp3 = 23 'Temp3 = 設定値の上限。 Temp4 = Digsup And &B00001100 'Temp4 = [桁]の消灯データ。(ビット) Gosub Tmskey If Keydat <> Sw_abit Then Goto Timset51 'If [A]キーが押された? Else _hour = Temp1 Gosub Keyoff 'キーが離されるまで待つ。 ' ' Temp1 = _hour '[分]設定。 Temp2 = &H85 '桁を5,6にセット。 Gosub Hourcv Temp1 = _min 'Temp1 = 設定するデータ値。 ' Timset61: Temp2 = &H03 '桁を3,4にセット。 Gosub Segcvw Temp2 = 0 'Temp2 = 設定値の下限。 Temp3 = 59 'Temp3 = 設定値の上限。 Temp4 = Digsup And &B00110000 'Temp4 = [桁]の消灯データ。(ビット) Gosub Tmskey If Keydat <> Sw_abit Then Goto Timset61 'If [A]キーが押された? Else _min = Temp1 _sec = 0 '[秒]をリセット。 Enable Timer2 '1秒割り込みを許可。 Goto Timdsp02 ' ' ************************************ (Temp1 = 設定するデータ値) ' * 時刻設定用 キー入力 サブルーチン * (Temp2 = 設定値の下限) ' ************************************ (Temp3 = 設定値の上限) ' (Temp4 = [桁]の消灯データ。(ビット)) Tmskey: Temp5 = 0 '点滅用 F/F。 Temp6 = 40 '点滅用タイマー値。 Temp7 = Digsup '現在の[桁]表示状態を保管。 Tmskey1: If Tifr0.ocf0a = 0 Then Goto Tmskey1 'If 10mS経過したか? Else Set Tifr0.ocf0a 'Timer0 比較A一致フラグをリセット。 ' Gosub Keyin If Keyflg <> 0 Then Goto Tmskey2 'If キー入力有り? Then Temp6 = Temp6 - 1 If Temp6 <> 0 Then Goto Tmskey1 'If 点滅タイマー カウント終了? Else If Temp5 = 0 Then '点滅用 F/Fを反転。 Temp5 = 1 Temp6 = 20 '点滅用タイマー値。 Digsup = Temp4 '指定[桁]を消灯。 Else Temp5 = 0 Temp6 = 40 '点滅用タイマー値。 Digsup = Temp7 '指定[桁]を点灯。 End If Goto Tmskey1 ' ' Tmskey2: Keyflg = 0 'キー入力フラグをリセット。 If Keydat = Sw_abit Then Return 'If [A]キーが押された? Then If Keydat = Sw_bbit Then Goto Tmskey3 'If [B]キーが押された? Then If Keydat = Sw_cbit Then Goto Tmskey4 'If [C]キーが押された? Then Goto Tmskey1 ' ' Tmskey3: '設定値を加算。 Temp1 = Temp1 + 1 If Temp1 > Temp3 Then Temp1 = Temp2 'If 設定値が上限を超えたか? Then Return ' Tmskey4: '設定値を減算。 If Temp1 = Temp2 Then 'If 設定値が下限を超えるか? Then Temp1 = Temp3 Else Temp1 = Temp1 - 1 End If Return ' ' ************************************************* ' * バイナリ値を2桁のセグメント・データに変換して * (Temp1 = バイナリ・データ) ' * DMAバッファーに書き込むサブルーチン * (Temp2 bit3-0 = 書き込む桁番号 (1,3,5) ' ************************************************* (Temp2 Bit7 = (1)でゼロサプレス制御。 ' Segcvw: Temp3 = Makebcd(temp1) 'バイナリ値を、BCD(Binary coded decimal)値に変換。 Segcvwp: Temp4 = Temp2 And &H0F 'Temp4 = 書き込む桁番号。(01,03,05) Temp5 = Temp3 And &H0F 'Temp5 = BCD値の下位桁。 Temp5 = Temp5 + 1 '配列用に1を足す。 Segdt(temp4) = Segcvt(temp5) 'DMAバッファーに下位桁の値を書き込む。 Temp4 = Temp4 - 1 Set Digsup.temp4 '下位桁の表示桁サプレスフラグを(表示)にセット。 ' Temp4 = Temp4 + 2 '書き込む桁番号を次の位置へ。 Temp5 = Temp3 And &HF0 'Temp5 = BCD値の上位桁。 Shift Temp5 , Right , 4 If Temp2.7 = 1 Then Goto Segcvw1 'If ゼロサプレスが有効? Then Segcvw2: Temp5 = Temp5 + 1 '配列用に1を足す。 Segdt(temp4) = Segcvt(temp5) 'DMAバッファーに上位桁の値を書き込む。 Temp4 = Temp4 - 1 Set Digsup.temp4 '上位桁の表示桁サプレスフラグを(表示)にセット。 Return ' ' Segcvw1: 'ゼロサプレス処理。 If Temp5 <> 0 Then Goto Segcvw2 'If 上位桁の値が0? Else Temp4 = Temp4 - 1 Reset Digsup.temp4 '上位桁の表示桁サプレスフラグを(消灯)にセット。 Return ' ' ****************************************** (Temp1 = バイナリ・データ) ' * 時間 12/24時間制 識別表示 サブルーチン * (Temp2 bit3-0 = 書き込む桁番号 (1,3,5) ' ****************************************** (Temp2 Bit7 = (1)でゼロサプレス制御。 ' Hourcv: If Mf1224h = 1 Then Goto Hourcv1 'If 12時間制? Then ' Gosub Segcvw '24時間制表示。 Return ' ' Hourcv1: '12時間制表示。 Segdt(6) = 0 Temp6 = Temp1 '24時間制時刻を12時間制に変換。 If Temp1 = 0 Then Temp1 = 24 If Temp1 > 12 Then Temp1 = Temp1 - 12 Gosub Segcvw ' If Temp6 < 12 Then 'If AM or PM? Set Segdt(6).4 '[AM] セグメントを表示。 Else Set Segdt(6).2 '[PM] セグメントを表示。 End If Set Digsup.5 '6桁目のサプレスフラグを(表示)にセット。 Temp1 = Temp6 Return ' ' ******************************** ' * EEPROM 書き込み サブルーチン * ' ******************************** ' Eepwrs: Writeeeprom Mf1224h , 1 Writeeeprom Mf82ds , 2 Writeeeprom Mf6d4d , 3 Return ' End ' ' ********************************* ' * DMA表示 割り込み 処理ルーチン * ' ********************************* ' Dmaint: Select Case Dmadspc 'DMA表示制御カウンターにより、表示タイミングを作成。 Case 0 : Disp_segment = Segdt(digno + 1) 'セグメント・データをセット。 If Digdpd.digno = 1 Then 'If D.Pを表示? Then Set Disp_dp 'D.Pを表示。 Else Reset Disp_dp 'D.Pを消灯。 End If Case 1 : Set Digptmp.digno '表示桁の制御信号をオンにする。 Disp_digit = Digptmp And Digsup '表示桁サプレス制御。 Case 7 : Digptmp = 0 '表示桁の制御信号をすべてオフにする。 Disp_digit = 0 Digno = Digno + 1 '表示桁を変更。 If Digno > 5 Then 'If 表示桁が最終値? Then If Mf6d4d = 1 Then 'If 表示桁数が6桁? Then Digno = 0 Else '表示桁が4桁。 Digno = 2 End If End If End Select Dmadspc = Dmadspc + 1 'DMA表示制御カウンターを更新。 If Dmadspc > 8 Then Dmadspc = 0 'If カウンターが最終値? Then Return ' End