• 【单片机】【数码管】数码管显示


    1. 数码管的显示器及其接口

    单片机系统中 常用的显示器有: 发光二极管LED显示器、液晶LCD显示器、TFT液晶显示器。本文主要是关于LED显示器的说明。

    LED显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5x8、8x8点阵等)。

    LED数码管根据接法可以分为共阴和共阳。

    如下图中,左边是共阴接法,右边是共阳接法。共阴表示8个led的阴极接到一起,共阳是8个led的阳极接到一起。

    显示数字或字符时需要编码。如果是共阴接法,那么a/b/c/d/e/f/g/dp为高电平时对应的led就会亮,编码0~F分别是:

    2. 数码管静态显示原理

    LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入依次字形码后,显示字形可一直保持,知道送入新字形码为止,这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

    3. 数码管原理图

    如下是普中51-单核-A2板子上的数码管模块原理图,可以看到,右上有8个数码管用来显示字符,这8个数码管一端分别与LED1~LED8连接,另一端与P0口连接,所以通过控制P0口来显示我们需要的字符;LED1~LED8通过74HC138译码器与P2^2、P2^3、P2^4连接,这三个IO口控制是哪一个LED可以显示。

    静态数码管显示,第一个数码管显示字符F

    1. sbit P22 = P2^2;
    2. sbit P23 = P2^3;
    3. sbit P24 = P2^4;
    4. #define LCD P0
    5. typedef unsigned char u8;
    6. // code保存数据到寄存器中
    7. u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
    8. 0x6d,0x7d,0x07,0x7f,0x6f,
    9. 0x77,0x7c,0x39,0x5e,0x79,0x71};
    10. void show_LCD_static()
    11. {
    12. // LED1显示字符F
    13. P22 = 1;
    14. P23 = 1;
    15. P24 = 1;
    16. P0 = segment[15];
    17. while(1){}
    18. }

    显示结果:

    动态数码管显示,从第一个数码管开始依次显示0,1,2,3,4,5,6,7

    1. #include "LCD.h"
    2. #include "reg51.h"
    3. #include "delay.h"
    4. sbit P22 = P2^2;
    5. sbit P23 = P2^3;
    6. sbit P24 = P2^4;
    7. #define LCD P0
    8. typedef unsigned char u8;
    9. // code保存数据到寄存器中
    10. u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
    11. 0x6d,0x7d,0x07,0x7f,0x6f,
    12. 0x77,0x7c,0x39,0x5e,0x79,0x71};
    13. void show_P0_0()
    14. {
    15. u8 i;
    16. for(i=0;i<8;i++)
    17. {
    18. switch(i)
    19. {
    20. case 0:
    21. P22 = 1; P23 = 1; P24 = 1; break;
    22. case 1:
    23. P22 = 0; P23 = 1; P24 = 1; break;
    24. case 2:
    25. P22 = 1; P23 = 0; P24 = 1; break;
    26. case 3:
    27. P22 = 0; P23 = 0; P24 = 1; break;
    28. case 4:
    29. P22 = 1; P23 = 1; P24 = 0; break;
    30. case 5:
    31. P22 = 0; P23 = 1; P24 = 0; break;
    32. case 6:
    33. P22 = 1; P23 = 0; P24 = 0; break;
    34. case 7:
    35. P22 = 0; P23 = 0; P24 = 0; break;
    36. }
    37. P0 = segment[i];
    38. delay_ms(500); // delay.h中的延时函数
    39. P0 = 0;
    40. }
    41. }

    显示结果:

    上图的连接中左边的数码管1对应的是74HC138的15pin,即Y0,也就是74HC138的ABC都是0的时候输出对应的是Y0,正好对应的是代码中P22=P23=P24=0时,显示7.

     

  • 相关阅读:
    input时间控件选择时禁用某个日期之前或之后
    Java中的super关键字
    模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)
    easylogging++ 使用笔记(ubuntu 20.04)
    virtio-net 实现机制【一】(图文并茂)
    CoCube显示测试笔记
    SQL注入
    Elasticsearch学习--查询(prefix、wildcard、regexp、fuzzy)
    22. containerd使用Devmapper snapshotter讲解
    如何用 Kubernetes 自定义资源?
  • 原文地址:https://blog.csdn.net/sinat_41752325/article/details/125547014