STM32多个IO口的指针操作----多LED点亮程序

本文介绍了一种通过定义宏来控制32个IMU模块的红绿LED的状态的方法。通过对输入的状态数组进行解析,实现对每个IMU模块的LED状态进行更新。此方法适用于嵌入式系统的状态指示。
#define  IMU1_R						PGout(13)	
#define  IMU1_G						PGout(12)	
#define  IMU5_R						PFout(12)	//5
#define  IMU5_G						PFout(11)	
#define  IMU9_R						PGout(9)
#define  IMU9_G						PDout(5)		
#define  IMU13_R					PDout(6)	
#define  IMU13_G					PDout(3)	
#define  IMU17_R					PEout(11)	
#define  IMU17_G					PEout(12)		
#define  IMU21_R					PDout(1)	
#define  IMU21_G					PDout(4)	
#define  IMU25_R					PBout(13)	//7
#define  IMU25_G					PEout(15)
#define  IMU29_R					PCout(8)		
#define  IMU29_G					PAout(12)
///USART3
#define  IMU2_R						PFout(1)		//9
#define  IMU2_G						PFout(0)
#define  IMU6_R						PEout(1)	//6
#define  IMU6_G						PCout(13)
#define  IMU10_R					PCout(5)
#define  IMU10_G					PBout(0)	
#define  IMU14_R					PGout(0)	
#define  IMU14_G					PGout(1)
#define  IMU18_R					PEout(9)					//13
#define  IMU18_G					PEout(8)
#define  IMU22_R					PGout(6)	
#define  IMU22_G					PGout(5)	
#define  IMU26_R					PDout(12)	
#define  IMU26_G					PDout(15)	
#define  IMU30_R					PGout(2)	
#define  IMU30_G					PGout(4)	//16
//USART4
#define  IMU3_R						PFout(5)	   //17
#define  IMU3_G						PFout(4)
#define  IMU7_R						PFout(10)	
#define  IMU7_G						PCout(0)	
#define  IMU11_R					PBout(8)	
#define  IMU11_G					PBout(7)	
#define  IMU15_R					PGout(14)	   //20
#define  IMU15_G					PGout(15)
#define  IMU19_R					PFout(14)	
#define  IMU19_G					PFout(13)	
#define  IMU23_R					PBout(14)	
#define  IMU23_G					PDout(9)	
#define  IMU27_R					PGout(8)	
#define  IMU27_G					PGout(7)
#define  IMU31_R					PCout(3)		//24	
#define  IMU31_G					PCout(2)
//USART5
#define  IMU4_R						PFout(7)	//25
#define  IMU4_G						PFout(8)	
#define  IMU8_R						PFout(3)	
#define  IMU8_G						PFout(2)	
#define  IMU12_R					PEout(0)	
#define  IMU12_G					PBout(9)	
#define  IMU16_R					PBout(6)    ///28
#define  IMU16_G					PBout(5)		
#define  IMU20_R					PGout(11)	
#define  IMU20_G					PGout(10)	
#define  IMU24_R					PAout(11)	
#define  IMU24_G					PDout(0)	
#define  IMU28_R					PDout(11)	
#define  IMU28_G					PDout(8)	
#define  IMU32_R					PCout(7)	
#define  IMU32_G					PCout(6)	



volatile unsigned long  *IMUxG_buff[32] = {
	&IMU1_G,&IMU2_G,&IMU3_G,&IMU4_G,&IMU5_G, \
	&IMU6_G,&IMU7_G,&IMU8_G,&IMU9_G,&IMU10_G, \
	&IMU11_G,&IMU12_G,&IMU13_G,&IMU14_G,&IMU15_G, \
	&IMU16_G,&IMU17_G,&IMU18_G,&IMU19_G,&IMU20_G, \
	&IMU21_G,&IMU22_G,&IMU23_G,&IMU24_G,&IMU25_G, \
	&IMU26_G,&IMU27_G,&IMU28_G,&IMU29_G,&IMU30_G, \
	&IMU31_G,&IMU32_G
};

volatile unsigned long  *IMUxR_buff[32] = {
	&IMU1_R,&IMU2_R,&IMU3_R,&IMU4_R,&IMU5_R, \
	&IMU6_R,&IMU7_R,&IMU8_R,&IMU9_R,&IMU10_R, \
	&IMU11_R,&IMU12_R,&IMU13_R,&IMU14_R,&IMU15_R, \
	&IMU16_R,&IMU17_R,&IMU18_R,&IMU19_R,&IMU20_R, \
	&IMU21_R,&IMU22_R,&IMU23_R,&IMU24_R,&IMU25_R, \
	&IMU26_R,&IMU27_R,&IMU28_R,&IMU29_R,&IMU30_R, \
	&IMU31_R,&IMU32_R
};

static u8  IMUxR_Offnumber[32] = {0};

void imuStateLED(u8 *stateLED1)
{

	u8 imuStateLED_i = 0;

	for(imuStateLED_i = 0;imuStateLED_i<32;imuStateLED_i++)
	{
		*IMUxG_buff[imuStateLED_i] = stateLED1[imuStateLED_i]&0x01;
//		*IMUxR_buff[imuStateLED_i] = (~stateLED1[imuStateLED_i])&0x01;
		
		if((~stateLED1[imuStateLED_i])&0x01)
		{
			if(IMUxR_Offnumber[imuStateLED_i] < 5)
				IMUxR_Offnumber[imuStateLED_i]++;
			else 
			{
				*IMUxR_buff[imuStateLED_i] = (~stateLED1[imuStateLED_i])&0x01;
			}
		}	
		else 
		{
			*IMUxR_buff[imuStateLED_i] = 0;
			IMUxR_Offnumber[imuStateLED_i] = 0;
		}
	}
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值