欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言通過數組控制不同的單片機IO口 [打印本頁]

作者: 南校貂    時間: 2020-12-18 11:16
標題: C語言通過數組控制不同的單片機IO口
本帖最后由 南校貂 于 2020-12-19 00:18 編輯

在做彩燈遇到的一個問題,需要用到51 所有IO口(32個),想用for循環通過較少的代碼實現IO口控制
例如這樣:

sbit LED1 P0^0;
sbit LED2 P0^1;
sbit LED3 P0^2;

int LED[ = {LED1, LED2, LED3};

void one(u8 z)
{
     u8 x;
     x = 0;     LED(x) = 0;
     x++;               
     if(x = 3)
       x = 0;             //這里的代碼有點亂,但不是需要解決的問題
                                //需要解決的問題是,當x不同時,通過給數組成員LED(x)賦值,然后達到控制對應IO口的目的
                               // 如果能實現,就可以根據x的值來給對應的IO口進行控制,如不是想控制那個IO口時都需要寫出來
                           
}
   
例如想讓LED1/2/3依次亮起來
for(x=3;x>0;x--)
{
    LED(x)=0;
    delay(200);
    LED(x)=1;
}
傳統的話只能將LED1/2/3一個一個打出來,或者通過位移。當IO口過多的時候就不好用了、需要很多的代碼,移植性不強。


在定義數組和IO口的關系的時候需要通過指針或者其他的一些方法嗎?
不知道提出的這個問題可不可行,小白一枚望大佬們多多指教!!!






作者: xianfajushi    時間: 2020-12-18 12:57
參考這里計算機流水燈就知道了https://blog.csdn.net/xianfajushi/article/details/82279726
作者: zhai1995    時間: 2020-12-18 14:22
u8 x;  你這個是不是靜態變量, 每次進void one()  這個函數, x都是0;所以
     x++;
     if(x = 3)
       x = 0;
這里沒作用
作者: glinfei    時間: 2020-12-18 15:19
你那個不行啊,本來直接移位就行,沒必要定義數組。
如 P0<<i;  或者做一些位運算。

作者: glinfei    時間: 2020-12-18 15:27
另外,反寫是可以的,但看不出意義:
char LED[3] = {0x01,0x02,0x04}; //只三個口

void one()
{
     u8 x;
     x = 0;
    while(x<3) //這是死循環啊
   {
     P0= LED(x); //分別置1
     x++;
     if(x = 3)
       x = 0;   
   }
}
作者: wangyuejia2015    時間: 2020-12-18 18:08
執行一次for循環
作者: yauxiacao    時間: 2020-12-18 18:48
u32 pbuf;
void main()
{
    pbuf=0x01;
   
    while(1)
    {

    }

}
作者: 南校貂    時間: 2020-12-19 00:03
glinfei 發表于 2020-12-18 15:19
你那個不行啊,本來直接移位就行,沒必要定義數組。
如 P0

是可以通過位移實現,但在開發更多的亮燈方式的時候還是需要很多代碼的,而且移植性不強。
作者: wulin    時間: 2020-12-19 08:37
南校貂 發表于 2020-12-19 00:03
是可以通過位移實現,但在開發更多的亮燈方式的時候還是需要很多代碼的,而且移植性不強。

32個IO口組合LED用4維數組。
作者: 南校貂    時間: 2020-12-20 13:10
wulin 發表于 2020-12-19 08:37
32個IO口組合LED用4維數組。

這個怎么操作呀




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1