嵌入式输入与输出代码的区别

本文详细介绍了如何在嵌入式系统中使用I/O端口进行按键和LED的初始化配置,涉及输入寄存器与输出寄存器的区别,以及如何通过GPIOA、GPIOE和GPIOC来控制PA0-PE4的按键和PC4-PC7的LED状态。
摘要由CSDN通过智能技术生成

编写按键的代码用到的是I/O端口的输入寄存器,与输出寄存器有所区别

输入:

/*

Function name:Key_Config

Description:按键的初始化

param:None

retval:None

Remarks:PA0,PE2,PE3,PE4 输出高KEY1;输出低KEY2,KEY,KEY4有反应

*/

void Key_Config(void)

{

RCC->AHB1ENR |=(1<<0);//打开PA时钟

GPIOA->MODER &=~(3<<0);//清零 输入

GPIOA->PUPDR &=~(3<<0);//无上下拉

RCC->AHB1ENR |=(1<<4);//打开PE时钟

GPIOE->MODER &=~(0x3f<<4);//清零 输入

GPIOE->PUPDR &=~(0x3f<<4);//无上下拉

}

输出:

/*

Function name:Led_Config

Description:灯的初始化

param:None

retval:None

Remarks:

PC4、PC5、PC6、PC7输出低 LED1、LED2、LED3、LED4亮

*/

void Led_Config(void)

{

RCC->AHB1ENR |=(1<<2);//打开PC时钟

GPIOC->MODER &=~(0xff<<8);//清零

GPIOC->MODER |=(0x55<<8);//通用输出

GPIOC->OTYPER &=~(0xf<<4);//推挽

GPIOC->OSPEEDR |=(0xaa<<8);//输出速度

GPIOC->PUPDR &=~(0xff<<8);//无上下拉

GPIOC->ODR |=(0xf<<4);//默认灭

}

与输出相比输入用的寄存器更少,更重要的是输出是给I/O端口置一和清零,而输入是从I/O口获取高低电平

输入:

#define KEY1 (GPIOA->IDR &(1<<0))

#define KEY2 !(GPIOE->IDR &(1<<2))

#define KEY3 !(GPIOE->IDR &(1<<3))

#define KEY4 !(GPIOE->IDR &(1<<4))

输出:

#define LED1_ON GPIOC->ODR &=~(1<<4)

#define LED1_OFF GPIOC->ODR |=(1<<4)

#define LED2_ON GPIOC->ODR &=~(1<<5)

#define LED2_OFF GPIOC->ODR |=(1<<5)

#define LED3_ON GPIOC->ODR &=~(1<<6)

#define LED3_OFF GPIOC->ODR |=(1<<6)

#define LED4_ON GPIOC->ODR &=~(1<<7)

#define LED4_OFF GPIOC->ODR |=(1<<7)

图1.按键原理图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值