两天速成蓝桥杯单片机之数码管想显示(3)

前言

其实大家看一看近些年的题目,就会发现,LED数码管这种是比较多,以及按键操作。数码管基本上是必有,所以说熟练掌握数码管以及其显示,极其重要。

硬件略解

image-2020102019140277920191402779.png)]

在前面几章的结束之后,你会发现整块板子的这些IO口都是差不多的操作。所以这里就不再赘述了

其实大家还需要知道的是数码管的一个LED顺序,因为很多时候题目会让你亮一些奇奇怪怪的东西。下图是一个数码管的引脚号。

image-20201020201352749

其实你能注意观察到就是,从低位到高位就是从左往右顺时针的以及中间的横杠以及DP的点。虽然比赛现在给了共阳数码管的码表,但是我们还是需要知道怎么去计算的。

软件详解

其实像其他一样会有操作锁存器的操作,数码管这里需要操作锁存器时我们需要操作俩个,分别是段选和位选。至于数码管的动态扫描显示就也不详细说了,我自己写了一个,函数自己感觉挺好使的,这里给大家参考一下吧。

#include "smg.h"
char code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0x7f, (~0x40)};
//0-15 16为点
void comOpen(void)
{
    P2 = (P2 & 0x1f) | 0xc0;
}
void comClose(void)
{
    P2 &= 0x1f;
}

void showNumOpen(void)
{
    P2 = (P2 & 0x1f) | 0xe0;
}
void showNumClose(void)
{
    P2 &= 0x1f;
}
//简介@数码管八位显示指定的
//参数@从左到右分别是想显示的,数字代表上面的数组的索引序号,if中的数字代表那一位不显示
void smgDisplay(uint num1, uint num2, uint num3, uint num4, uint num5, uint num6, uint num7, uint num8)
{
    int i;
    uint nums[8];
    nums[0] = num1;
    nums[1] = num2;
    nums[2] = num3;
    nums[3] = num4;
    nums[4] = num5;
    nums[5] = num6;
    nums[6] = num7;
    nums[7] = num8;
    for (i = 0; i < 8; i++)
    {
        if (nums[i] == 18)	//不显示的数字号
        {
            continue;
        }

        comOpen(); //需要先位选后段选
        P0 = (0x01 << i);	//位选
        comClose();
        P0 = 0xff;
        showNumOpen();
        P0 = table[nums[i]];	//段选
        delay_ms(1);
        P0 = 0xff;
        showNumClose();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值