Funpack第七期—基于DM164137设计的按键监控系统
本设计是利用DM164137板子作为主控,设计的一个可以监控按键按下、短按(1S)、长按(5S)以及电位器状态,通过LED以及串口输出状态的设备。
标签
嵌入式系统
冷月烟
更新2021-04-05
936

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

PIC16F18446提供了一个非常方便的配置芯片初始化的方式,IDE提供了一个MCC插件通过图像界面配置初始化。

这里我将芯片的主频配置为最大的32MHz

Fl2hXCENCHa9R-uiMqkHJAANupC5

配置串口1波特率为115200

FgFVtJmDsTPgSURXHxnbsN-HAWM1

设置定时器0为1ms中断一次,用于记录按键按下的时间。

FkxhRzGLLn5U7kBRsV_bXmC5hkZu

总体IO配置如下图:

FvL2pO6LohwpLIq5mdWc4iq-Qqw3

程序流程:当按键按下时开启定时器,当计时到1s时记为短按,计时到5s时记为长按,当按键抬起时关闭定时器。

主要代码如下:

if (PORTCbits.RC4 == LOW) //按键按下
{
    if(press_time == 0 && key_model == 0)
    {
        key_model++;
        TMR0_StartTimer();
        LED0_ON;
        potentiometer = ADCC_GetSingleConversion(channel_ANC0);
        printf("Press the key    ADC Result: %u\r\n", potentiometer);
    }
    else if(press_time == 1000 && key_model == 1)
    {
        key_model++;
        LED1_ON;
        potentiometer = ADCC_GetSingleConversion(channel_ANC0);
        printf("Press the key 1S ADC Result: %u\r\n", potentiometer);
    }
    else if(press_time == 5000 && key_model == 2)
    {
        key_model++;
        LED2_ON;
        potentiometer = ADCC_GetSingleConversion(channel_ANC0);
        printf("Press the key 5S ADC Result: %u\r\n", potentiometer);
    }
}
else if (PORTCbits.RC4 == HIGH) 
{
    LED0_OFF;
    LED1_OFF;
    LED2_OFF;
    press_time = 0;
    key_model = 0;
    TMR0_StopTimer();
}

心得体会:第一次使用PIC系列的芯片,感觉整体产品线还是比较完善的。IDE使用体验也是不错的,如果价格合适的话可以考虑量产使用。

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