刚学习
STM32,想用一片164
芯片和一片138控制64个LED,实现跑马灯效果,以下是自己写的程序,请问,能在138控制部分简化下程序吗?IO是用GPIOB控制的。
//164部分
for(i=0;i<8;i++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_14);//CLK==0
if((data&&0x80)==0x00)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
}
else
{
GPIO_SetBits(GPIOB,GPIO_Pin_13);
}
GPIO_SetBits(GPIOB,GPIO_Pin_14);//CLK==1
//138部分
GPIO_ResetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);//A=0,B=0,C=0
delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_10);//A=1
GPIO_ResetBits(GPIOB,GPIO_Pin_11|GPIO_Pin_12);//B=0,C=0
delay_ms(100);
GPIO_ResetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_12);//A=0,C=0
GPIO_SetBits(GPIOB,GPIO_Pin_11);//B=1
delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);//A=1,B=1
GPIO_ResetBits(GPIOB,GPIO_Pin_12);//C=0
delay_ms(100);
GPIO_ResetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);//A=0,B=0
GPIO_SetBits(GPIOB,GPIO_Pin_12);//C=1
delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_12);//A=1,C=1
GPIO_ResetBits(GPIOB,GPIO_Pin_11);//B=0
delay_ms(100);
GPIO_ResetBits(GPIOB,GPIO_Pin_10);//A=0
GPIO_SetBits(GPIOB,GPIO_Pin_11|GPIO_Pin_12);//B=1,C=1
delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);//A=1,B=1,C=1
delay_ms(100);
data=data<<1;
//delay_ms(2000);
}
假設t=1的時候 你有10個LED 1 3 5 7 9要點亮 2 4 6 8 10要熄滅
那麼可以設定array1中第一個為{gpio1|gpio3|gpio5|gpio7|gpio9,...}
array2中第一個為{gpio2|gpio4|gpio6|gpio8|gpio10,...}
那麼在for loop之中只要設定即可
setbit(array1)
resetbit(array2)
而上面的範例只是個別點亮跟熄滅,不同時間區端設定一樣可以的
像如果上面是那樣
t=0.5時候是
array1的index=0的值
t=1的時候是
array2的index=0的值
那麼 這兩種設定方式 在t=1的時候 組態是一樣的 都是1 3 5 7 9 點亮 2 4 6 8 10熄滅
範例只是拆解而已,分解順序一樣可以做到這件事,因為點亮的function本來就是循序執行(sequential)
一周热门 更多>