数码管

显示

数码管显示,每次只能设置一个数码管,通过快速切换感觉为同时显示。

端口 意义 数值
TH0、TL0 组成 16 位初值,与 FFFFH 的差值为计时值,每次需重新设置
P0 数码编码组合,对应位 =0 的显示,每位表示一个笔划或点
P2 数码管选通标志,值为 0 的位表示选通

中断

使用 interrupt 1 实现数码管显示。


void ShowDigits() interrupt 1

{

    static unsigned char code dis_code[11]= // 编码 0-9,A-F,无
    {
        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
        0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF 
    };
    TH0 = 0xFC;
    TL0 = 0x17;

    P2 = 0xff; // 先关闭所有数码管
    P0 = dis_buf[dis_index]; // 显示代码传送到P0口
    P2 = dis_digit; // 

    dis_digit = _cror_(dis_digit,1); // 位选通值右移(P20<-P27), 下次中断时选通下一位数码管
    dis_index++; // 

    dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描

}

数码编码组合

7 6 5 4 3 2 1 0