请问,我在test.C里面参照例程写的寄存器版本为何只有两个按键能按,控制两个灯同时开关的不行,stm32mini的
#include <stm32f10x.h>
#include "sys.h"
#include "delay.h"
#define KEY1 (1<<13)
#define KEY2 (1<<15)
#define KEY3 (1<<0)
#define KE1 ((GPIOA->IDR&KEY1)?1:0) /*1??????0????*/
#define KE2 ((GPIOA->IDR&KEY2)?1:0) /*1??????0????*/
#define KE3 ((GPIOA->IDR&KEY3)?1:0) /*0??????1????*/
int key_get(void)
{
static int j=1;
if(j&&(KE3==1||KE2==0||KE1==0))
{ j=0;delay_ms(100);
if(KE1==0)
{return(1);}
else if(KE2==0)
{return(2);}
else if(KE3==1)
{return(3);}
}
else if(KE1==1&&KE2==1&&KE3==0)
{ j=1;return(0);}
}
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<5;
GPIOA->CRH&=0xFFFFFFF0;
GPIOA->CRH|=0x00000003;
GPIOA->ODR|=1<<8;
GPIOD->CRL&=0xFFFFF0FF;
GPIOD->CRL|=0x00000300;
GPIOD->ODR|=1<<2;
GPIOA->CRL&=0xFFFFFFF0;
GPIOA->CRL|=0x00000008;
GPIOA->CRH&=0x0F0FFFFF;
GPIOA->CRH|=0x80800000;
GPIOA->ODR|=1<<13;
GPIOA->ODR|=1<<15;
while(1)
{
int t;
static int i=0,z=0,k=0;
t=key_get();
if(t)
{
switch(t)
{
case 1:{i^=1;if(i==1) GPIOA->ODR&=(~(1<<8));else GPIOA->ODR|=(1<<8);} break;
case 2:{z^=1;if(z==1) GPIOD->ODR&=(~(1<<2));else GPIOD->ODR|=(1<<2);} break;
case 3:{k^=1;if(k==1) {GPIOD->ODR&=(~(1<<2));GPIOA->ODR&=(~(1<<8));}
else if(k==0) GPIOA->ODR|=(1<<8);GPIOD->ODR|=(1<<2);} break;
case 0: break;
}
}
}
}
|