zoukankan      html  css  js  c++  java
  • 【蓝桥杯单片机03】数码管的静态显示

    【蓝桥杯单片机03】数码管的静态显示

    广东职业技术学院  欧浩源

        不管是省赛还是国赛,数码管显示是蓝桥杯“单片机设计与开发”赛项必考的内容之一。要掌握数码管显示这个内容需要分为两个步骤:首先弄清楚数码管的静态显示,然后再去掌握数码管的动态显示。至于什么是静态显示,什么是动态显示,不清楚的可以百度一下。


    1、关于数码管的基础知识
        要把内容正确的显示在数码管上,首先要明确数码管的类型与段码结构。在CT107D单片机综合实训平台上使用的数码管是F3461BH。为什么要看这个型号呢?因为它能告诉你数码管的类型。倒数第2个字母是“B”,说明这个数码管是共阳类型的,如果该字母为“A”则为共阴类型。不同类型的数据管,其段码数组是截然不同的。
    在明确数码管类型之后,就可以确定段码数组了,也就是显示内容所对应的值,例如,要在F3461BH上显示数值“7”,那么就要输出的数值为“0xf8”。怎么样才能得到这个段码数组呢?你可以从网上或其他参考资料上获取,也可以自己对于电路图或者测试段码得到。

    2、数码管的电路连接
        F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有com1~com4四个公共控制脚,该应用为高电平则使能对应位的数码管。两个F3461BH一共有8个com控制引脚,也是通过74HC573锁存器与单片机的P0端口相连的。因此,在操控数码管显示的过程中也离不开74HC138译码器和74HC573锁存器,关于这部分的内容可以参考“【蓝桥杯单片机02】LED的基本控制

    3、单元实训题目

    4、实现源码参考

    #include "reg52.h"  
    
    sbit HC138_A = P2^5;    
    sbit HC138_B = P2^6;    
    sbit HC138_C = P2^7;    
    
    //数码管的段码数组
    unsigned char code SMG_Duanma[18] = 
        {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
         0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
         0xbf,0x7f};
    
    void Delay(unsigned int time)
    {
        while(time--);
        while(time--);
    }
    
    void Init74HC138(unsigned char n)
    {
        switch(n)
        {
            case 4:
                HC138_A = 0;
                HC138_B = 0;
                HC138_C = 1;
                break;
            case 5:
                HC138_A = 1;
                HC138_B = 0;
                HC138_C = 1;
                break;
            case 6:
                HC138_A = 0;
                HC138_B = 1;
                HC138_C = 1;
                break;
            case 7:
                HC138_A = 1;
                HC138_B = 1;
                HC138_C = 1;
                break;
            case 8:
                HC138_A = 0;
                HC138_B = 0;
                HC138_C = 0;
                break;
        }
    }
    
    void DispaySMG_Bit(unsigned char value, unsigned char pos)
    {
        char i;
        Init74HC138(6);
        P0 = (0x01 << pos);
        Init74HC138(7);
        P0 = value;
    }
    
    void DispaySMG_Static()
    {
        char i,j;
        for(i = 0; i < 8; i++)
        {
            for(j = 0; j < 10; j++)
            {
                DispaySMG_Bit(SMG_Duanma[j],i);
                Delay(60000);
            }
        }
        
        Init74HC138(6);
        P0 = 0xff;
        for(i = 0; i < 16; i++)
        {
            Init74HC138(7);
            P0 = SMG_Duanma[i];
            Delay(60000);
        }
    }
    
    main()
    {
            while(1)
            {
                DispaySMG_Static();
            }
    }
  • 相关阅读:
    WPF:linq
    WPF:ListView数据绑定及Style
    WPF: DatePicker
    多线程16--单例--懒汉模式和静态内部类形
    多线程15--线程本地变量ThreadLocal
    多线程14---模拟消息队列
    多线程13--多线程并发购票--低效的线程安全的车票容器
    多线程10--线程间实时通信--耗性能的轮询
    自定义video的controls(播放暂停按钮、进度条、快进快退等)
    js+css 写出 简单2048游戏
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/8365437.html
Copyright © 2011-2022 走看看