内容介绍
内容介绍
本次任务完成任务一:通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)
首先进行思路分析,本次任务主要是完成按键检测、LED灯控制、串口和ADC。
按键和单片机引脚相关,一般使用引脚的输入模式。本次任务按键检测还分为点击、短按和长按三种模式。实现方法有两种,第一是检测到按键按下后开始延时计数,延时采用软件延时的方法取10MS计数值加一。等待按键松开后,通过判断计数值的大小就可以区分点击、短按和长按的区别。第二种是,按键按下后打开定时计数器,通过定时器来统计计数值,松开按键后关闭定时器。将定时器和计数值计算后判断按键按下的时长来区分点击、短按和长按。这两种方法都可以实现,第一种软件延时不太精确但是代码编写比较简单容易,适用于普通场景。第二种定时器可以实现精确计时,但是在代码组织方面比较复杂一点,适用于高精度场景。
本设计中用到的第一种软件延时方法。代码如下:
if (SWITCH_S1_PORT == LOW)
{
__delay_ms(5);
if (SWITCH_S1_PORT == LOW)
{
LED_D4_LAT = 0;
LED_D5_LAT = 0;
LED_D6_LAT = 0;
}
while(SWITCH_S1_PORT == LOW)
{
__delay_ms(10);
i++;
}
if(i<=90)
{
LED_D4_LAT = 1;
LED_D5_LAT = 0;
LED_D6_LAT = 0;
printf(" Click \n\r");
}
else if((i>100)&&(i<500))
{
LED_D4_LAT = 0;
LED_D5_LAT = 1;
LED_D6_LAT = 0;
printf("Short press\n\r");
}
else if(i>=500)
{
LED_D4_LAT = 0;
LED_D5_LAT = 0;
LED_D6_LAT = 1;
printf("Long press \n\r");
}
i=0;
TMR1IF = 0;
TMR1_Reload();
TMR1_StartTimer();
}
在按键检测中必不可少的按键消抖和松手检测,在按键计数值i判断完成后对计数值进行清零。
图1-1 引脚图
如图1-1所示,按键引脚为RC4
点击(Click)指示灯LED4为RA5
短按(Short press)指示灯LED5为RA1
长按(Long press)指示灯LED6为RA2
USART的TX1引脚为RC6,波特率为9600
使用USART打印出电位计的信息,代码如下:
if(!TMR1_HasOverflowOccured())
{
TMR1IF = 0;
TMR1_Reload();
tt++;
if(tt==5000)
{
tt=0;
adcResult = ADCC_GetSingleConversion(POT_CHANNEL) >> 12;
printf("ADCResult: %d \n\r", ADRES >> 4);
}
}
心得体会:这次是使用的MPLAB开发软件,这款软件可以灵活安装MCC插件,便捷开发过程。使用的板卡是一款8位单片机,板卡设计具有多种接口可以灵活的验证方案非常方便,扩展性也很强。总体来说还是一款非常不错的单片机和使用体验。
附件下载
pic16f18446.rar
代码
团队介绍
北京交通大学海滨学院
评论
0 / 100
查看更多
猜你喜欢
Funpack第七期——按键控制LED灯并打印电位信息通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)
单片机爱好者
1183
Funpack第七期 MicrochipLPC开发板 串口打印按键信息和ADC信息使用 DM164137开发板,识别按键的不同动作,并用LED灯显示,通过串口打印按键信息和电位器信息
R_xd
1224
FastBond3挑战部分-XIAO智能助手该项目使用了XIAO ESP32S3 Sence开发板,实现了智能助手系统的设计,它的主要功能为:语音识别;大模型对话;图像理解。
该项目使用了SNR9816TTS模块,实现了TTS语言播放的设计,它的主要功能为:串口转语音。
该项目使用了SSD1306模块,实现了屏幕界面的设计,它的主要功能为:系统信息交互显示。
2345vor
418