【发布时间】:2020-12-14 20:22:25
【问题描述】:
我试图在 MDA-8086 套件上显示 7 段 LED,但我一直在计算各个数字的十六进制值。我有代码,但我不明白它是如何工作的。 例如0用十六进制值表示 0xc0 [我猜]。 我想知道,这里的值是如何计算的?
7段LED显示屏的C代码:
#include"mde8086.h"
int data[11] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x00 };
void wait(long del)
{
while( del-- );
}
void main(void)
{
int *data1;
/* 8255 -1 Initialization */
outportb( PPI1_CR, 0x80 );
outportb( PPI1_B, 0xf0 );
outportb( PPI1_C, 0x00 );
//main loop
do {
data1 = data;
while( *data1 != 0x00 )
{
outportb( PPI1_A, *data1 );
wait(30000);
data1++;
}
} while(1);
}
输出是从这里生成的:
【问题讨论】:
-
stackoverflow.com/questions/2670639/… 检查这个 stackoverflow 问题。另请查看stackoverflow.com/questions/8186965/…
-
我的第一个想法是
1仅通过点亮 2 个段来显示,所以我们可以看出它必须是0xc0(它的二进制表示中只设置了 2 位,所以段 b = 0x80,c = 0x40 或反之亦然)。所以循环这个数组从 1 计数到 9,然后换行到 0,我猜。但是,如果您查看其余部分,那就行不通了。还有其他模式只设置了1个或几个位,所以一定是掩码被反转,清除位点亮相应的段?然后将段 G 和小数点不亮可能是前 2 位。
标签: c x86-16 seven-segment-display