• 单片机-如何让数码管动态显示


    数码管硬件图

    1、数码管 连接 74HC245 芯片

    单片机IO口输出难稳定,需要数码管与单片机连接需要增加驱动电路, 使用 74HC245

    abcdefgDP并联导出  74HC245 对数码管进行驱动,P0 是输出电流 来驱动各个段的 驱动芯片

    增加电阻 是为了防止电流过大烧坏数码管 。P0输出段选的

    2、数码管是2个4位一体的 共阴数码管

    共阴 就是所有阴极 连接 在一起,连接在公共端,接地 ,阳极给高电平 就可以导通 发亮

    数码管的公共端 引出来

    3、用38 译码器 到控制输入,控制位选 数码管 LED1~LED8

    38译码器 是 3输入8 输出的芯片 由P2^2 P2^3 P2^4 输入 来控制位选的

    4、什么是数码管?

    数码管由8个端 或者7个端组成的发光二极管 多一个段是一个点,他可以组成小数点

    一个数码管封装 10个引脚

    数码管分类:

    阳极

              所有二极管的阳极 全部连接起来, 阴极独立, 阴极 给低电平就亮

    阴极

            所有二极管的阴极 全部连接起来, 阳极独立, 阳极 给高电平就亮

    两种 正极负极是放着来就可导通


    如何显示一个字?

    假如以阴极 数码管来显示:

    要是显示 0 , 从 阴极二进制就是 DP、g 为 0 低电平 其他为高 0011 1111 换算十六 3f

    数码管就亮了

    共阴数码管  abcdefg 要亮的 1111 1100  小数点为P0.7 为数据的高位

    得从高位到地位P0.7~0.0   0011 1111 转换十六进制 为 0x3f

    共阳数码管就是跟共阴数码管 相反的取值  


    什么是段选、什么是位选?

    段选 就是 数码管各个发光二极管显示的段 组成的字

    位选 就是 公共端引出的引脚,选择哪个数码管来显示 

    共阴、共阳 0~F 的段选显示

    共阴数码管亮

    0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
    0        1         2       3        4       5
    0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
    6          7       8       9        A      B
    0x39, 0x5e, 0x79, 0x71, 0x00,
    C         D      E          F     无显示

    共阳数码管亮

    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,
    0           1        2        3        4       5
    0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,
    6           7        8        9        A       B
    0xC6, 0xA1, 0x86, 0x8E, 0xFF,
    C          D        E        F     无显示

    如何通过38译码器来选择 哪个LED灯亮?

    1、查看芯片的手册

    2、控制位选输出数码管

    A1A2A3 都为低电平,000       Y0 为有效      LED1

    A1A2A3  为 100                       Y1 为有效   LED2

    A1A2A3 为 010                         Y2 为有效  LED3

    A1A2A3  为 110                               Y3 为有效 LED4

    A1A2A3 为001                                 Y4为有效 LED5

    A1A2A3 为101                                 Y5 为有效 LED6

    A1A2A3 为        011                        Y6 为有效 LED7

    A1A2A3 为        111                         Y7 为有效   LED8 


    流程走向图:

    消影

    用人眼余晖,延时来 让人感觉数码管动态显示

    软件编程:

    1. #include "reg52.h"
    2. typedef unsigned int u16;
    3. typedef unsigned char u8;
    4. #define SMG_A_DP_PORT P0
    5. u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    6. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; // 段选0-F
    7. // 位选
    8. sbit LSA = P2^2;
    9. sbit LSB = P2^3;
    10. sbit LSC = P2^4;
    11. void delay_time(u16 times)
    12. {
    13. while(times--);
    14. }
    15. // 定义数码管显示的函数
    16. void smg_display(void)
    17. {
    18. u8 i = 0; // 用一个循环,需要定义一个变量
    19. for(i=0;i<8;i++)
    20. {
    21. //每次循环选择一个段选
    22. switch(i)
    23. {
    24. case 0:LSC=1; LSB=1; LSA=1; break; // Y7 输出
    25. case 1:LSC=1; LSB=1; LSA=0; break; // Y6 输出
    26. case 2:LSC=1; LSB=0; LSA=1; break; // Y5 输出
    27. case 3:LSC=1; LSB=0; LSA=0; break; // Y4 输出
    28. case 4:LSC=0; LSB=1; LSA=1; break; // Y3 输出
    29. case 5:LSC=0; LSB=1; LSA=0; break; // Y2 输出
    30. case 6:LSC=0; LSB=0; LSA=1; break; // Y1 输出
    31. case 7:LSC=0; LSB=0; LSA=0; break; // Y0 输出
    32. }
    33. SMG_A_DP_PORT = gsmg_code[i];
    34. delay_time(100); // 1ms = 100 us
    35. SMG_A_DP_PORT = 0x00;
    36. }
    37. }
    38. void main()
    39. {
    40. while(1)
    41. {
    42. smg_display();
    43. }
    44. }

  • 相关阅读:
    SVN windows安装及初步使用;及初次连接版本库、提交、还原、比对操作说明文档
    基于JAVA养老智慧服务平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Flask包算法服务
    GitHub最新发布 阿里十年架构师手写版spring全家桶笔记全新开源
    计算机毕业设计SSM订餐系统【附源码数据库】
    【论文翻译】变更数据捕获和实时数据仓库框架
    鸿蒙开发工具DevEco Studio的下载和安装
    KNN(下):数据分析 | 数据挖掘 | 十大算法之一
    【LeetCode】622. 设计循环队列
    LeetCode题-回文数-2023/9/11
  • 原文地址:https://blog.csdn.net/m0_68021259/article/details/132609843