51单片机——不同端口IO点亮数码管

我们平时实验练手,点数码管基本上是同一个端口接一个数码管,这样操作非常方便,比如接P0口,全亮直接P0=0xff就行了。

但实际项目中,可能有各种各样的原因,不一定能接在同一个口中,怎么办呢?

这时候,就需要软件中做一些简单的处理了。

这里抛砖引玉,写一下我的想法,如大家有其他想法,请不吝赐教,感谢!

比如,原理图如下,随便接了几个端口的脚,分别在P1,P2,P3几个口上:

原来直接把一个显示数据往一个端口送进去就可以显示了,现在不同端口,就通过移位的方式,把一位位放入对应的IO口中。

代码如下:

#include <reg51.h>

//设置段对应的IO口
sbit a = P1^2;
sbit b = P1^4;
sbit c = P2^1;
sbit d = P3^5;
sbit e = P2^3;
sbit f = P3^7;
sbit g = P1^0;

//定义共阴极数码管0-9的显示数组
unsigned int code num[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67};

//延时
void delay(unsigned int nms)
{
	unsigned int i;
	while(nms--)
	{
		for(i=0;i<500;i++){}
	}
}

//显示数据处理,逐位放入对应的IO口
void display_num(unsigned char n)
{
	unsigned char temp;
	temp = num[n];
	a = temp & (0x01<<0);
	b = temp & (0x01<<1);
	c = temp & (0x01<<2);
	d = temp & (0x01<<3);
	e = temp & (0x01<<4);
	f = temp & (0x01<<5);
	g = temp & (0x01<<6);
}

int main(void)
 { 
   unsigned char i;
   while(1)
   {
		for(i=0;i<10;i++)    //循环显示0-9
		{
			display_num(i);
			delay(100);
		}
   }
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值