Funpack第七期——基于DM164137的按键实验
通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)
标签
Funpack
PIC
cardry
更新2021-04-13
971

本期Funpack活动选用的板卡:

Microchip的8位PIC MCU开发板DM164137。

 

任务要求:

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

 

设计思路:

该板子上共有四个LED灯,从右到左可依次命名为“LED1、LED2、LED3和LED4”,首先判断是否按压按键(命名为Button),若按下按键(if),开始计时,按键结束后结束计时,得到按下时长;若未按下按键(else),开始执行亮灯操作。

接着考虑如何打印电位信息,团队成员郑泽华手头正好有一块Arduino UNO板子,我们便想到可以用这块板子来打印Curiosity板的电位信息。

FpinxUo4G3jHSPaH8vCDgD5n262x

 

程序流程:

当按键按下时开启定时器,并且LED1开始常亮;短按后LED2常亮;长按1s以上5s以下后LED3常亮;当长按5s以上后LED4常亮。

 

Pin module配置如下:

Fn83FAmfaooT1RGSuJL4WgXRISCT

 

FgMkzexoe80obPSfJMOwjnSIALxG

 

其它配置:

ADC配置如下:

Fs9fhZ4iJJLREnAtoi9uJmL5FuA9

 

将主频设为32MHz:

FgenMdJT5xxUHs-bcs9UfkoClKey

 

时钟配置等基本为默认配置:

Fg9_BXVE0by8-LKandx2KCclkNF_

 

主要代码如下:

MPLAB X IDE(C语言):

while (1)
    {
        int press_time = 0;
        while (1)
        {
            LED1_SetHigh();
            if (!Button_GetValue())
            {
                __delay_ms(15);
                if (!Button_GetValue())
                {
                    press_time++;
                }
            } 
            else 
            {
                __delay_ms(15);
                if (Button_GetValue()) 
                {
                    if (press_time < 5) 
                    {
                        continue;
                    }
                    if (press_time >= 200) 
                    {
                        if(LED4_LAT == 0)
                        {
                            LED4_SetHigh();
                        }
                        else
                        {
                            LED4_SetLow();
                        }
                    } 
                    else if (press_time >= 70) 
                    {
                        if(LED3_LAT == 0)
                        {
                            LED3_SetHigh();
                        }
                        else
                        {
                            LED3_SetLow();
                        }
                    } 
                    else if (press_time >= 5) 
                    {
                        if(LED2_LAT == 0)
                        {
                            LED2_SetHigh();
                        }
                        else
                        {
                            LED2_SetLow();
                        }
                    }
                press_time = 0;
                }
            }
        }
    }

 

Arduino:

void setup() {

  pinMode(A0,INPUT);//RC0 

  pinMode(A1,INPUT);//LED1 RA5

  pinMode(A2,INPUT);//LED2 RA1

  pinMode(A3,INPUT);//LED3 RA2

  pinMode(A4,INPUT);//LED4 RC5

  Serial.begin(9600);

}

 

void loop()

{

  Serial.print("Volt=");

  Serial.println(analogRead(A0));

  Serial.print("LED1=");

  Serial.println(analogRead(A1));

  Serial.print("LED2=");

  Serial.println(analogRead(A2));

  Serial.print("LED3=");

  Serial.println(analogRead(A3));

  Serial.print("LED4=");

  Serial.println(analogRead(A4));

  delay(1000);

}

 

心得体会:

我是在学院老师的推荐中得知此次Funpack活动,开始主动去了解单片机以及MPLAB IDE和Kicad的使用方法,并且在同学的帮助下接触了Arduino语言;也参考了电子森林网站中其他玩家的案例分享,从其他人的分享中学习到了很多东西,逐渐了解了MPLAB IDE中MCC插件配置初始化的使用,但对于其中EUSART以及ADC等不太了解如何去具体配置;这次活动的的确确教会了我不少东西,使我发掘了自身对于电子电路的兴趣,我也会继续抓紧学习单片机的相关知识,力争参加暑期的电子设计大赛。

 

附件下载
Curiosity.zip
包含.X文件和.ino文件
团队介绍
中国矿业大学(北京)机电与信息工程学院2019级电气工程及其自动化专业
团队成员
宋文轩
大二
郑泽华
大二
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号