STM32F103系列的单片机怎么实现一个按键控制一个LED,第一次按下常亮,再次按下闪烁,第三次按下熄灭?

2019-07-21 05:52发布


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
路人曦
1楼-- · 2019-07-21 07:00
 精彩回答 2  元偷偷看……
尹默然
2楼-- · 2019-07-21 08:24
                        if (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == KEY_ON)
                                {status=status+1;
                                }               
                                        if(status>3)
                                        {
                                                status=0;
                                        }
                                                switch(status){
                                                                                                                case 1:{GPIO_SetBits(GPIOC, GPIO_Pin_1);}
                                                                                                                case 2:{GPIO_ResetBits(GPIOC, GPIO_Pin_1);
                                                                                                                                                Delay(500000);
                                                                                                                             GPIO_SetBits(GPIOC, GPIO_Pin_1);
                                                                                                                                                Delay(500000);
                                                                                                                                                }
                                                                                                          case 3:{ GPIO_ResetBits(GPIOC, GPIO_Pin_1);}
                                                                                                                      }
一上电LED就亮,按下就一直在闪烁,关不掉
1208
3楼-- · 2019-07-21 13:17
每按一次计数count加一
再用if(count&&按键)
判断执行相应的语句就行
Mr.liu
4楼-- · 2019-07-21 15:34
用状态机制
尹默然
5楼-- · 2019-07-21 20:50
我试过了,用计数的方式是可以解决了但需要把
   if (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == KEY_ON)
给改掉
用着个结构给先处理下端口的取值问题
        u8 Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)
{                       
                /*¼ì2aêÇ·ñóD°′¼ü°′Ï */
           if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )
          {          
                  /*Ñóê±Ïû¶¶*/
                  Delay(50000);               
                           if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  
                                        {         
                                                /*μè′y°′¼üêí·Å */
                                                while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   
                                                 return         KEY_ON;         
                                        }
                        else
                                        return KEY_OFF;
                }
        else
                return KEY_OFF;
}
改为
if (Key_Scan(GPIOC,GPIO_Pin_2) == KEY_ON)
最终是这个主程序
//                                if (Key_Scan(GPIOC,GPIO_Pin_2) == KEY_ON)
//                                {
//                                        Delay(1000000);
//                                        status=status+1;
//                                }               
//                                        if(status>2)
//                                        {
//                                                status=0;
//                                        }
//                                                if (status==0)
//                                                {

//                                                        {GPIO_SetBits(GPIOC, GPIO_Pin_1);}
//                                                }
//                                                if (status==1)
//                                                {
//                                                        {GPIO_ResetBits(GPIOC, GPIO_Pin_1);}
//                                                }
//                                                if (status==2)
//                                                {
//                                                        {GPIO_ResetBits(GPIOC, GPIO_Pin_1);
//                                                                                                                                                Delay(1000000);
//                                                         GPIO_SetBits(GPIOC, GPIO_Pin_1);
//                                                                                                                                                Delay(500000);}                                                       
//                                                }
但现在我想把这写东西给做成一个可调用的形式
只需要把输入端口一写,然后进行计数的判断。
改成主函数如下
//                                                if (任意端口==0)
//                                                {

//                                                        {GPIO_SetBits(GPIOC, GPIO_Pin_1);}
//                                                }
//                                                if (任意端口==1)
//                                                {
//                                                        {GPIO_ResetBits(GPIOC, GPIO_Pin_1);}
//                                                }
//                                                if (任意端口==2)
//                                                {
//                                                        {GPIO_ResetBits(GPIOC, GPIO_Pin_1);
//                                                                                                                                                Delay(1000000);
//                                                         GPIO_SetBits(GPIOC, GPIO_Pin_1);
//                                                                                                                                                Delay(500000);}                                                       
//                                                }
尹默然
6楼-- · 2019-07-21 23:44
 精彩回答 2  元偷偷看……

一周热门 更多>