单片机蓝桥杯--数码管显示

我们先来看一下蓝桥杯板中数码管部分的电路图:

对于动态数码管的控制,是需要有段选和位选的,位选是控制数码管哪一位显示,段选是控制该位显示什么数字,由上图可知,当Y6C有效时,P0控制的是数码管的位;当Y7C有效时,可以给P0写入显示数字的断码。以下依次是数码管0~F以及熄灭的段码:

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xff}
为了方便以后直接调用程序,直接用中断来写

上程序:

#include<STC15F2K60S2.H>
#include<intrins.h>
#define uchar unsigned char
unsigned char code SMG_NoDot[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xA1,0x86,0x8e,0xbf,0xff};//段码
unsigned char  SMG_SJ[] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8};//对应每个位显示的数据非静态数组,可以直接改变对应的数值,比如SMG_SJ[0]=3,则第一个数码管显示3
uchar a=0,b=00;
void Timer0Init(void)        //1000微秒@12.000MHz
{
    AUXR |= 0x80;        //定时器时钟1T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0x20;        //设置定时初始值
    TH0 = 0xD1;        //设置定时初始值
    EA=1;
    ET0=1;
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
}
void Init74HC138(unsigned char n)
{
    switch(n)
    {
        case 4:                                            //LED
            P2=(P2 & 0x1f) | 0x80;
        break;
        case 5:                                            //蜂鸣器与继电器
            P2=(P2 & 0x1f) | 0xa0;
            break;
        case 6:                                            //数码管位选
            P2=(P2 & 0x1f) | 0xc0;
            break;
        case 7:                                            //数码管段码
            P2=(P2 & 0x1f) | 0xe0;
            break;
    }
}
void main()
{
    Timer0Init();
    //SMG_SJ[7]=3;
    while(1);
}
void T0() interrupt 1
{
    Init74HC138(6);            //打开位选
    P0 = (0x01 << a);        //控制位选,从第一个到第八个数码管
    b=SMG_SJ[a];                //将对应的数据放到B
    Init74HC138(7);            //打开段码
    P0=SMG_NoDot[b];        //输出段码
    a++;                                //下次进入下一个数码管
    if(a==8)                        //到第八个数码管后从第一个开始
        a=0;
    
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值