数码管的动态显示

要理解数码管的显示,我们先理解其原理,我们先看它的原理图。

 

原理图中com引脚是表示选择数码管的位,a1- dp1是表示选择数码管的段。

void ShowSMG(unsigned int value,unsigned int pos)
{
 InitHC138(6);
 P0=0x01<<pos;
 InitHC138(7);
 P0=value;
}

该段代码是表示要选择哪一位数码管亮,并且使其表示相应的数据。选通573锁存器6通道后,表示进行选择数码管的位操作,对P0口赋值0x01<<pos,是利用余辉效应使得人眼反应不过来,人眼看到的都是亮的。之后选通7,对相应的数码管进行段选赋值。

之后就可以随意让数码管表示数据了。例如,我们表示一个日期。

void SMG()
{
 ShowSMG(SMG_duanma[2],0);
 Delay(500);
 ShowSMG(SMG_duanma[0],1);
 Delay(500);
 ShowSMG(SMG_duanma[2],2);
 Delay(500);
 ShowSMG(SMG_duanma[3],3);
 Delay(500);

 ShowSMG(SMG_duanma[16],4);
 Delay(500);
 ShowSMG(SMG_duanma[16],5);
 Delay(500);

 ShowSMG(SMG_duanma[0],6);
 Delay(500);
 ShowSMG(SMG_duanma[4],7);
 Delay(500);
}

接下来,看完整的代码。

#include<stc15f2k60s2.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 InitHC138(unsigned int n)
{
  switch(n)
  {
  	case 4:
	       HC138_C=1;
		   HC138_B=0;
		   HC138_A=0;
		   break;
	case 5:
	       HC138_C=1;
		   HC138_B=0;
		   HC138_A=1;
		   break;
	case 6:
	       HC138_C=1;
		   HC138_B=1;
		   HC138_A=0;
		   break;
	case 7:
	       HC138_C=1;
		   HC138_B=1;
		   HC138_A=1;
		   break;
  }
}
void Delay(unsigned int t)
{
 while(t--);
}
void jing()
{
  InitHC138(5);
  P0=0x00;
}
void ShowSMG(unsigned int value,unsigned int pos)
{
 InitHC138(6);
 P0=0x01<<pos;
 InitHC138(7);
 P0=value;
}
void SMG()
{
 ShowSMG(SMG_duanma[2],0);
 Delay(500);
 ShowSMG(SMG_duanma[0],1);
 Delay(500);
 ShowSMG(SMG_duanma[2],2);
 Delay(500);
 ShowSMG(SMG_duanma[3],3);
 Delay(500);

 ShowSMG(SMG_duanma[16],4);
 Delay(500);
 ShowSMG(SMG_duanma[16],5);
 Delay(500);

 ShowSMG(SMG_duanma[0],6);
 Delay(500);
 ShowSMG(SMG_duanma[4],7);
 Delay(500);
}
void main()
{
  jing();
  while(1)
  {
   SMG();   
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值