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引脚输出低电平
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值