Funpack第七期-Hello World
通过读取按钮按下的时长,决定闪烁的哪一颗灯,并把按钮的信息通过串口发送给上位机
标签
嵌入式系统
道之道
更新2021-04-20
647

Hello,我是道,一名电子工程师,这是我的第七期参与Funpack项目中,这一期的8位单片机又让我回到以前51时代芯片资源紧缺的感觉,就几K的容量,感觉啥应用的做不了。后面细看它的外设相对于ST的更加开放,支持更多玩法

     这一次我也没有玩其他的,就是使用板卡自带的按钮和灯来完成这个项目。

     首先是使用USB转串口的线连接单片机的RC7和RB5脚,这两个是他的串口引脚

     芯片的RA5、RA1、RA2、RC5分别对应板卡的LED4、5、6、7四个灯

     芯片的RC4对应板卡的S1按钮

使用IDE MCC配置系统如下

FpNEyy3Kv_i33pqMBz6xoZ14SlB1FjNc6pARo6MMIhkTJSVJqP0M1kWb

该项目通过delay函数和计数器来控制时间。通过轮询的方式读取按钮的状态。初始化LED4闪烁、如果按键时间小于1s就闪烁LED5、大于1s小于5s就闪烁LED6、大于5s就闪烁LED7,每次按按钮都将按键类型通过串口发送出来的。

下面是核心代码:

void Key_Push(void)

{

     __delay_ms(1000);

    if(S1_GetValue()==0)

    {

        __delay_ms(5000);

        if(S1_GetValue()==0)

        {

            Led_Type=3;

            printf("Long Push\r\n");

        }

        else

        {

            Led_Type=2;

            printf("Short Push\r\n");

        }

    }

    else

    {

        Led_Type=1;

        printf("Fast Push\r\n");

    }

     while(S1_GetValue()==0);

    LED4_SetLow();

    LED5_SetLow();

    LED6_SetLow();

    LED7_SetLow();

}

while (1)

    {

        __delay_ms(5);

        count++;

        if(count==100)

        {

            count=0;

             switch(Led_Type)

            {

                case 0:

                    LED4_Toggle();

                    break;

                case 1:

                    LED5_Toggle();

                    break;

                case 2:

                    LED6_Toggle();

                    break;

                case 3:

                    LED7_Toggle();

                    break;

            }  

        }

        if(S1_GetValue()==0)

        {

            Key_Push();

         }  

        // Add your application code

    }

8位单片机的资源非常少,适合做低成本但是量大的项目。根据项目需求,倒是可以学习一下

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