找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35|回复: 1
打印 上一主题 下一主题
收起左侧

FMD 8脚单片机 一键控制多路LED

[复制链接]
跳转到指定楼层
楼主
ID:59341 发表于 2026-2-24 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
长按3秒开机,短按控制LED,请高手分析一下下面这个程序有没有漏洞,假如用来批量生产,是不是可行?//*********************************************************
#include        "SYSCFG.h"
#include         "FT62F21X.h"
//***********************宏定义****************************
#define KEY_PIN PA4

#define          LED1_ON                PA0=0  
#define          LED1_OFF        PA0=1
#define          LED2_ON                PA1=0  
#define          LED2_OFF        PA1=1

volatile unsigned int KEY_COUNT;
volatile unsigned char KEY_LOCK;
volatile unsigned char LED_MODE;

/*----------------------------------------------------
* 函数名:TIMER0_INITIAL
* 功能:  初始化设置定时器
* 设置TMR0定时时长=(1/系统时钟频率)*指令周期*预分频值*TMR0
*                                    =(1/16000000)*4*256*255 = 16ms
----------------------------------------------------*/
void TIMER0_INITIAL (void)  
{
        T0ON = 0;
        TMR0 = 0;                                        
        T0CON0 = 0B00000000;                        01:HIRC
        OPTION = 0B00000011;       
       
        T0ON = 1;
}
/*-------------------------------------------------
* 函数名:POWER_INITIAL
* 功能: 上电系统初始化
* 输入:  无
* 输出:  无
--------------------------------------------------*/       
void POWER_INITIAL (void)
{
        OSCCON = 0B01110000;       
        INTCON = 0;                          //暂禁止所有中断
        OPTION = 0;
   
    TRISA = 0B00010000;                                //1:输入 0:输出 PA4-输出
    PORTA = 0B11111111;                                //1:PAx输出高电平        0:PAx输出低电平
        WPUA =         0B00010000;                                //1:使能PA口上拉        0:关闭PA口上拉   
    PSRCA = 0;
   
    PSINKA = 0;                               
   
}

void KEY_FUNCTION(void)
        {
    if(KEY_COUNT>10&&KEY_PIN&&KEY_LOCK==0)//短按
                {
        LED_MODE++;
        if(LED_MODE==4)
                        LED_MODE=0;
                KEY_LOCK=1;        
        }
        if(KEY_COUNT>2999&&KEY_LOCK==0)//长按3秒
                {
        LED_MODE=0;
                KEY_LOCK=1;        
        }
        }
   
void LED_DRIVE(void)
        {
        switch(LED_MODE)
                {
        case 0: LED1_OFF;LED2_OFF;break;
        case 1: LED1_ON; LED2_OFF;break;
        case 2: LED1_OFF;LED2_ON; break;
        case 3: LED1_ON; LED2_ON; break;
        default: LED_MODE=0;break;
        }
        }
/*-------------------------------------------------
* 函数名:main
* 功能:  主函数
* 输入:  无
* 输出:  无
--------------------------------------------------*/
void main()
{
    POWER_INITIAL();        //系统初始化
    TIMER0_INITIAL();
   
        GIE = 1;                                 //开中断
        T0IE = 1;                                //开定时器/计数器0中断   
    LED_MODE=0;//上电初始化状态 led全关
        while(1)
    {
        KEY_FUNCTION();
    LED_DRIVE();
        }
}

/*-------------------------------------------------
* 函数名: interrupt ISR
* 功能:  中断处理
* 输入:   无
* 输出:   无
--------------------------------------------------*/
void interrupt ISR(void)
{
    if(INTCON & 0x04)                       
    {
        INTCON &= ~(1<<2);                       
        TMR0 =10;                               
        if(KEY_PIN==0)
                        {
            if(KEY_COUNT<10000)
                                KEY_COUNT++;
            }
        else
                        {
            if(KEY_COUNT>20)
                                KEY_COUNT=20;
            else if(KEY_COUNT>0)
                                KEY_COUNT--;            
            }
        if(KEY_COUNT==0)
                        KEY_LOCK=0;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1064915 发表于 2026-2-25 08:33 | 只看该作者
批量生产,是市场与成本决定,单机试程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表