IdeaMing 发表于 2022-3-8 14:47 好的 谢谢 |
设:X是16进制有符号数,需要转成10进制并在LED7-0(由高到低的8位数码管)上显示。 方案: 1、设置S7-0:8个寄存器(或存储器),存放X的绝对值的BCD码,SS是符号标记(1=负,0=正)。 2、设置Y7-Y0:8个寄存器(或存储器),对应存放S7-0段位译码值(数值依据LED的引脚译码,送屏后直接能显示Sx的对应数字)。 3、设置BF7-0:8个闪动标记位,对应LED7-0是否需要闪动,1闪。例如:全不闪BF7-0=00000000;需要第2位闪BF7-0=01000000;需要首末位闪BF7-0=10000001。 4、LED显示扫描程序(注:闪动是在此程序中实现的,这里从略。):从Y7-Y0取数据送屏显示。 程序步骤(当X有变化时才做): 1、将X进行16进制→10制计算,绝对值入S7-0。【注:小数点的表示方式这里略去,负数的显示方式以下也略去】 2、译码:从S7至S0顺序译码。并设立一个首0标记:FE0 = 0/1 = 0显示0/0显示空,译码开始时置 FE0 = 1。【注:这是关键!!!】 3、译码规则:【注:这是关键!!!】 3.1、当Sx=0时,如果FE0 = 0,正常译码。如果FE0 = 1,将“0”译成空(即:Yx=11111111,0亮1不亮的驱动。反之是Yx=00000000)。 3.2、当Sx<>0时,正常译码,并清FE0 = 0(阻止之后将“0”译成空)。 3.3、末位S0必须正常译码(即必须译成0-9,无论FE0是0是1,防止X=0时,LED7-0显示全空)。 |
先以你想到的方法来做,做出来就是了,程序就是为了达到目的,这个目的并不难,你要先自己弄出来一个,然后去优化 |
加一个标志位吧,计数一共收到几个数字,这样你也就知道最高位是谁了,同时收到数字也不用8位全左移了。 |
在显示那里修改,从最高位开始,如果是0、并且不是个位数,就不显示该位。 |