使用位带别名区点亮led灯-学习笔记10

1、位带别名区计算公式为:(GPIOA_IDR_ADDR&0xf0000000)+0x02000000+((GPIOA_IDR_ADDR&0x00ffffff)<<5)+(n<<2)

2、位带别名区参考《CM3权威指南CnR2》

3、灯led、按键key与上节学习笔记9类似,就不贴出了。

#include "stm32f10x.h"
#include "led.h"
#include "key.h"
void delay(uint32_t x);
#define GPIOB_ODR_ADDR	(GPIOB_BASE+0X0C)
#define GPIOA_IDR_ADDR	(GPIOA_BASE+0X08)
#define GPIOC_IDR_ADDR	(GPIOC_BASE+0X08)

#define key1	0//按键1是pin0
#define key2	13//按键2是pin13
#define KEY1_in(n) *(unsigned int *)((GPIOA_IDR_ADDR&0xf0000000)+0x02000000+((GPIOA_IDR_ADDR&0x00ffffff)<<5)+(n<<2))//位带操作计算公式
#define KEY2_in(n) *(unsigned int *)((GPIOC_IDR_ADDR&0xf0000000)+0x02000000+((GPIOC_IDR_ADDR&0x00ffffff)<<5)+(n<<2))//位带操作计算公式
#define LED_R_Pin 5
#define LED_G_Pin 0
#define LED_B_Pin 1

#define LED_out(n) *(unsigned int *)((GPIOB_ODR_ADDR&0xf0000000)+0x02000000+((GPIOB_ODR_ADDR&0x00ffffff)<<5)+(n<<2))//位带操作计算公式
	
int main(void)
{
	key_config( 1, 1);//独立按键初始化配置
	LED_config( 1,1,1);//led灯初始化配置
	while(1)
	{
		if(KEY1_in(key1))//判断是否有按键1按下
		{
			LED_out(LED_R_Pin)=LED_ON;//关闭红灯
			while(KEY1_in(key1));//松手检测
		}
		else
		{
			LED_out(LED_R_Pin)=LED_OFF;//点亮红灯
		}
		if(KEY2_in(key2))//判断是否有按键2按下
		{
			LED_out(LED_B_Pin)=LED_ON;
			while(KEY2_in(key2));
		}
		else
		{
			LED_out(LED_B_Pin)=LED_OFF;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金丝草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值