这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» 程序上如何将分散在不同引脚的8个LED灯合并在一个IO口上?

共6条 1/1 1 跳转至

程序上如何将分散在不同引脚的8个LED灯合并在一个IO口上?

工程师
2021-11-14 21:42:54 打赏

请问能否将分散在不同口的8个led灯合并在一个IO口上?

方便做流水灯操作




关键词: LED I/O 端口

工程师
2021-11-14 22:33:56 打赏
2楼

WS2812B 一个IO口就可以驱动无限级联,其他方法没听说过。


工程师
2021-11-14 22:40:53 打赏
3楼

你是这意思么? 比如P10 P12 P32 P45 这四个IO口不是属于同一组。但是操作的时候一个0XFF 可以全部电平都赋值为1. 同理如果赋值0X00则这几个IO口电平都为0,是这意思么?


工程师
2021-11-14 22:44:53 打赏
4楼

没有什么比较好的办法,只能是:

把每个LED sbit 一下,如:
sbit LED0 = P1^0;
sbit LED1 = P4^2;
…………
…………

然后,做个子函数,然后主程序调用子函数。
void LED_Light(uchar dat)
{
dat <<= 1;
LED0 = CY;
dat <<= 1;
LED1 = CY;
dat <<= 1;
LED2 = CY;
dat <<= 1;
LED3 = CY;
dat <<= 1;
LED4 = CY;
dat <<= 1;
LED5 = CY;
dat <<= 1;
LED6 = CY;
dat <<= 1;
LED7 = CY;
}


工程师
2021-11-14 22:49:19 打赏
5楼

用结构体与共用体写较难理解,用函数写好理解。这是实际应用的一个函数:
void PX(unsigned char x)
{
P3&=0xc0; //低6位清0,P36、37不变
P3|=(x&0x3f); //P3低6位赋值
P2&=0xeb; //P24、22清0,其它位不变
P2|=((x>>3&0x10)|(x>>4&0x04));//P24、22赋值
}


工程师
2021-11-14 22:54:05 打赏
6楼

A=P1^0;//第0位
B=P2^0; //第一位
C=P3^0;
D=P4^0;
E=P5^0;
F=P6^0;
G=P7^0;
H=P8^0;//第七位
dat|=A;//第0位赋值
dat=(dat<<1)|A;
dat=(dat<<2)|B;
dat=(dat<<3)|C;
dat=(dat<<4)|D;
dat=(dat<<5|E;
dat=(dat<<6)|F;
dat=(dat<<7)|G;//第7位赋值
以上是从散装=》整个装
逆过程用&每位判断
一个思路希望对你有帮助


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]