再请教下
dim a as worddim b(4) as byte
a=9527
b(1)=a/1000
b(2)=a mod 1000
b(2)=b(2)/100
b(3)=a mod 100
b(3)=b(3)/10
b(4)=a mod 10
请问结果会是多少啊 其实我就是想把9527 拆开 为四个单独的数字 9,5,2,7 用来数码管显示
请问怎么实现:funk: Dim A As Integer
Dim B(4) As Integer
A = 9527
B(1) = A / 1000
B(2) = A Mod 1000
B(2) = B(2) / 100
B(3) = A Mod 100
B(3) = B(3) / 10
B(4) = A Mod 10
End
原来是这样的 T0_interrupt: 'TIMER0中断执行程序,依次显示数码管数字
Ledv = Ledv And &HF0 '置数码管公共端V1~V4为低电平
Incr Led_count '计数变量加1
Led_v = Led_count Mod 4 '计算数码管显示位次(0~3)
Led_disp = 10 ^ Led_v '计算拟显示的数字位数(个十百千)
Led_disp = Digital / Led_disp '将拟显示的数字位移到个位
Led_disp = Led_disp Mod 10 '取余得到某数字位的单独数字
Leds = Lookup(led_disp , Digital_code) '读取数码管编码赋值给各段
Led_v = 2 ^ Led_v '计算公共端对应BIT位(1,2,4,8)
Ledv = Ledv + Led_v '公共端赋值显示某位
Return
BASCOM-AVR初级入门教程—第三讲 玩转LED
http://avr.cnta.net/forum.php?mod=viewthread&tid=268 本帖最后由 赵彬 于 2013-5-26 13:25 编辑
A = 9527
B(1) = A / 1000
b(1)=b(1)+1
B(2) = B(2) mod 1000
B(2) = B(2) / 100
b(2)=b(2)+1
B(3) = A Mod 100
b(3)=b(3)/10
b(3)=b(3)+1
B(4) = A Mod 10
b(4)=b(4)+1
End
在下面的显示代码中,0对应的是1 所以用你上面的方法算出来的数要+1
如果按你最上面的代码来显示的话应该是每位都减1 了
Daima:
Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110
Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01100111
本帖最后由 donny_y 于 2013-5-27 12:17 编辑
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer0 = Timer , Prescale = 8 '定义T0为定时器,8分频
On Timer0 T0_interrupt '定时器T0溢出指向T0_interrupt中断程序
Config Portd = Output 'PORTD口定义为输出,控制各段
Config Portc = Output 'PORTC口定义为输出,控制公共端
Leds Alias Portd 'PORTD口别名定义为Leds
Ledv Alias Portc 'PORTC口别名定义为Ledv
Dim Digital As Integer '定义变量
Dim Led_code(10)as Byte
Dim Led_seg(4)as Byte
Dim Led_disp(4) As Integer
Dim Temp As Byte
Dim I As Byte
Enable Interrupts '全局中断使能
Enable Timer0 '定时器中断使能
Restore Digital_code
For I = 1 To 10
Read Led_code(i)
Next
Restore Digtal_seg
For I = 1 To 4
Read Led_seg(i)
Next
Digital = 1
Do
Led_disp(1) = Digital / 1000
Led_disp(2) = Digital Mod 1000
Led_disp(2) = Led_disp(2) / 100
Led_disp(3) = Digital Mod 100
Led_disp(3) = Led_disp(3) / 10
Led_disp(4) = Digital Mod 10
Idle '单片机进入空闲状态
Loop
End
T0_interrupt: 'Timer0中断执行程序
Digital = Digital + 1
If Digital > 9999 Then Digital = 0
I = I + 1
If I < 5 Then
Ledv = &H00
Leds = &HFF
Leds = Lookup(led_disp(i) , Digital_code)
Ledv = Led_seg(i)
Else
I = 0
End If
Return
Digital_code:
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000
Digtal_seg:
Data &B00001000 , &B00000100 , &B00000010 , &B00000001 $regfile = "m8def.dat"
$crystal = 1000000
Config Timer0 = Timer , Prescale = 8 '定义T0为定时器,8分频
On Timer0 T0_interrupt '定时器T0溢出指向T0_interrupt中断程序
Config Portd = Output 'PORTD口定义为输出,控制各段
Config Portc = Output 'PORTC口定义为输出,控制公共端
Leds Alias Portd 'PORTD口别名定义为Leds
Ledv Alias Portc 'PORTC口别名定义为Ledv
Dim Digital As Integer '定义变量
Dim Led_code(10)as Byte
Dim Led_seg(4)as Byte
Dim Led_disp(4) As Integer
Dim Temp As Byte
Dim I As Byte
Enable Interrupts '全局中断使能
Enable Timer0 '定时器中断使能
Restore Digital_code
For I = 1 To 10
Read Led_code(i)
Next
Restore Digtal_seg
For I = 1 To 4
Read Led_seg(i)
Next
Digital = 9527
Do
Led_disp(1) = Digital / 1000
Led_disp(2) = Digital Mod 1000
Led_disp(2) = Led_disp(2) / 100
Led_disp(3) = Digital Mod 100
Led_disp(3) = Led_disp(3) / 10
Led_disp(4) = Digital Mod 10
Idle '单片机进入空闲状态
Loop
End
T0_interrupt: 'Timer0中断执行程序
'Digital = Digital + 1
'If Digital > 9999 Then Digital = 0
I = I + 1
If I < 5 Then
Ledv = &H00
Leds = &HFF
Leds = Lookup(led_disp(i) , Digital_code)
Ledv = Led_seg(i)
Else
I = 0
End If
Return
Digital_code:
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000
Digtal_seg:
Data &B00001000 , &B00000100 , &B00000010 , &B00000001 仿真结果;P
页:
[1]