STM8 点亮第一个发光二极管

当 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引脚输出低电平

}

关键字:     编辑:什么鱼 引用地址:

发表评论

邮箱地址不会被公开。 必填项已用*标注