OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6065|回复: 5

求......指教 我的LED等不对呀

[复制链接]

22

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2012-11-3
在线时间
0 小时
发表于 2012-12-19 21:23:40 | 显示全部楼层 |阅读模式

int main()
{
 SysCLK_init();   //系统时钟初始化
 Key_init();   //Key初始化
 Led_init();      //LED初始化
 while(1)
 {
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0)    //判断Key0键是否按下
  {
   delay_ms(10);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0)
   {
    GPIO_SetBits(GPIOB,GPIO_Pin_5); 
    GPIO_ResetBits(GPIOE,GPIO_Pin_5); //如果Key0按下,LED0灭,LED1亮
   }
  }
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)    //判断Key1键是否按下
  {
      delay_ms(10);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)
   {
    GPIO_SetBits(GPIOE,GPIO_Pin_5);
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);   //如果Key1按下,LED0亮,LED1灭
   }
  } 
  if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0)         //判断Key2键是否按下
  {
   delay_ms(10);
   if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0)
   {
    GPIO_ResetBits(GPIOE,GPIO_Pin_5);
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);     //如果Key2按下,LED1,LED2都亮  
    }
  }
 }    
}
我这段程序不知道哪里错了,按键按下去等要先变暗在等2S左右才灭................

 

我决定的事,决定放弃。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-19 22:34:52 | 显示全部楼层
你的delay函数是不是有问题,光看这个代码,看不出问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2012-11-3
在线时间
0 小时
 楼主| 发表于 2012-12-20 07:00:19 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
#include "stm32f10x.h"
#include "SysCLK.h"

void SysCLK_init()
{
RCC_DeInit();       //RCC默认缺省值
RCC_HCLKConfig(RCC_SYSCLK_Div1);  //HCLK = System Clock
RCC_PCLK1Config(RCC_HCLK_Div2);      //APB1 = HCLK/2
RCC_PCLK2Config(RCC_HCLK_Div1);  //APB2 = HCLK
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_16);   //PLL的输入时钟 = HSI/2,PLL的输出时钟 = 4 * 16 =64MHz
RCC_PLLCmd(ENABLE);             //PLL使能
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        //选择PLLCLK作为系统时钟
while(RCC_GetSYSCLKSource() != 0x08);       //等待PLLCLK作为系统时钟设置成功
}


void delay_ms(unsigned int t)
{
unsigned int temp;
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);      //SysTick的输入时钟 = HCLK/8    8MHz
SysTick->LOAD  = t * 8000;   //延时 t ms  装载值最大0X00FFFFFF,这里最大延时2097 ms ~ 2 s
SysTick->VAL = 0x00;                //清空计数器的值
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;    //开始计数     SysTick是减计数器
do 
    { 
temp=SysTick->CTRL; 
    } 
    while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;     //计数失能
SysTick->VAL = 0x00;  //清空计数器
}
我决定的事,决定放弃。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-20 10:34:25 | 显示全部楼层
把while改成这样,测试下你的delay
while
{
     GPIO_SetBits(GPIOB,GPIO_Pin_5);
     delay_ms(500);
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);   //如果Key1按下,LED0亮,LED1灭
  delay_ms(500);

}   
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2012-11-3
在线时间
0 小时
 楼主| 发表于 2012-12-20 18:33:34 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
就这样是行的.....
我决定的事,决定放弃。
回复 支持 反对

使用道具 举报

22

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2012-11-3
在线时间
0 小时
 楼主| 发表于 2012-12-20 18:59:34 | 显示全部楼层
我设置成了   悬浮输入了         
我决定的事,决定放弃。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表