OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 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 跳转至

回复

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