共阴极动态数码管实验

 1.原理图

74HC245是用来增大高电平的驱动能力;74HC138是一个38译码器。

2.如何显示数字

写代码前定要先判断数码管是共阴极还是共阳极(用万用表蜂鸣档测,万用表的正负极连接正确后数码管的一段会亮)

        我的是共阴极,片选段连在一起,由38译码器输出的八个低电平引脚,拉低来进行片选

                   
因此数码管显示数字     0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f        对应

0x3f    0x06    0x5b    0x4f    0x66    0x6d    0x7d    0x07    0x7f    0x6f    0x77    0x7c    0x39    0x5e    0x79    0x71

 3.代码

#include <REGX52.H>
#include <INTRINS.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管显示数字0~9对应的段选 就是p0的八个管脚
void Delayms(int ms){		//@11.0592MHz
	while(ms--){
		unsigned char i, j;
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}

//……段选清零 片选 段选……
void Nixie(unsigned char Chip,Number)
{
	P0=0x00;				//段码清0,消影
	switch(Chip)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//段码输出
	Delayms(1);//稳定显示
}
void main()
{
	while(1)
	{
		Nixie(1,1);		//在数码管的第1位置显示1
		Nixie(2,2);		//在数码管的第2位置显示2
		Nixie(3,3);		//在数码管的第3位置显示3
	}
}

注意:

1.第21行不可以去掉,虽然去掉显示效果没任何区别。

…… 片选 段选  片选 段选……如果不清除的话,前一次段选的数字会出现在第二次片选上,残影会随着延时时间加长而会不明显。但延时时间过长的话就是动态显示了。(可以通过修改34行,Delayms(1);为若干个_nop_();指令,从而延时不同时间进行试验)。

2.第34行去掉值显示正常,但是显示亮度会偏低。原理应该类似pwm波,四个数码管快速切换着亮肯定没有只亮一个数码管亮,因为四个切换亮,通电时常占总时长的1/4。因此要延迟一段时间保持一段时间亮度,再切换。

3.编程时变量用之前,注意提前清理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值