Funpack第七期 任务一识别按键长短按和串口打印
Funpack第七期使用Microchip Technology DM164137开发板,完成任务一:通过按键扩展功能,分为按键点击,短按,长按用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)
标签
Funpack第七期Microchip Technology DM164137开发板
Dino
更新2021-04-16
775

  本次任务完成任务一:通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)

首先进行思路分析,本次任务主要是完成按键检测、LED灯控制、串口和ADC。

按键和单片机引脚相关,一般使用引脚的输入模式。本次任务按键检测还分为点击、短按和长按三种模式。实现方法有两种,第一是检测到按键按下后开始延时计数,延时采用软件延时的方法取10MS计数值加一。等待按键松开后,通过判断计数值的大小就可以区分点击、短按和长按的区别。第二种是,按键按下后打开定时计数器,通过定时器来统计计数值,松开按键后关闭定时器。将定时器和计数值计算后判断按键按下的时长来区分点击、短按和长按。这两种方法都可以实现,第一种软件延时不太精确但是代码编写比较简单容易,适用于普通场景。第二种定时器可以实现精确计时,但是在代码组织方面比较复杂一点,适用于高精度场景。

本设计中用到的第一种软件延时方法。代码如下:

 

if (SWITCH_S1_PORT == LOW) 
        {
            __delay_ms(5);
            if (SWITCH_S1_PORT == LOW) 
            {
                
                LED_D4_LAT = 0;
                LED_D5_LAT = 0;
                LED_D6_LAT = 0;
            }
            while(SWITCH_S1_PORT == LOW)
            {
                __delay_ms(10);
                i++;   
            }
            if(i<=90)
            {
                LED_D4_LAT = 1;
                LED_D5_LAT = 0;
                LED_D6_LAT = 0;
                printf(" Click \n\r"); 
            }
            else if((i>100)&&(i<500))
            {
                LED_D4_LAT = 0;
                LED_D5_LAT = 1;
                LED_D6_LAT = 0;
                printf("Short press\n\r");
            }
            else if(i>=500)
            {
                LED_D4_LAT = 0;
                LED_D5_LAT = 0;
                LED_D6_LAT = 1;
                printf("Long press \n\r");
            }
            i=0; 
            TMR1IF = 0;                
            TMR1_Reload();
            TMR1_StartTimer();       
        }

在按键检测中必不可少的按键消抖和松手检测,在按键计数值i判断完成后对计数值进行清零。

FlypzDMrjOiA8Woe2-t0EQXSoXl6

图1-1 引脚图

如图1-1所示,按键引脚为RC4

点击(Click)指示灯LED4为RA5

短按(Short press)指示灯LED5为RA1

长按(Long press)指示灯LED6为RA2

USART的TX1引脚为RC6,波特率为9600

使用USART打印出电位计的信息,代码如下:

if(!TMR1_HasOverflowOccured())
        {
            TMR1IF = 0;                
            TMR1_Reload();
            tt++;
            if(tt==5000)
            {
                tt=0;
                adcResult = ADCC_GetSingleConversion(POT_CHANNEL) >> 12;
                printf("ADCResult: %d \n\r", ADRES >> 4);
            } 
        }

 

心得体会:这次是使用的MPLAB开发软件,这款软件可以灵活安装MCC插件,便捷开发过程。使用的板卡是一款8位单片机,板卡设计具有多种接口可以灵活的验证方案非常方便,扩展性也很强。总体来说还是一款非常不错的单片机和使用体验。

 

附件下载
pic16f18446.rar
代码
团队介绍
北京交通大学海滨学院
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号