stm8 GPIO按键输入

本文介绍了如何使用STM32单片机进行按键输入初始化、按键读取函数编写以及延时函数实现。通过阅读本教程,您将了解如何配置GPIO口、初始化按键并实现按键扫描功能,同时掌握简单的延时技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:配置GPIO

在点亮第一个LED章节已经讲解了GPIO口的操作,下面我们再来看一个寄存器:

 

这个寄存器只能读。越看越像msp430的操作了。

下面之间看按键初始化和按键读取函数:

void Key_Init(void)
{
  PD_DDR &= 0x7F;  //PD7 输入      PD_DDP第7位置0
  PD_CR1 |= 0x80;    //带上拉输入    PD_CR1第7位置1 
  PD_CR2 &= 0x7F;   //禁止外部中断  PD_CR2第7位置0
}
void Key_Scan(void)
{
  if(PD_IDR_IDR7==0)   
  {
    delay_ms(20);   //延时消抖
    if(PD_IDR_IDR7==0)  //读取PD7的输入状态
    {
      PE_ODR^=0x20;   //PE5取反
    }
  }
}
按键读取函数是不是很像以前写51的程序那样?呵呵 O(_)O~

为什么用PD_IDR_IDR7

打开头文件IOSTM8S105K4.h,是不是看见里面有好多的 Port A bit fields 的内容?PBPC和其他端口和其他外设的也有。


其实端口都可以直接位操作,一般人我不告诉他。O(_)O哈哈

例如PA0设置为输出输、出高电平:

PA_DDR_DDR0 = 1;  //设置PA0为输出
PA_CR1_C10 = 1;    //可以不写这句 为什么?自己看手册
PA_CR2_C20 = 1;    //推挽输出最大速度10MHz
PA_ODR_ODR0 = 1;  //PA0输出高电平

其实这个也是我看了头文件后感觉有些奇怪,有些像msp430;管他像什么,试试再说,哈哈,果然可以。


再给大家一个延时函数,这个是我自己用示波器测量出来了。 

/*延时xms函数@ HSI  2MHz*/
void delay_ms(u16 xms)
{
  u16 i,j;
  for(i=xms;i>0;i--)
   for(j=330;j>0;j--)   //330这个参数可能单片机内部HSI有差异会不同
   {
      asm("nop");    
   }
}

第二步:下载调试

再看主函数:

int main( void )
{
  System_Init();
  Key_Init();
  Gpio_Init();
  while (1)
  {
    Key_Scan();
  }
}

编译下载,按动按键后PE5口的LED灯点亮或是熄灭。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值