子程序设计数码管显示程序案例

 常见问题     |      2020-06-15 13:29

原理:利用X0,X1来调用子程序,分别实现加一减一功能。每次按下X0,程序开始扫描子程序一次,进行加一,但是因为按钮是人工按的,按的时间无法确定,所以如果这样,那么INC会一直加,所以,在调用的时候,我们要加沿,用INCP,即无论你按下时间多少,只要你是按下一次,那么只加一次。

作者在这里特别强调,在子程序里尽量不要用沿,因为子程序的执行只进行一次,所以时间非常短,更重要的是,子程序被扫描完后,子程序中的输出状态将保持不变,直到下次扫描根据输入状态,输出状态才能发生改变。

那么我们在主程序里,就是实现比较,当大于15,我们不能让其再加,如果小于0,则不能再减。我们利用的是CMP指令,当然,你用触电比较指令的话,更直观。

主程序里显示数码管,你会看到0-F显示,即用一位数显示,比如你的十六进制的A,就是10,F就是15。只是用一位数表示了。0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,分别是十六进制数0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。

注意我们这里不能用BCD码,用了BCD码就显示不了A-F,因为BCD码只能显示0-9,使用四位二进制数显示一位十进制数,如二进制数1100,对应的十进制是12,那么利用BCD码怎么表示呢?十位的1用四个二进制数是0001,个位2利用四个二进制数是0010,所以对应的BCD码是0001 0010(BCD),那么这个数对应的十进制是K18。

如果用多位数,比如四位数,显示在数码管上怎么显示?如1524,这个十进制数怎么显示呢?那么这个数在计算机里,使用二进制数表示,是10111110100,如果用一个16位寄存器来存储的话是:0000 0101 1111 0100,那么如果是BCD码呢?就是把1,5,2,4这四个数,分别用四位二进制表示,即0001 ,0101 , 0010, 0100,那么这四个二进制就显示在4段7位数码管上了。那么在寄存器存储就是0001010100100100,那么这个数对应的十进制是多少呢?利用8421方法是K5412。