内容介绍
内容介绍
一、自我介绍:
我是来自山东的嵌入式工程师陈海,目前主做嵌入式编程。
二、实现的功能:
主要实现的功能是按键控制LED显示,串口实时显示电位器的模拟采样值和按键状态。代码主要参考综合例程。下面描述下具体实现:
1、按键状态
#define NO_PRESS 0 // Button Release
#define QUICK_PRESS 1 // 快速点击 < 1s
#define SHORT_PRESS 2 // 短按 > 1s & <5s
#define LONG_PRESS 3 // 长按 > 5s
const char *buttonStatusStr[] = {"No Press", "Quick Press", "Short Press", "Long Press"};
2、初始化开发板
void SYSTEM_Initialize(void)
{
PMD_Initialize();
PIN_MANAGER_Initialize();
OSCILLATOR_Initialize();
WWDT_Initialize();
PWM1_Initialize();
ADCC_Initialize();
TMR2_Initialize();
TMR1_Initialize();
TMR0_Initialize();
EUSART1_Initialize();
}
3、获取按键状态(在main函数里面每隔10ms调用一次)
static uint8_t buttonDown = 0;
static uint16_t buttonCnt = 0;
uint8_t buttonGetStatus() {
uint8_t buttonStatus = NO_PRESS;
// printf("%u\r\n", buttonCnt);
if (LOW == SWITCH_S1_PORT) {
// printf("key down\r\n");
if (0 == buttonDown) {
buttonDown = 1;
} else {
buttonCnt++;
}
} else if (HIGH == SWITCH_S1_PORT) {
// printf("key up\r\n");
if (1 == buttonDown) {
if (buttonCnt < 5) {
buttonStatus = NO_PRESS;
} else if (buttonCnt < 80) {
buttonStatus = QUICK_PRESS;
} else if (buttonCnt < 360) {
buttonStatus = SHORT_PRESS;
} else if (buttonCnt >= 360) {
buttonStatus = LONG_PRESS;
}
buttonDown = 0;
buttonCnt = 0;
}
}
return buttonStatus;
}
4、主(main)函数()
获取按键状态,如果按键标志位被按下,则串口打印按键状态,并更改LED的显示状态。每隔3秒钟ADC获取电位器的电压原始状态值,并根据值更改LED4的状态,打印读取到的值。
printf("Board Init Finshed\r\n");
while (1) {
delayCnt++;
if (NO_PRESS != (buttonStatus = buttonGetStatus())) {
printf("button status = %s\r\n", buttonStatusStr[buttonStatus]);
if (QUICK_PRESS == buttonStatus) {
LED_D4_LAT = LED_D4_LAT; LED_D5_LAT = 0; LED_D6_LAT = 0; LED_D7_LAT = 1;
} if (SHORT_PRESS == buttonStatus) {
LED_D4_LAT = LED_D4_LAT; LED_D5_LAT = 0; LED_D6_LAT = 1; LED_D7_LAT = 1;
} if (LONG_PRESS == buttonStatus) {
LED_D4_LAT = LED_D4_LAT; LED_D5_LAT = 1; LED_D6_LAT = 1; LED_D7_LAT = 1;
}
}
if (delayCnt % 300 == 0) {
adcResult = ADCC_GetSingleConversion(POT_CHANNEL) >> 4;
printf("adc result = %u\r\n", adcResult);
if (adcResult >= 2048) {
LED_D4_LAT = 1;
} else {
LED_D4_LAT = 0;
}
}
__delay_ms(10);
}
三、感想
用了挺长时间的32,再用回8位机,虽然感觉性能方面确实和32差距挺大,但是外设齐全,做一些对性能需求不是很大的应用,比如这次任务,还是很足够的。对于一些成本敏感的应用,这款芯片还是很适合的。
团队介绍
评论
0 / 100
查看更多
猜你喜欢
Funpack 第七期 DM164137 实现按键控制LED灯基于DM164137通过案件扩展功能实现不同按键方式控制LED灯,通过串口显示按键信息和电位计信息。
LIFE
1271
Funpack第七期—DM164137按键控制LED及输出电位信息DM164137开发板上包括一组4个指示LED,mTouch触摸按钮、按键开关以及可变电位器。 这次用其实现通过按键时长控制LED及电位信息的输出的功能。
CCCyan
1077
Funpack第七期 DM164137 实现按键控制板卡LED显示及电位信息打印通过MPLAB X IDE编写程序,完成在不同按键情况下的LED显示,并通过外接串口和串口调试器打印出电位信息
zsx
961