当 I/O 输出低电平时,LED 导通,LED被点亮;当 I/O 输出高点平时,LED 截止,LED 熄灭;当 I/O 周期性的交替输出高电平、低电平,LED就会闪烁
void InitLED(void)
{
PC_DDR|=0x08;//设置 PC3 为输出模式
PC_CR1|=0x08;//设置 PC3 为推挽输出
PC_CR2|=0x00;//设置 PC3 为 10MHz 快速输出
PE_DDR|=0x01;//设置 PE0 为输出模式
PE_CR1|=0x01;//设置 PE0 为推挽输出
PE_CR2|=0x00;//设置 PE0 为 10MHz 快速输出
PD_DDR|=0x08;//设置 PD3 为输出模式
PD_CR1|=0x08;//设置 PD3 为推挽输出
PD_CR2|=0x00;//设置 PD3 为 10MHz 快速输出
}
void main( void )
{
InitLED(); //初始化 LED 端口
while(1)
{
PC_ODR&=0xF7;//PC_ODR 第 3 位清零,输出低电平
PE_ODR&=0xFE; //PE_ODR 第 0 位清零,输出低电平
PD_ODR&=0xF7; //PD_ODR 第 3 位清零,输出低电平
Delay(5000); //延时
PC_ODR|=0x08;//PC_ODR 第 3 位置位,输出高电平
PE_ODR|=0x01; //PE_ODR 第 0 位置位,输出高电平
PD_ODR|=0x08; //PD_ODR 第 3 位置位,输出高电平
Delay(5000); //延时
}
}
在代码中出现的|=是在嵌入式 C 语言开发中比较常用的位操作方式,PC_DDR|=0x08;这句代码用来将PC_DDR寄存器的[3]位置位,而不影响寄存器的其他位。这句代码实质上是将 PC_DDR寄存器的值与0x08进行或操作,然后再赋值给 PC_DDR 寄存器。
在程序中出现的&=也是嵌入式 C 语言中比较常用的位操作方式,它用来将某位清零,而不影响寄存器的其他位。它实质上是将寄存器的值与等号后面的值进行与操作,然后再赋值给寄存器。
位操作
#include "iostm8s208mb.h"//主控芯片的头文件
/************************常用数据类型定义*************************/
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
/*************************端口/引脚定义区域***********************/
#define LED PI_ODR_ODR0//连接至LED引脚PI0
/**************************函数声明区域***************************/
/**************************主函数区域*****************************/
void main(void)
{
PI_DDR_DDR0=1; //配置PI0端口为输出模式
PI_CR1_C10=1; //配置PI0端口为推挽输出模式
PI_CR2_C20=0; //配置PI0端口低斜率输出2MHz
LED=0; //让PI0引脚输出低电平
}