void InitLED(uchar LEDx)//LED初始化函数 { if(LEDx == LED1) //P1_0 { P1SEL &= ~0x01; //仅将P1SEL第0位清0,P1_0定义为普通IO 1 << 0 是把1按2进制左移0位,结果还是 1 P1DIR |= 0x01; //仅将P1DIR第0位置1,P1_0定义为输出 } else if(LEDx == LED1) //P1_1 { P1SEL &= ~0x02; P1DIR |= 0x02; } }
时间: 2024-03-17 08:41:06 浏览: 95
在该函数中,if语句中的判断条件有误,造成了代码逻辑错误。第一个if语句中应该是判断LEDx是否为LED1,第二个else if语句中应该是判断LEDx是否为LED2。因此,正确的函数代码如下所示:
```
void InitLED(uchar LEDx)//LED初始化函数
{
if(LEDx == LED1) //P1_0
{
P1SEL &= ~0x01; //仅将P1SEL第0位清0,P1_0定义为普通IO
P1DIR |= 0x01; //仅将P1DIR第0位置1,P1_0定义为输出
}
else if(LEDx == LED2) //P1_1
{
P1SEL &= ~0x02;
P1DIR |= 0x02;
}
}
```
相关问题
#include "LED.h" #include <iocc2530.h> void DelayMS(uint msec)//延迟函数 { uint i,j; for(i=0;i<msec;i++) for(j=0;j<535;j++); } void InitLED(uchar LEDx)//LED初始化函数 { if(LEDx == LED1) //P1_0 { P1SEL &= ~0x01; //仅将P1SEL第0位清0,P1_0定义为普通IO 1 << 0 是把1按2进制左移0位,结果还是 1 P1DIR |= 0x01; //仅将P1DIR第0位置1,P1_0定义为输出 } else if(LEDx == LED1) //P1_1 { P1SEL &= ~0x02; P1DIR |= 0x02; } } void SetLED(uchar LEDx,uchar state) { if(LEDx == LED1){ //P1_0的LED灯 if(state == ON) //打开 LED1_PRO = ON; if(state == OFF) //关闭 LED1_PRO = OFF; } else if(LEDx == LED2){//P1_1的LED灯 if(state == ON) //打开 LED1_PRO = ON; if(state == OFF) //关闭 LED1_PRO = OFF; } }
这是一个LED控制的代码文件,其中包含了DelayMS、InitLED和SetLED三个函数。DelayMS函数用于实现延时操作,InitLED函数用于初始化LED控制引脚,SetLED函数用于控制LED的亮灭状态。在InitLED函数中,通过判断LEDx的值,选择对应的LED控制引脚进行设置。在SetLED函数中,通过判断LEDx和state的值,选择对应的LED控制引脚进行状态设置。
/******************* 流水灯功能 ********************/ #ifndef LED_H_ #define LED_H_ typedef unsigned char uchar; typedef unsigned int uint; #define LED1 0 #define LED2 1 #define LED0_PRO P1_0 #define LED1_PRO P1_1 #define ON 1 #define OFF 0 void DelayMS(uint msec); void InitLED(uchar LEDx); void SetLED(uchar LEDx,uchar state); #endif
这是一个头文件,定义了LED的相关操作函数。该头文件中使用了条件编译,保证该头文件只会被编译一次,防止重复定义。其中定义了两个类型别名uchar和uint,分别代表unsigned char和unsigned int。另外定义了LED1和LED2的编号,以及LED0_PRO和LED1_PRO表示LED的控制引脚。同时定义了ON和OFF表示LED的亮灭状态,以及DelayMS函数用于延时,InitLED函数用于初始化LED,SetLED函数用于设置LED的状态。
阅读全文