51学习之8位共阴数码管动态扫描

技术 · 2018-12-04 · 569 人浏览

这次讲解如何编写8位共阴极数码管的动态扫描。

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

知道了基本原理,开始编写程序

#include<reg52.h>
sbit dula = P2^6;//定义段选
sbit wela = P2^7;//定义位选
unsigned char table[] = {
                0x3f, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
                0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x80, 0x00
};
unsigned char code table1[] = {
                0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f,
                0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f
};

void delayms(unsigned int k)//延时函数
{
    unsigned int i , j;
    for(i = 0;i < k;i++)
    for(j = 0;j < 125;j++)
}
void main()
{
    int i;
    while(1)
    {
        for(i = 0;i < 8;i++)
        {
            P0 = 0xFF;//消影(必须有)
            wela = 1;//位选端锁存器置高,打开位选锁存器
            P0 = table1[i];//送入数据
            wela = 0;// 位选端锁存器置低,保存数据

            dula = 1;// 段选端锁存器置高,打开段选所存器
            P0 = table[i];//送入数据
            dula = 0;// 段选端锁存器置低,保存数据

            delayms(1);
        }
    }
}
例程 数码管
Theme Jasmine by Kent Liao