动态数码管

目录

一、原理图:

 二、STC89C51参考代码:


一、原理图:

        1、解释动态数码管原理图:

        

                (1)74HC245作用:信号功率放大(由于IO口输出功率太低)

                (2)段选:由J6口选择要选择的a-e需要亮的部分

                  

                (3)位选:由J1口选择要亮的位,其中为了节省引脚,我们用74HC138译码器控制J1

                (4)74HC138译码器:J9输入三位二进制数控制J10八位引脚,如输入010,则让Y2输出低电平

                  

                (5)从0-f对应对应的16进制数:

//不含小数点
u8 code transistor_negative[]=
{
	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
//包含小数点
u8 code transistor_negative_point[]=
{
	0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
	0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1
};

 二、STC89C51参考代码:

总体思路:从分析原理图可知,我们只要控制数码管的位选和段选引脚就可以实现我们想要显示的内容

//宏定义
#ifndef VARIABLE_DEFINE_H
#define VARIABLE_DEFINE_H

#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int 
#define u32 unsigned long	


#endif
//主函数
#include "Public.h"
#include "transistor.h"
void main()
{
	u8 dat[]={1,2,3,4,5,6,7,8};
	while(1)
	{
		TST_ALL(dat);
	}
}
//数码管头文件
#ifndef TRANSISTOR_H
#define TRANSISTOR_H

#include "Public.h"

#define vol_sign 0x3e
#define SGM_Port P1

sbit LSA=P0^0;
sbit LSB=P0^1;
sbit LSC=P0^2;

void TST_ALL(u8 dat[]);
void delay1us(u8 time_out);

#endif 

//数码管c文件
#include "transistor.h"


u8 code transistor_positive[]=
{
	0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};

u8 code transistor_positive_point[]=
{
	0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
	0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e
};
	
u8 code transistor_negative[]=
{
	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};

u8 code transistor_negative_point[]=
{
	0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
	0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1
};

void delay1us(u8 n);
void TST_ALL(u8 dat[])
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i+1)
		{
			case 1:LSC=0;LSB=0;LSA=0;break;
			case 2:LSC=0;LSB=0;LSA=1;break;
			case 3:LSC=0;LSB=1;LSA=0;break;
			case 4:LSC=0;LSB=1;LSA=1;break;
			case 5:LSC=1;LSB=0;LSA=0;break;
			case 6:LSC=1;LSB=0;LSA=1;break;
			case 7:LSC=1;LSB=1;LSA=0;break;
			case 8:LSC=1;LSB=1;LSA=1;break;
		}
		SGM_Port = transistor_negative[dat[i]];
		delay1us(30);
		SGM_Port = 0x00;
	}
     

}

void delay1us(u8 time_out)
{
	u8 i;
	while(time_out--)
		for(i=85;i==0;i--);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值