圣龙扬特-AVR电子

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1026|回复: 8
打印 上一主题 下一主题

再请教下

[复制链接]

2

主题

0

好友

45

积分

新手上路

Rank: 1

UID
398
帖子
13
精华
0
注册时间
2013-5-18
在线时间
3 小时
跳转到指定楼层
楼主
发表于 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

请问结果会是多少啊
回复

使用道具 举报

2

主题

0

好友

45

积分

新手上路

Rank: 1

UID
398
帖子
13
精华
0
注册时间
2013-5-18
在线时间
3 小时
沙发
发表于 2013-5-20 16:19:05 |只看该作者
其实我就是想把9527 拆开 为四个单独的数字 9,5,2,7  用来数码管显示
请问怎么实现
回复

使用道具 举报

2

主题

0

好友

45

积分

新手上路

Rank: 1

UID
398
帖子
13
精华
0
注册时间
2013-5-18
在线时间
3 小时
板凳
发表于 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
原来是这样的
回复

使用道具 举报

67

主题

4

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
2
帖子
343
精华
0
注册时间
2013-2-20
在线时间
366 小时
地板
发表于 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




回复

使用道具 举报

67

主题

4

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
2
帖子
343
精华
0
注册时间
2013-2-20
在线时间
366 小时
5#
发表于 2013-5-20 17:10:55 |只看该作者
BASCOM-AVR初级入门教程—第三讲 玩转LED
http://avr.cnta.net/forum.php?mod=viewthread&tid=268
回复

使用道具 举报

11

主题

0

好友

3245

积分

版主

Rank: 7Rank: 7Rank: 7

UID
45
帖子
31
精华
0
注册时间
2013-2-27
在线时间
29 小时
6#
发表于 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
回复

使用道具 举报

2

主题

0

好友

45

积分

新手上路

Rank: 1

UID
398
帖子
13
精华
0
注册时间
2013-5-18
在线时间
3 小时
7#
发表于 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
回复

使用道具 举报

2

主题

0

好友

45

积分

新手上路

Rank: 1

UID
398
帖子
13
精华
0
注册时间
2013-5-18
在线时间
3 小时
8#
发表于 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
回复

使用道具 举报

2

主题

0

好友

45

积分

新手上路

Rank: 1

UID
398
帖子
13
精华
0
注册时间
2013-5-18
在线时间
3 小时
9#
发表于 2013-5-27 12:26:53 |只看该作者
仿真结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|圣龙扬特-AVR电子 ( 鲁ICP备05022832号 )

GMT+8, 2024-5-18 15:25 , Processed in 0.236162 second(s), 18 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部