实现一个记分牌的体育场,这样它就显示了主场和客场的计数器。每支球队的计数器总是从0到9递增,最初两个计数器都是零(本地0 - 0客场),以增加每支球队的计数器的值一个按钮将用于每一个独立的。
连接中的引脚分配如下所示:
PIN I/O Description
RA0 input GOL_LOCAL, button to increase the home score
RA1 Input GOAL_VISITA, button to increase the visit marker
RB0 Output LOCAL_A, Digit A of the local marker binary code
RB1 Output LOCAL_B, Digit B of the local marker binary code
RB2 Output LOCAL_C, Digit C of the local marker binary code
RB3 Output LOCAL_D, Digit D of the local marker binary code
RB4 Output VISIT_A, Digit A of the binary code of the visit marker
RB5 Output VISIT_B, Digit B of the binary code of the visit marker
RB6 Output VISIT_C, Digit C of the binary code of the visit marker
RB7 Output VISIT_D, Digit D of the binary code of the visit marker
字符串
要使用二进制代码和7447解码器在显示器上显示数字,必须使用下表作为参考。
Decimal D C B A
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
型
向7段显示器发送数据的建议逻辑:
例如,如果您要显示标记“”2“-”VISIT 1“,则必须通过端口B发送以下”“和”“VISIT”的BCD组合
| 访视_D|访视_C|访视_B|访视_A|简体中文|中文(简体)|_B|公司简介|
| --|--|--|--|--|--|--|--|
| 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
为了实现这一点,您可以考虑分别使用2个计数器,一个用于主场进球计数,另一个用于客场进球计数。
局部计数器
| Bit7| Bit6| Bit5| Bit4| Bit3| Bit2| Bit1| Bit0|
| --|--|--|--|--|--|--|--|
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
访问_计数器
| Bit7| Bit6| Bit5| Bit4| Bit3| Bit2| Bit1| Bit0|
| --|--|--|--|--|--|--|--|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
为了获得显示“访视2 -访视1”所需的BCD组合,我们需要将Visit_Counter 4的位置向左移动,这将为Visit_Counter提供给予新的值。
访问_计数器
| Bit7| Bit6| Bit5| Bit4| Bit3| Bit2| Bit1| Bit0|
| --|--|--|--|--|--|--|--|
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
最后,我们可以在变量Local_counter和Visit_counter的值之间执行OR操作,获得必须通过端口B发送的所需结果。
| 访视_D|访视_C|访视_B|访视_A|简体中文|中文(简体)|_B|公司简介|
| --|--|--|--|--|--|--|--|
| 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
x1c 0d1x的数据
我只能做到这一步了。
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0X0C
Counter
ENDC
ORG 0
bsf STATUS,RP0
movlw 0x00
movwf TRISB
bsf TRISA,RA0
bcf STATUS,RP0
clrf Counter
clrf PORTB
Loop
btfsc PORTA,RA0
goto $-.1
btfss PORTA,RA0
goto $-.1
movf Counter,W
call TABLE
movwf PORTB
incf Counter,F
movlw .10
subwf Counter,W
btfsc STATUS,Z
clrf Counter
goto Loop
BOARD
addwf PCL,F
DT 1,2,3,4,5,6,7,8,9,0
END
型
我在Proteus模拟器中尝试了这段代码,但它不能完全生成我需要的东西。我的代码中缺少了什么?
1条答案
按热度按时间bpsygsoo1#
准备好了。我已经在你的代码中做了一些修正,使其符合要求。正如你将在代码中看到的,我使用了两个名为
scoreOfLocalTeam
和scoreOfVisitorTeam
的变量,而不是以前的单个Counter
变量。这样,每个团队的得分都保存在自己的变量中。虽然代码是自我解释的,但下面是它的工作原理:
RA0
和RA1
的任何一个按钮时,相应的球队将获得1分。PORTB
半字节。字符串
PS:代码没有测试,因为它是微控制器特定的。所以我想听听你的反馈,它是否工作。