初级会员

- 积分
- 126
- 金钱
- 126
- 注册时间
- 2016-2-18
- 在线时间
- 18 小时
|
1金钱
我在自己写按键控制STM32MINI板上的LED灯闪灭时,出现一些小BUG, ,不是灯点不亮那么低级的问题,但本来按一下KEY1时DS0应该亮,但有时DS0会闪烁,而不是变亮。倾囊相求大神指点江山。。。主程序如下,后面还有两个.c程序和.h程序
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "sys.h"
//#include "usart.h"
int main(void)
{
int r=1,n=1;
PAout(8)=1;
PDout(2)=1;
delay_init();
ledinit();
keyinit();
while(1)
{
r=PAin(15);
n=PCin(5);
if(r==0)
{
delay_ms(20);
if(r==0)
{
PAout(8)=0;
r=1;//不能用r++,由于程序运行快会出现bug(灯闪烁)
n=1;//不加这行程序也会出现bug(灯闪烁原因之二)
}
//r=1;
n=1;
}
//r++;
//r=1;
if(n==0)
{
delay_ms(20);
if(n==0)
{
PAout(8)=1;
n=1;
r=1;
}
n=1;
}
n=1;
//n++;
//PAout(8)=0;
//delay()
}
}
.c文件之一
#include "stm32f10x.h"
//#include "led.h"
#include "key.h"
//#include ""
void keyinit(void)
{
//void ledinit();
RCC->APB2ENR|=1<<4;//使能PORTC时钟
GPIOC->CRL&=0xFFF0FFFF;
GPIOC->CRL|=0x00080000;
GPIOC->IDR|=1<<5;
}
key.h
#ifndef __KEY_H
#define __KEY_H
void keyinit(void);
#endif
.c文件之二
#include "stm32f10x.h"
#include "led.h"
//#include "delay.h"
void ledinit()
{
RCC->APB2ENR|=1<<2;//使能PORTA时钟
RCC->APB2ENR|=1<<5;//使能PORTD时钟
//JTAG_Set(SWD_ENABLE);
GPIOA->CRL&=0x0FFFFFF0;
GPIOA->CRL|=0x80000008;
GPIOA->IDR|=1<<0;
GPIOA->IDR|=1<<15;//设置输入使能,上下拉输入
GPIOA->CRH&=0x0FFFFFF0;
GPIOA->CRH|=0x80000003;
GPIOA->ODR|=1<<8;
GPIOD->CRL&=0xFFFFF0FF;
GPIOD->CRL|=0X00000300;
GPIOD->ODR|=1<<2;
}
led.h文件
#ifndef __LED_H
#define __LED_H
void ledinit(void);
#endif
|
|