初级会员

- 积分
- 88
- 金钱
- 88
- 注册时间
- 2015-5-26
- 在线时间
- 0 小时
|
5金钱
#include "key.h"
#include "delay.h"
void keyinit()
{
RCC->APB2ENR|=(1<<2); //开PA使能
GPIOA->CRH|=0X80800000; //设置PA13,15为输入,上拉/下拉模式
GPIOA->ODR&=0X5FFF; //初始化PA13,15
GPIOA->ODR|=0XA000; //设置PA13,15上拉输入
GPIOA->CRL|=0X00000008; //设置PA0为输入,上拉/下拉模式
}
void keyscan()
{
uint8_t num;
if(!(GPIOA->IDR&(0X8000))) //PA15 KEY1
{
delay_ms(10);
if(!(GPIOA->IDR&(0X8000)))
GPIOD->ODR=~GPIOD->ODR;
while(!(GPIOA->IDR&(0X8000)));
}
else if(!(GPIOA->IDR&(0X2000))) //PA13 KEY0
{
delay_ms(10);
if(!(GPIOA->IDR&(0X2000)))
GPIOC->ODR=~GPIOC->ODR;
while(!(GPIOA->IDR&(0X2000)));
}
else if(GPIOA->IDR&(0X0001)) //PA0 KEY2
{
delay_ms(10);
if(GPIOA->IDR&(0X0001))
{
num++;
if(num/2==0)
{
GPIOA->BRR|=0X0100;
}
else
{
GPIOA->BSRR|=(0X00000100);
}
if(num>=10)
{
num=0;
}
}
while(GPIOA->IDR&(0X0001));
}
}
#include "led.h"
void LED_Init(void){
RCC->APB2ENR|=(1<<2); //A8
RCC->APB2ENR|=1<<4; //C12
RCC->APB2ENR|=1<<5; //D2
GPIOA->CRH&=0xfffffff0; //LED中
GPIOA->CRH|=0x00000003;
GPIOA->ODR|=(1<<8);
GPIOC->CRH&=0xfff0ffff; //LED右
GPIOC->CRH|=0x00030000;
GPIOC->ODR|=(1<<12);
GPIOD->CRL&=0xfffff0ff; //LED左
GPIOD->CRL|=0x00000300;
GPIOD->ODR|=(1<<2);
}
#include "led.h"
#include "delay.h"
#include "key.h"
int main(void)
{
uint8_t kk;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
keyinit(); //键盘初始化
while(1)
{
kk=keyscan();
switch(kk)
{
case 1: GPIOC->ODR^=(1<<12);break;
case 2: GPIOA->ODR^=(1<<8); break;
case 3: GPIOD->ODR^=(1<<2); break;
}
}
}
为什么下拉输入不好使?
|
|