Reset Taozhen_bz
Reset Led1
Set Led2
Js = 0
D = 2 '1
Begin:
Do
If Taozhen_bz = 0 Then '如果调整标志为0
Bitwait Key1 , Reset '等待设定键按下
Waitms 20 '延时消抖
Bitwait Key1 , Reset '再次判别
Gosub Spk_ds
Set Taozhen_bz '调整标志置1
Set Led1 '调整灯亮,工作灯灭
Reset Led2
Bitwait Key1 , Set '等待按键释放
Waitms 20
Bitwait Key1 , Set '确定按键释放
Else
Gosub Rd_key
If K <> 0 Then
K3 = K
Waitms 20
Gosub Rd_key
If K = K3 Then
Gosub Spk_ds
Select Case K
Case 1 'S3键处理
If A2 = 1 Then
D = 2
Else
D = D + 1
If D >= 4 Then D = 4
End If
Case 4 'S2键处理
If A2 = 1 Then
D = 2
Else
If D >= 4 Then D = 4
D = D - 1
If D = 1 Then D = 2
End If
Case 8 'S1键处理
Reset Taozhen_bz '清除调整标志,返回工作状态
Reset Led1 '关闭设定灯,开工作灯
Set Led2
Gosub Pwm_js
Pwm1a = A7
Writeeeprom A1 , 1 '数据存入EEPROM
Writeeeprom A2 , 2
Writeeeprom A3 , 3
Writeeeprom A4 , 4
Writeeeprom A5 , 5
Case 32 'S5键处理,数字加1
Select Case D
Case 1
Incr A1
If A1 >= 11 Then A1 = 1
Case 2
' Incr A2
If A2 = 1 Then
A2 = 10
A3 = 2
A4 = 5
Else
A2 = 1
A3 = 10
A4 = 10
End If
Case 3
Incr A3
If A3 >= 10 Then
A3 = 2
A4 = 5
End If
Case 4
Incr A4
If A3 = 2 Then
If A4 >= 10 Then A4 = 5
Else
If A4 >= 11 Then A4 = 1
End If
End Select
Case 128 'S4键处理,数字减1
Select Case D
Case 1
If A1 >= 11 Then A1 = 9
A1 = A1 - 1
If A1 = 0 Then A1 = 10
Case 2
If A2 = 1 Then
A2 = 10
A3 = 2
A4 = 5
Else
A2 = 1
A3 = 10
A4 = 10
End If
Case 3
If A3 >= 11 Then A3 = 9
A3 = A3 - 1
If A3 = 1 Then A3 = 9
If A3 = 2 Then A4 = 5
Case 4
If A4 >= 11 Then A4 = 9
A4 = A4 - 1
If A3 = 2 Then
If A4 <= 4 Then A4 = 9
Else
If A4 = 0 Then A4 = 10
End If
End Select
End Select
S0 = C(a1)
S1 = C(a2)
S2 = C(a3)
S3 = C(a4)
' Gosub Pwm_js
While K = K3 '等待按键释放
Gosub Rd_key
Wend
' Pwm1a = A7
End If
End If
End If
Loop
Spk_ds: '喇叭发短声
Set Spk
Waitms 100
Reset Spk
Return
Pwm_js:
If A2 = 1 Then '计算PWM值
A7 = &HFF
Else
A5 = A4
If A5 = 10 Then A5 = 0
A5 = A5 * 17
A5 = A5 \ 10
A6 = A3
If A6 = 10 Then A6 = 0
A6 = A6 * 17
A6 = A6 \ 10
Shift A6 , Left , 4
A7 = A6 Or A5
End If
Return
Rd_key: '读键子程序
K1 = Pind Or &B11110000 '读入D口数据
K1 = Not K1
K2 = Pina Or &B11110000
K2 = Not K2
Shift K2 , Left , 4
K = K1 Or K2
Return
Tim0_isr: 'LED数码管扫描显示
Load Timer0 , 125 '定时器初值
Reset Portc.4
Reset Portc.5
Reset Portc.6
Reset Portc.7
Select Case E
Case 0
Portb = S0 ': Set Portc.4
Case 1
Portb = S1
If Taozhen_bz = 1 Then
Set Portc.5
Else
If A2 = 10 Then
Reset Portc.5
Else
Set Portc.5
End If
End If
Case 2
Portb = S2 : Set Portc.6
Case 3
Portb = S3 : Set Portc.7
End Select
E = E + 1
If E = 4 Then E = 0
Incr F
If F = 125 Then
F = 0
Led1 = Not Led1
End If
' End If
Reset Watchdog
Return
Tim2_isr: '闪烁控制
Load Timer2 , 100
If Js >= 5 Then
Js = 0
If Taozhen_bz = 1 Then
Sansuo_bz = Not Sansuo_bz '如果调整标志为1,闪烁标志取反
If Sansuo_bz = 1 Then
Select Case D
Case 1
S0 = &HFF
Case 2
S1 = &HFF
Case 3
S2 = &HFF
Case 4
S3 = &HFF
End Select
Else
Select Case D
Case 1
S0 = C(a1)
Case 2
S1 = C(a2)
Case 3
S2 = C(a3)
Case 4
S3 = C(a4)
End Select
End If
Else
Reset Sansuo_bz '否则闪烁标志清0
End If
Else
Incr Js
End If
Return