51单片机学习之旅——数码管

总结一下:74HC245是弄数码管上数字的,

                  74LS138是选哪个数码管工作的

多个LED灯操作,选择用寄存器来操作,故用P0(1亮,0不亮)

显示数字0:g不亮,其余亮,P0=0011 1111=0x3F

显示数字1:b,c亮,其余灭,P0=0000 0110=0x06

显示数字2:f,c不亮,其余亮,P0=1101 1011=0xDB

(先二进制转10进制,然后掰手指头11是B往后数)

显示数字3:f,e不亮,其余亮,P0=0100 1111=0x4F

显示数字4:a,d,e不亮,其余亮,P0=0110 0110=0x66

(从后往前打,打一个往左挪一个)

显示数字5:b,e不亮,其余亮,P0=0110 1101=0x6D

显示数字6:b不亮,其余亮,P0=0111 1101=0x7D

显示数字7:a,b,c亮,其余灭,P0=0000 0111=0x07

显示数字8:全亮,P0=0111 1111=0x7F

显示数字9:d,e不亮,其余亮,P0=0110 0111=0x67

那8个数码管,如果我们要让第6个数码管显示6,则应该让74LS138选择第六个数码管,然后让74HC245弄个数字6

如果我们要显示12345678,则应该有8个瞬间

第一个瞬间,让最左边数码管显示1,其余黑

第二个瞬间,让左二的数码管显示2,其余黑

第三个瞬间,让左三的数码管显示3,其余黑

第四个瞬间,让左四的数码管显示4,其余黑

第五个瞬间,让右四的数码管显示5,其余黑

第六个瞬间,让右三的数码管显示6,其余黑

第七个瞬间,让右二的数码管显示7,其余黑

第八个瞬间,让最右的数码管显示8,其余黑

然后这8个瞬间依次首尾循环闪,骗过眼睛,显示123456789

开始敲代码:

打开软件,

这次试试模块化编程,先弄数码管的点C文件:

#include <REGX52.H>

void nixie_tube(int location,int number)//location代表我们选的数码管从右边开始低位起,number代表我们要显示的数字
{
	unsigned char data i, j;
	
	
	//数字显示
	char nixie_number[]={0x3F,0x06,0xDB,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};//数组低位在左边,从0开始
	P0=nixie_number[number];
	
	
	//选数码管
	switch(location)
	{
		case(1):P2_4=0;P2_3=0;P2_2=0;break;//二进制000代表十进制0选择LED1数码管,我们需要设置74LS138的CBA引脚为(C)P2_4=0,(B)P2_3=0,(A)P2_2=0
		case(2):P2_4=0;P2_3=0;P2_2=1;break;//二进制001代表十进制1选择LED2
		case(3):P2_4=0;P2_3=1;P2_2=0;break;//二进制010代表十进制2选择LED3
		case(4):P2_4=0;P2_3=1;P2_2=1;break;//二进制011代表十进制3选择LED4
		case(5):P2_4=1;P2_3=0;P2_2=0;break;//二进制100代表十进制4选择LED5
		case(6):P2_4=1;P2_3=0;P2_2=1;break;//二进制101代表十进制5选择LED6
		case(7):P2_4=1;P2_3=1;P2_2=0;break;//二进制110代表十进制6选择LED7
		case(8):P2_4=1;P2_3=1;P2_2=1;break;//二进制111代表十进制7选择LED8
		default:break;
	}
	
	
//为了消除晶体管乱影,进行延时加清零操作
//@12.000MHz
		i = 2;
		j = 239;
		do
		{	
			while (--j);
		} while (--i);//延时1ms
	P0=0x00;//清零  
}
	

再添加数码管的点h文件

这样数码管的模块代码就写好了,下面我们创建主函数来用它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾浩轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值