请问51单片机中怎么用汇编编写,我每按一次中断先输入一个数字在8位数码管 例如是显示1,然后我第二次按中
断输入第二个数字例如是5,那怎么将第一个数字放到数码管的第一段,第二个数字放到第二个数码管,让后第三个数字移到第三位,而且数字不消失,就像我们打手机号码那样,请问怎么做呢...
断输入第二个数字 例如是5,那怎么将第一个数字放到数码管的第一段,第二个数字放到第二个数码管,让后第三个数字移到第三位,而且数字不消失,就像我们打手机号码那样,请问怎么做呢??
展开
3个回答
展开全部
先说,没写过这么鸡肋的程序。想了下,这样应该可以实现。
设一个标志位,标志位的主要作用是确定数码管有几位显示,意思就是确定按了几次。按一次,标志位是0(当然,0不是唯一的第一位,9也没问题),最低位显示。按八次,标志位为7,八位数码管都显示。显示采用动态扫描,根据标志位的值,先扫描显示最高位或者最低位应该都可以。保留标志位的按键产生值,显示的时候对其加一或者减一,以确定按键值显示在哪一位。
写程序,思路总体布局最重要。其中的细节慢慢想吧,一步步写,最后,你会发现,莫名其妙就写完了。
设一个标志位,标志位的主要作用是确定数码管有几位显示,意思就是确定按了几次。按一次,标志位是0(当然,0不是唯一的第一位,9也没问题),最低位显示。按八次,标志位为7,八位数码管都显示。显示采用动态扫描,根据标志位的值,先扫描显示最高位或者最低位应该都可以。保留标志位的按键产生值,显示的时候对其加一或者减一,以确定按键值显示在哪一位。
写程序,思路总体布局最重要。其中的细节慢慢想吧,一步步写,最后,你会发现,莫名其妙就写完了。
展开全部
你这程序,无非就是控制位码和段码
段码就不说了吧,就是个查表,位码,就是你输到第几个数字,就只显示到那一位
其余后边的都不亮
假设数码管位动态扫描方式,位码是P2控制,而且是输出1有效,第一位是在P2.0口
则:
R1中存位控制码,
BITNB里边是你存进去的现在显示到第几位了
当你输到第几位的
BITNB EQU 30H
MOV R1, #01H
MOV R0, BITNB
LOOP:
MOV A, R1
MOV P2,A
RL A
MOV R1,A
加延时(有效位数码管显示的时间,时间长短影响是否闪烁)
DJNZ R0,LOOP
MOV R1, #01H
MOV R0, BITNB
这样,如果你只显示到第二位
他就会一直刷新显示第一,第二位,后面的没输出,也就是不显示
同理,如果是第6位,就刷新显示前6位,后两位不显示
段显示
BITDATA里边存放要显示几,如果要显示0,就给他赋值0,是9,就赋值9
BITDATA EQU 31H
MOV DPTR #TABLE
MOV A, BITDATA
MOVC A, @A+DPTR 查表,将要显示数字的段码值送给A
MOV P.., A
TABLE:
0的段码 1的段码 .... 9的段码
不知道这样回答,是否清楚
段码就不说了吧,就是个查表,位码,就是你输到第几个数字,就只显示到那一位
其余后边的都不亮
假设数码管位动态扫描方式,位码是P2控制,而且是输出1有效,第一位是在P2.0口
则:
R1中存位控制码,
BITNB里边是你存进去的现在显示到第几位了
当你输到第几位的
BITNB EQU 30H
MOV R1, #01H
MOV R0, BITNB
LOOP:
MOV A, R1
MOV P2,A
RL A
MOV R1,A
加延时(有效位数码管显示的时间,时间长短影响是否闪烁)
DJNZ R0,LOOP
MOV R1, #01H
MOV R0, BITNB
这样,如果你只显示到第二位
他就会一直刷新显示第一,第二位,后面的没输出,也就是不显示
同理,如果是第6位,就刷新显示前6位,后两位不显示
段显示
BITDATA里边存放要显示几,如果要显示0,就给他赋值0,是9,就赋值9
BITDATA EQU 31H
MOV DPTR #TABLE
MOV A, BITDATA
MOVC A, @A+DPTR 查表,将要显示数字的段码值送给A
MOV P.., A
TABLE:
0的段码 1的段码 .... 9的段码
不知道这样回答,是否清楚
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将输入到数码管显示缓存中的数字循环"移位" 假如你是五个数码管,应该有五个缓存与之相对应,每次输入时始终输入到第五个缓存中,然后将缓存中的数循环移位,即:第五个缓存中的数入栈,第四个缓存中的数移到第五个缓存中,第三个移到第四个缓存中,依此类推,最后将压入栈中的第五个缓存中的数弹出到第一个缓存中 表述的不是太清楚,希望你能看懂!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询