[mw_shl_code=c,true]test_key.c文件中
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
key_init();
led_init();
led0 = led1 = 1;
while(1)
{
light_on(key_num());
}
}
key.c文件中
#include "key.h"
#include "delay.h"
void key_init(void)
{
RCC->APB2ENR |= 1<<2; //PA??APB2ENR????bit2
GPIOA->CRH &= 0X0F0FFFFF; //8~15????CRH????PA13??PA15
GPIOA->CRH |= 0X80800000; //PA13??PA15????????
GPIOA->ODR |= 1<<13; //PA13?????±??????????
GPIOA->ODR |= 1<<15; //PA15?????±??????????
GPIOA->CRL &= 0XFFFFFFF0; //0~7????CRL
GPIOA->CRL |= 0X00000008; //PA0????????
// GPIOA->ODR |= 0<<0; //PA0?????±??????????
/***********?????í????PA0???????????ò??????????????????????**************/
}
u8 key_num(void)
{
u8 num,key_lock = 0; //????°??ü×?×???
if(key_lock == 0 && (key0 == 0 || key1 == 0 || key_wk_up == 1))
{
delay_ms(10);
key_lock = 1;
if(key0 == 0)
num = 0;
else if(key1 == 0)
num = 1;
else if(key_wk_up == 1)
num = 2;
}
else if(key0 == 1 || key1 == 1 || key_wk_up == 0)
{
key_lock = 0;
}
return num;
}
key.h文件中
#ifndef _KEY_H_
#define _KEY_H_
#include "sys.h"
#define key0 PAin(13)
#define key1 PAin(15)
#define key_wk_up PAin(0)
void key_init(void);
u8 key_num(void);
#endif
led.c文件中
#include "led.h"
void led_init(void)
{
RCC->APB2ENR |= 1<<2; //PA????
RCC->APB2ENR |= 1<<5; //PD????
GPIOA->CRH &= 0XFFFFFFF0; //8~15????CRH
GPIOA->CRH |= 0X00000003; //0X3???ì????
GPIOA->ODR |= 1<<8; //?????±??????????
GPIOD->CRL &= 0XFFFFF0FF; //0~7????CRL
GPIOD->CRL |= 0X00000300; //0X3???ì????
GPIOD->ODR |= 1<<2; //?????±??????????
}
void light_on(u8 num)
{
switch(num)
{
case 0:
led0 = 0;
break;
case 1:
led1 = 0;
break;
case 2:
led0 = led1 = 1;
break;
default:
break;
}
}
led.h文件中
#ifndef _LED_H_
#define _LED_H_
#include "sys.h"
#define led0 PAout(8)
#define led1 PDout(2)
void led_init(void);
void light_on(u8);
#endif
[/mw_shl_code]
不知道是不是代码中的问题(刚学着写的,可能会有一些低级错误而我不知道的,还望指点,勿喷) |