蓝桥杯共阳极数码管静态显示IO与存储实现

以下代码实现的功能为:数码管先单个从左到右显示0到9数字,再所有数码管共同显示0~9的数字

首先试试用存储进行代码编写吧

硬件知识:

  1. 数码管控制端口为高电平有效

  1. 单片机跳帽短接MM端哦

软件知识:

  1. 数码管段码表0~9不带小数点

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  1. 编程思路为先向0xc000写入数据控制某个或某几个数码管通断,再利用数码管段码输入到0xe000中使得已接通的数码管显示相应的数字即可

具体代码如下

#include <reg52.h> 
#include <absacc.h>
unsigned char code SMGduanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 
unsigned char j;
unsigned char k;
 void delayms(unsigned char t)
{
        unsigned char i;
        while(t--)
        {for(i=0;i<203;i++);
        }
}
void displaynum()
{
    
    for(j=0;j<=7;j++)
{            XBYTE[0xc000]=0x01<<j;//依次打通数码管
                for(k=0;k<=9;k++)
            {        XBYTE[0xe000]=SMGduanma[k];//单个数码管显示数字0~9
                    delayms(5000);
    
            }    

}
        XBYTE[0xc000]=0xff;//打通所有数码管
        for(k=0;k<=9;k++)
            {        XBYTE[0xe000]=SMGduanma[k];
                    delayms(5000);
    
            }    
}
void main()
{
while(1)
 {
  displaynum();
 
 }


}

下面一起来看看IO的写法

硬件准备:

1将J13的跳帽短接IO端

软件知识:

hc573的y6c为低电平时,P0控制数码段通断

hc573的y7c为低电平时,P0为写入数码管的数据

#include <reg52.h> 
unsigned char code SMGduanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9段码
unsigned char j;
unsigned char k;
void sel573(unsigned char x)
{
    switch(x)
        {
        case 4:
            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 delayms(unsigned char t)
{
        unsigned char i;
        while(t--)
        {for(i=0;i<203;i++);
        }
}
void displaynum()
{
    
    for(j=0;j<=7;j++)
            
{        sel573(6);//依次打通数码管
        P0=0x01<<j;
                for(k=0;k<=9;k++)
                    
            {    sel573(7);//向数码管写入数据,此处可与存储写入的地方对比
                P0=SMGduanma[k];
                    delayms(5000);
    
            }    

}
            sel573(6);
            P0=0xff;
        for(k=0;k<=9;k++)
            {        sel573(7);
                
            P0=SMGduanma[k];
                    delayms(5000);
    
            }    
}
void main()
{
    
while(1)
 {
  displaynum();
 
 }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值