51单片机教程(九)- 数码管的动态显示

发布于:2025-06-29 ⋅ 阅读:(20) ⋅ 点赞:(0)

9、数码管动态显示

  • 项目目标
    • 了解数码管动态显示原理,掌握其编程方法。
  • 知识要点
    1. 数组、元素、利用数组实现查表。
    2. 局部变量和全局变量的作用域、可见性。

1、项目分析

  • 通过演示数码管动态显示的操作过程,穿插讲解以下知识点:数组、元素、利用数组实现查表。局部变量和全局变量的作用域、可见性等。

2、技术准备

1、 数码管动态显示理论知识

  • 复习:1位数码管和单片机的连接,其上显示1位十进制数的方法。

  • 问题的提出

    1. 如何显示4位十进制数?

      • 用4个1位数码管拼成。
    2. 4个1位数码管和单片机如何连接

      • a、静态显示的连接方式、静态显示的优缺点(优点:不需要动态刷新;缺点:占用IO口线多)。

      • b、动态显示的连接方式(所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效)

      • c、动态显示的优缺点(缺点:需要动态刷新;优点:占用IO口线少)。

      • 4位及4位以上比较适合用动态显示,为了方便使用,市售的4位一体数码管,内部已经按动态显示的连接方式连好了。
        请添加图片描述


2、动态扫描的原理

  • 在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?
  • 动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像看的电影是有一帧一帧的画面显示的,当速度够快的时候看到它就是动态的。当显示数码管的速度够快的时候,也就可以看到它们是同时显示了。

3、数码管的动态显示原理

  • 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
  • 选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
  • 动态显示的亮度比静态显示的亮度低,所以在选择限流电阻时应小于静态显示电路中电阻值。

  • 总结
    • 所谓的动态显示:轮流向各位数码管送出段选和位选,由于人眼的视觉残留作用,使人感觉好像各位数码管同时在显示。

3、项目实施

项目1 一位数码管动态显示

  • 实验需求:

    • 第1位数码管从 0 - 9 循环显示
  • 实验分析

    字符 h g f e d c b a 十六进制
    0 0 0 1 1 1 1 1 1 0x3f
    1 0 0 0 0 0 1 1 0 0x06
    2 0 1 0 1 1 0 1 1 0x5b
    3 0 1 0 0 1 1 1 1 0x4f
    4 0 1 1 0 0 1 1 0 0x66
    5 0 1 1 0 1 1 0 1 0x6d
    6 0 1 1 1 1 1 0 1 0x7d
    7 0 0 0 0 0 1 1 1 0x07
    8 0 1 1 1 1 1 1 1 0x7f
    9 0 1 1 0 1 1 1 1 0x6f
  • 实验代码

    #include<reg52.h> //头文件包含特殊功能寄存器的定义
    
    sbit pos1 = P2^4;
    sbit pos2 = P2^5;
    sbit pos3 = P2^6;
    sbit pos4 = P2^7;
    
    // 显示数值表0-9
    unsigned char code dofly_table[10] = {
         0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
    
    void Delay(unsigned int t); //函数声明
    
    void main()
    {
         
        unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
        pos1 = 1;
        pos2 = 0;
        pos3 = 0;
        pos4 = 0;
        
        while (1) {
                //主循环
            for (i = 0; i < 10; i++) {
          //加

网站公告

今日签到

点亮在社区的每一天
去签到