Funpack第七期活动
成员:石祥鹏
-产品特性
支持具有低压编程功能的8、14、20引脚8位PIC®单片机;
带有USB接口的集成编程器/调试器;
与MPLAB X IDE和代码配置器无缝集成;
多种用户界面选项-mTouch按钮,模拟电位器和物理开关;
Mikrobus™支持超过100种MikroElectronika Click™附加板;
RN4020蓝牙模块占板面积;
功能的实现主要依托于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编译语言和使用说明的介绍,提供更多的学习资料,以便帮助初学者们完成相关任务。我在此再次向电子森林平台表示感谢。