2回答

0收藏

STM32之 按键输入教学

STMCU STMCU 3996 人阅读 | 2 人回复 | 2012-08-08

现在来做按键输入基本和点亮LED。
以下是按键输入,按键处理部分的代码.
#include <stm32f10x_lib.h>
#include "key.h"
#include "delay.h"
//按键输入
#define KEY1 (1<<6) //PC6
#define KEY2 (1<<7) //PC7
#define KEY3 (1<<8) //PC8
//按键初始化函数
//PC.6.7.8 设置成带上拉的输入
void key_init(void)
{
RCC->APB2ENR|=1<<4;    //使能PORTC时钟
GPIOC->CRL&=0X00FFFFFF;//PC6.7设置成输入   
GPIOC->CRL|=0X88000000;  

GPIOC->CRH&=0XFFFFFFF0;//PC8,设置成输入
GPIOC->CRH|=0X08;
               
    GPIOC->ODR|=0X1C0;    //PC 6 7 8 上拉输入
}  
//按键处理函数
u8 key_scan(void)
{  
static u8 key_up=1;//按键按松开标志
u16 key_val=(GPIOC->IDR>>6)&0X07;   
if(key_up&&key_val<7)//有按键按下
{
  delay_ms(10);//去抖动
  key_up=0;
   key_val=(GPIOC->IDR>>6)&0X07;  
  switch(key_val)
  {
   case 6: return 1;
   case 5: return 2;
   case 3: return 3;
  }
}else if(key_val==7)key_up=1;   
return 0;// 无按键按下
}
主函数:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"  
#include "delay.h"  
#include "key.h"  
#include "led.h"
//正点原子
//2009/12/23      
int main(void)
{
u8 time="0";   
u8 L0=0,L1=0,L2=0;
Stm32_Clock_Init(9);//72M
delay_init(72);     //延时初始化
//uart_init(72,9600); //设置波特率
led_init();   
    while (1)
    {
  switch(key_scan())
  {
   case 1 : LED0_SET(L0);L0=!L0;break;
   case 2 : LED1_SET(L1);L1=!L1;break;
   case 3 : LED2_SET(L2);L2=!L2;break;
  }        
  time++;
  if(time==100)LED3_SET(0);
     else if(time==200)
  {
   LED3_SET(1);
   time=0;
  }
  delay_ms(5);               
    }
}

源码.rar (539.72 KB, 下载次数: 18)

针对STMSKY网络开发板的代码.rar (538.62 KB, 下载次数: 16)


按键输入效果:

分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

one棉花糖one

发表于 2014-12-8 08:37:43 | 只看该作者

我是来赚铜板的
板凳

alicehxong

发表于 2015-10-29 23:45:30 | 只看该作者

我也来赚钱学习啊
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条