Funpack第七期——按键控制LED灯并打印电位信息
通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)
标签
嵌入式系统
单片机爱好者
更新2021-04-19
1055

本期Funpack活动选用的板卡:

Microchip的8位PIC MCU开发板DM164137,其芯片为PIC16F18446。

 

本期任务:

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

设计思路:通过利用__delay_ms()函数来实现对按键时间的计算,再通过if条件语句对时间进行判断并控制LED灯执行相应的功能。通过arduino软件和arduinoUno开发板来实现对串口信息的打印。

 

实现的功能:

按键点击(快速点击):D5、D6、D7全灯亮一下后熄灭。

短按(1~3秒):D5、D6、D7流水灯三次后熄灭。

长按(大于3秒):D5、D6、D7间隔一秒闪烁两次熄灭。

 

MCC配置:

引脚分配:

FoKHIWp6Sw81FEygqnVn3EkuOyZU

 

System module配置:

FpeL9GamTYGrpZuRvB-5shhrccb1

 

TMR2配置:

Fq7ILZf8U32O4PUFS0imKJAMn-ui

 

Pin Module配置

Fn2_qu2cav5X96ZRwB3U10wy98us

 

MPLAB主要代码:

#include "mcc_generated_files/mcc.h"
void all_high(void)
{
    LED_D5_SetHigh();
    LED_D6_SetHigh();
    LED_D7_SetHigh();
}
void all_low(void)
{
    LED_D5_SetLow();
    LED_D6_SetLow();
    LED_D7_SetLow();
}
void D5_blink(void)
{
    LED_D5_SetHigh();
    __delay_ms(500);
    LED_D5_SetLow();
    __delay_ms(500);
}
void D6_blink(void)
{
    LED_D6_SetHigh();
    __delay_ms(500);
    LED_D6_SetLow();
    __delay_ms(500);
}
void D7_blink(void)
{
    LED_D7_SetHigh();
    __delay_ms(500);
    LED_D7_SetLow();
    __delay_ms(500);
}
void run_water_lamp(void)
{
       D5_blink();
       D6_blink();
       D7_blink();
}

int t=0,k,Value;
void main(void)
{
    SYSTEM_Initialize();
    while (1)
    {
       if(!Key_S1_GetValue())
        { __delay_ms(10); 
         while(!Key_S1_GetValue())
           { 
              __delay_ms(100);
              t++;
            }
       }
       else
       {
          if(t>0&&t<=10)
              {  
                all_high();
                __delay_ms(500);
                all_low();
                t=0;
              }
          else if(t>10&&t<=30)
              {  
                 for(k=1;k<=3;k++)
                  { run_water_lamp(); }
                all_low();
                t=0;
              }
          else if (t>30)
              {   
                 all_high();
                 __delay_ms(1000);
                 all_low();
                 __delay_ms(1000);
                 all_high();
                 __delay_ms(1000);
                 all_low();
                 t=0;
              }
          else
            { all_low(); }
       }   
    }
}

 

arduino代码:

void setup() {
pinMode(A0,INPUT);//RC0
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(A1));
Serial.print("LED_D5=");
Serial.println(analogRead(A2));
Serial.print("LED_D6=");
Serial.println(analogRead(A3));
Serial.print("LED_D7=");
Serial.println(analogRead(A4));
delay(500);
}

 

串口使用的开发板(arduinoUno开发板):

FrZFPsH8x_Z540rNRtvvneiFqdRv

 

心得体会:万事开头难,第一次接触单片机感觉还是挺难的,从什么也不懂到渐渐了解单片机和学习相应的编程软件编程,再到设计功能和编写程序并不断调试,到最后实现功能是一个很有意义的过程。这次活动不仅让我学习到了更多的知识,还让我对单片机产生了浓厚的兴趣。最后真诚感谢硬禾学堂以及得捷电子提供了这次学习活动。

附件下载
Lamp.X.zip
包括MCC生成的所有代码
团队介绍
团队成员
单片机爱好者
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号