Funpack第7期Curiosity
完成了Funpack第7期布置的任务,对板卡进行了介绍并编译完成相关程序,并录制了视频加以描述。
标签
嵌入式系统
石祥鹏
更新2021-04-14
732

Funpack第七期活动

成员:石祥鹏

-产品特性

支持具有低压编程功能的8、14、20引脚8位PIC®单片机;

带有USB接口的集成编程器/调试器;

与MPLAB X IDE和代码配置器无缝集成;

多种用户界面选项-mTouch按钮,模拟电位器和物理开关;

Mikrobus™支持超过100种MikroElectronika Click™附加板;

RN4020蓝牙模块占板面积;

FnZ2knbyPdnJINe5eDj_rGTSbzeX

功能的实现主要依托于LEDs D4-D7以及Push Button S1;

经过两个星期的编写与实验,本板卡最终实现了通过按下开关时间长短的不同来操控不同LED灯的功能,如下所示:

1.当RA1、RA2、RC5三个灯均不亮时,RA5灯保持常亮;

2.长按开关S1(RC4)1秒,RA1点亮,再按S1 1秒,RA1熄灭;

3.长按开关S1(RC4)5秒,RA2点亮,再长按S1 5秒,RA2熄灭;

4.长按开关S1(RC4)7秒,RC5点亮,再长按S17秒,RC5熄灭。

5.当按下开关S1(RC4)时间大于5秒小于7秒时,只对RA2的状态产生改变;当按键时间大于7秒时,只对RC5的状态产生改变。

 

主要代码片段及解释:

if(LED2_LAT == 0 && LED3_LAT == 0 && LED4_LAT == 0)

{

        LED1_SetHigh();}

        else{

            LED1_SetLow();

}//当RA1、RA2、RC5三个灯均不亮时,RA5灯保持常亮。

else if (pushedTime >= 5)

{

if(LED2_LAT == 0)

{

LED2_SetHigh();

LED1_SetLow();

}

else

{

LED2_SetLow();

}//长按开关S1 1秒,RA1点亮,再按S1 1秒,RA1熄灭;

if (pushedTime >= 500)

{

LED4_Toggle();

LED1_SetLow();

UART_SendString("Chang An\n");

adcValue = ADCC_GetSingleConversion(channel_ANC0);

UART_SendNum(adcValue);

}//长按开关S1 5秒,RA2点亮,再长按S1 5秒,RA2熄灭;

else if (pushedTime >= 70)

{

LED3_Toggle();

LED1_SetLow();

UART_SendString("Duan An\n");

adcValue = ADCC_GetSingleConversion(channel_ANC0);

UART_SendNum(adcValue);

}//长按开关S1 7秒,RC5点亮,再长按S17秒,RC5熄灭。

 

 

void UART_SendString(char * str) {

    while (*str) {

        while (!EUSART1_is_tx_ready());

        EUSART1_Write(*str++);

    }

}

void UART_SendNum(uint16_t num){

    uint8_t numarr[5];

    numarr[0] = num / 10000;

    numarr[1] = num / 1000 % 10;

    numarr[2] = num / 100 % 10;

    numarr[3] = num / 10 % 10;

    numarr[4] = num % 10;

    uint8_t i = 0;

    while ((numarr[i] == 0) && (i < 5)){

        i++;

    }

    if (i == 5){

        while (!EUSART1_is_tx_ready());

        EUSART1_Write('0');

    }

    for (;i<5;i++){

        while (!EUSART1_is_tx_ready());

        EUSART1_Write(numarr[i] + '0');

    }

    EUSART1_Write('\n');

}//输出每个灯的电位信息;

 

在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);

}//对Microchip Curiosity LPC上面的四个指示灯进行定义;

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这个软件进行程序的编译,同时使用了MCC插件,了解了单片机的相关知识。经过此次编写,我发现MPLAB软件虽然我之前从未使用过,但其编译语言与我之前学习过的C语言有很多相似之处,所以在编写程序的过程中没有那么困难。参加这次活动对于初次接触这类项目的我来说收益颇丰,也使得我对单片机相关知识的学习产生了浓厚的兴趣。作为初学者,在此次活动的过程中请教了不少老师和同学,在他们的帮助下最终得以完成此次活动,希望以后自己能在这种活动中表现得越来越好。

另外,希望电子森林在“阅读原文”页面中能加入一些对MPLAB编译语言和使用说明的介绍,提供更多的学习资料,以便帮助初学者们完成相关任务。我在此再次向电子森林平台表示感谢。

附件下载
main.c
实现了按下开关不同时间对每个灯的控制
FunPack2.ino
将Microchip Curiosity LPC板上四个灯的电位信息传输到Arduino软件中
团队介绍
个人独立完成
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号