OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 375|回复: 1

对前面学过串口、中断、定时器、按键做一个升级:本程序通过按键KEY0单击亮红灯、双击亮绿灯、长按两灯都熄灭来实现灯的...

[复制链接]

  离线 

17

主题

313

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
733
金钱
733
注册时间
2018-6-30
在线时间
134 小时
发表于 2018-7-12 20:46:52 | 显示全部楼层 |阅读模式
本帖最后由 1208 于 2018-8-10 09:56 编辑

分享一个mini板按键KEY0单击、双击、长按和串口实现灯的控制状态,按键KEY1中断,控制灯亮5秒后熄灭

volatile int time_10_ms = 0 ;   //volatile提醒编译器它后面定义的变量随时有可能改变

volatile int count = 0 ;        //每次存储或读取变量,直接从变量地址中读取数据
volatile int key1Pressed = 0 ;
int main(void)
{        
        u8 t;
        u8 len;
        u8 key;
        delay_init();                     //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//定时器 设置中断优先级分组2
        uart_init(115200);        
        LED_Init();                                   //初始化与LED连接的硬件接口
        KEY_Init();                  //初始化与按键连接的硬件接口
        EXTIX_Init();
        TIM3_Int_Init(99,7199);//10ms,按键扫描计时10ms
         
        
        while(1)
        {
                if(USART_RX_STA&0x8000)
                 {
                         len=USART_RX_STA&0x3FFF;
                         printf("\r\n您发送的消息为:\r\n");
                         for(t=0;t<len;t++)
                         {
                                 USART_SendData(USART1,USART_RX_BUF[t]);
                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                         }
                         printf("\r\n\r\n");//插入换行
                         USART_RX_STA=0;
                 }
                 
                  //KEY0控制单击红灯亮、双击绿灯亮、长按两灯都熄灭以及串口控制灯
                               if ( time_10_ms)               //每10ms执行一次
                                {
                                   time_10_ms = 0 ;
                                   key = key_read();     
                                   if (key == S_key||USART_RX_BUF[0]=='0')
                                        {               
                                              LED0=0;                                                        
                                              printf("LED0亮\n");        
                                              delay_ms(1000);
                                             USART_RX_BUF[0]=9;     //清除BUF接收
                                        }                                                        
                                 else if(key == D_key||USART_RX_BUF[0]=='1')  
                                        {
                                                LED1=0;
                                                printf("LED1亮\n");
                                                delay_ms(1000);
                                                USART_RX_BUF[0]=9;
                                        }
                                 else if(key == L_key||USART_RX_BUF[0]=='2')
                                        {
                                                 LED0=1;
                                                 LED1=1;
                                                 printf("LED0和LED1都灭\n");        
                                                 delay_ms(1000);        
                                                 USART_RX_BUF[0]=9;                                                
                                        }
                                }        
            //KEY1中断按键,红灯5秒后自动熄灭
                                     if(key1Pressed)              
                                {
                                         LED0 = 0 ;
                                }
                                if(count > 500)            
                                        {
                                                 LED0 = 1 ;
                                                 count = 0 ;
                                                 key1Pressed = 0 ;
                                        }        
          }                 
}
希望对初学者有所帮助,也向大神请教一下不足之处,喜欢就顶一个!

ALIENTEK MINISTM32 实验2 按键实验.zip

3.51 MB, 下载次数: 33

等阳光,等彩虹,等你!
回复

使用道具 举报

  离线 

0

主题

56

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
156
金钱
156
注册时间
2018-8-3
在线时间
39 小时
发表于 2018-8-8 14:36:54 | 显示全部楼层
此帖仅作者可见

使用道具 举报

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

本版积分规则




关闭

必看,必学:"原子哥”力荐上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-9-24 15:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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