donny_y 发表于 2013-5-20 16:07:55

再请教下

dim a as word
dim 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

请问结果会是多少啊

donny_y 发表于 2013-5-20 16:19:05

其实我就是想把9527 拆开 为四个单独的数字 9,5,2,7  用来数码管显示
请问怎么实现:funk:

donny_y 发表于 2013-5-20 16:23:20

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
原来是这样的

箫天 发表于 2013-5-20 17:05:14

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




箫天 发表于 2013-5-20 17:10:55

BASCOM-AVR初级入门教程—第三讲 玩转LED
http://avr.cnta.net/forum.php?mod=viewthread&tid=268

赵彬 发表于 2013-5-26 13:18:10

本帖最后由 赵彬 于 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:13:49

本帖最后由 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

donny_y 发表于 2013-5-27 12:17:30

$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

donny_y 发表于 2013-5-27 12:26:53

仿真结果;P
页: [1]
查看完整版本: 再请教下