Funpack第七期 基于DM164137的按键控制LED灯及电位计显示
采用Funpack 第七期的开发板,通过调用芯片内部的计时器timer1来完成对按键被按下时间的计时,从而实现对4位LED灯的控制。借助串口传输模块展示按键信息及电位计信息。
标签
嵌入式系统
PIC
mu_hly_pur_la
更新2021-04-19
1063

本期(第七期)Funpack活动选用的开发板:

8位MCU pic开发板DM164137,其芯片为PIC16F18446。

本期完成的任务:

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

任务设计思路:

通过调用芯片内部的计时器Timer1来对按键按下的时间进行计时,当 t<1s 时,左边两盏灯常亮;当 1s < t < 5s 时,四盏灯全部为常亮状态;当t >5s 时,LED灯为流水灯展示。同时外接串口模块,打印相应的按键信息及电位计信息。

使用MCC进行相应配置:

1.Pin Module 配置

FnAKzW3fta185f2OissscPB7jbqp

 

FocCr_YrfaRCkCdJjTSOfR-I0Cmc

 

2.System Module:将主频设为32MHz,不分频

FlZmJwUiBoV8A41DXMTx6VjEgIT9

 

3.串口设置 波特率115200,勾选Redirect STDIO to USART1,printf函数 可以使用

FuiG-Tu8T9YatiebovNPmZAg-qhI

 

4.ADCC:默认配置

FqJNXuyh_384hDa-ll7yKZ7iBBBx

5.Timer1 定时器设置 时间为250ms

Fm19ovCL198ittFscWDpyxK4uQ_R

 

主要代码:

 

void main(void)
{

// initialize the device
SYSTEM_Initialize();

init_led(); //LED初始化
while(1) //进入主循环
{
time=0;
t1=0;
if(!key_s1_GetValue()) //按键按下
{
__delay_ms(10); //按键消抖
if(!key_s1_GetValue())
{
TMR1_StartTimer(); //计时器开始计时
while(!key_s1_GetValue())
{ if(t1==1)
break;
if(TMR1_HasOverflowOccured()==1) //while(!TMR1_HasOverflowOccured());
{
time++;
TMR1IF = 0;
TMR1_Reload();
}
display(time);
}
TMR1_StopTimer(); //停止计时
adcValue = ADCC_GetSingleConversion(channel_ANC0);
//按键信息打印
if(time <= 4){
printf("click ADC: %d",adcValue);
}
if(time > 4 && time <= 20){
printf("press ADC: %d",adcValue);
}
}
}
}

 

心得体会:

1.MCC的设置特别好用,直接生成了对内部的一些定义和配置,大大节省了去翻看datasheet的时间,对于新手小白而言非常友好。

2.通过这次funpack活动,让我对硬件设备和相应的软件有了进一步的了解,以后有机会会多多参加这样的活动。

3.第一次使用PIC系列的芯片,感觉整体效果很棒。IDE使用体验也是不错的,MCC好评!

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