椒盐时代 发表于 2013-2-4 10:51:11

改写一个C程序,关于15个IO口根据条件循环输出的问题。

15个IO 口对应 15个LED,根据条件1 的结果来决定15路IO 口的输出状态。
比如:
条件1
    成立LED1=1
    反之LED1=0

条件1 要循环15次,对应15个LED。

15个IO 口是
#define LED1      PORTA_Bit3
#define LED2      PORTA_Bit4
#define LED3      PORTA_Bit5
#define LED4      PORTA_Bit6
#define LED5      PORTA_Bit7
#define LED6      PORTG_Bit2
#define LED7      PORTC_Bit7
#define LED8      PORTC_Bit6
#define LED9      PORTC_Bit5
#define LED10   PORTC_Bit4
#define LED11   PORTC_Bit3
#define LED12   PORTC_Bit2
#define LED13   PORTC_Bit1
#define LED14   PORTC_Bit0
#define LED15   PORTG_Bit1


想做一个结构体或者数组之类的,让IO端口可以和条件1对应循环。
条件1(i0;i<15;i++)
{
LED ( i ) =1
}

else

{
LED ( i ) =0
}

lcw_swust 发表于 2013-2-4 10:51:12

楼主想用类似数组的方式去控制多个IO口?
可以呀,把LED的位定义到数组里,给端口赋值时就去取数组里的数就行了
#define BIT(x)    (1<<(x))
char pabit={BIT(3),BIT(4),BIT(5),BIT(6),BIT(7),0,0,0.....};//PORTA对应15个LED的位
char pcbit={0,0,0,0,0,0,BIT(7),BIT(6)......};
char pgbit={0,0,0,0,0,BIT(2),0......};
for(i=0;i<15;i++)
{
if(条件成立)
{
   PORTA|=pabit;
   PORTC|=pcbit;
   PORTG|=pgbit;
}
else
{
   PORTA&=~pabit;
   PORTC&=~pcbit;
   PORTG&=~pgbit;
}

}

椒盐时代 发表于 2013-2-4 11:46:45

lcw_swust 发表于 2013-2-4 11:36 static/image/common/back.gif
楼主想用类似数组的方式去控制多个IO口?
可以呀,把LED的位定义到数组里,给端口赋值时就去取数组里的数就 ...

谢谢解答
不过貌似不合适
因为每次只能一个IO口置位,即每次只能一个LED亮或灭。

比如
for (int i=0;i<15;i++)
{

if ( 1 < R[ i ] <10 )
{
LED[ i ] =0 ;
}
else
{
LED[ i ] =1 ;
}
}

里面的LED[ i ] 对应15个IO口。

lcw_swust 发表于 2013-2-4 11:55:24

椒盐时代 发表于 2013-2-4 11:46 static/image/common/back.gif
谢谢解答
不过貌似不合适
因为每次只能一个IO口置位,即每次只能一个LED亮或灭。


楼主啥意思呀,楼主给的程序跟我写的有区别吗?

yklstudent 发表于 2013-2-4 12:09:34

本帖最后由 yklstudent 于 2013-2-4 12:10 编辑

呵呵 好奇吧的想法
楼主的表达或者想法太含糊了

qwe2231695 发表于 2013-2-4 12:30:43

写一个LED控制函数,传入2个参数,一个是1、0开关,一个是LED的编号。 内部有两种方法实现,一个是用是switch语句判断端口号赋值。一个是定义一个16bit的变量如unsigned char 。进行位操作(用&与0的方法置0,用|或1的方法置1),然后赋值到端口。

椒盐时代 发表于 2013-2-4 15:21:00

lcw_swust 发表于 2013-2-4 11:55 static/image/common/back.gif
楼主啥意思呀,楼主给的程序跟我写的有区别吗?

非常感谢
是我看错了
程序没问题
顺利实现了目标。
谢谢指点啊~~~
页: [1]
查看完整版本: 改写一个C程序,关于15个IO口根据条件循环输出的问题。