共阳数码管的动态显示(蓝桥杯练习04)

动态显示设计思路

轮流点亮单个数码管,但看起来数码管是同时点亮的。
在这里插入图片描述
练习内容
在这里插入图片描述
具体代码
遇到的问题与解决方法:在数据快速更新的同时,数码管如果同步显示更新的数据,数码管显示的数据就会非常快,以至于我们人眼看上去很乱甚至看不清数据,在一开始使用的延时函数的基础上加以修改就可以使数码管延时显示一会儿更新之后的数据,让数据显示更加稳定清晰。

#include "reg52.h"
#include "inithc138.h"
#include "delay.h"

unsigned char code SMG_duanma[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};//0~F,“-”,“.”对应段码
//声明为“code”,节约ram区资源

unsigned char yue=12;

void smgshow_bit(unsigned char pos,unsigned char dat )//按位显示
{
		inithc138(6);//位选
		P0=0x01<<pos;//选择pos位数码管亮(0~7位)
		inithc138(7);//段选
	    P0=dat;//显示内容
}

void display_dynamic()//动态显示
{
	smgshow_bit(0,SMG_duanma[2]);
	delayxms(2);//延时2ms(延时时间不能过长)
	smgshow_bit(1,SMG_duanma[0]);
	delayxms(2);
	smgshow_bit(2,SMG_duanma[1]);
    delayxms(2);
	smgshow_bit(3,SMG_duanma[8]);
    delayxms(2);
	
	smgshow_bit(4,SMG_duanma[16]);
	delayxms(2);
	smgshow_bit(5,SMG_duanma[16]);
	delayxms(2);
	smgshow_bit(6,SMG_duanma[yue/10]);
	delayxms(2);
	smgshow_bit(7,SMG_duanma[yue%10]);
	delayxms(2);
}
void update_delay(unsigned int x)
{
	unsigned char data i, j;
	while(x--)
	{
			i = 12;
			j = 169;
			do
			{
				while (--j);
			} while (--i);
			display_dynamic();
	}
}
void main()
{
	while(1)
	{
		display_dynamic();
		yue++;
		if(yue>12)
			yue=1;
		update_delay(50);//数据刷新的同时延时显示一会儿
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值