单片机交流
直播中

李永每

8年用户 1523经验值
私信 关注
[问答]

动态数码管的工作原理是什么?

动态数码管的工作原理是什么?

回帖(1)

黄璨

2021-10-11 15:00:06
思来想去还是决定要出这期教程,因为我看很多同学在这个数码管的问题上都还是有点迷惑,特别是这个动态数码管的工作原理,以及这个相应代码该如何编写,那么教程来了~
首先看一下一位数码管内部原理,以及各个引脚的标识




使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。实验板用共阴LED显示器,根据电路连接图显示16进制数的编码见下方:
共阳数码管显示数组=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};//显示0~F的值
共阴数码管显示数组={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
多位数码管的工作原理与一位相同,不同的是多为数码管相较于一位数码管多了位选,连接时只需要把各个位选连接不同的单片机引脚,再写好程序加以控制就行,下面是四位数码管的引脚标识





这次主要是想给大家分享一个关于动态数码管的教程,所以咱们需要8位数码管,实际焊接中可以选用两个四位数码管组成,阴极阳极都可以,编程时代码显示不要出错就好了,我这里仿真用的是八位阴极数码管,仿真电路如下:





动态数码管显示程序代码如下:

#include"reg52.h"  //头文件
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char z;  //定义无符号字符型变量z
unsigned char code duan_xuan[10]=    //数码管段选
        {
        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
        0x7f,0x6f
        };       
unsigned char code wei_xuan[8]=    //数码管位选
        {
        0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F
        };
unsigned char dat[8]={8,7,6,5,4,3,2,1};    //数码管显示字符12345678


void delay(unsigned int x)   //调用延时函数delay
{
        unsigned char i;
        while(x--)
        {
                for(i=0;i<120;i++);
        }
}
void main()        //主函数
{
        P2=0x00;      //初始化数码管
        while(1)
        {
                for(z=0;z<8;z++)  //利用for循环一次让数码管显示数字1~8
                {
                        P2=duan_xuan[dat[z]];
                        P1=wei_xuan[z];
                        P1=0XFF;
                        delay(5);
                }
        }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分