找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

7按键控制对应7LED断电能记忆上一次状态

查看数: 2576 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-3-23 16:26

正文摘要:

新手,没有太多的黑币,抱歉了! 如图,想做一个多路开关玩,手头有拆机的MCU,请高手帮忙设计程序。 1、KEY1~7分别控制LED1~7; 2、当任意一个KEY按下后对应LED点亮,但其它LED灭; 4、需要在关机断电时记录最 ...

回复

ID:295906 发表于 2018-3-27 22:28
511386807 发表于 2018-3-24 14:28
每次有按键按下时,将当前的状态写入EEPROM中,每次程序启动时,从EEPROM读取就行。

师傅,帮忙看看我的代码哪里有问题。
加入存储后,按钮无法控制LED了,不加就可以,但是不能存储。
ID:295906 发表于 2018-3-27 22:27

#include "STC_IAP_EEPROM.h"
#include "common.h"
#define uchar unsigned char
#define uint  unsigned int

/*=================DF¶¨òåÏà1Ø================*/
#define FLAG_EPPROM_ADDR            0      //EPPROMÄú′æ3õê¼»ˉ±êÖ¾μØÖ·
#define MODE_EPPROM_ADDR            8      //êäèëí¨μà′æ′¢μØÖ·
#define OUTMODE_EPPROM_ADDR        12      //êä3öí¨μà′æ′¢μØÖ·

void RecoverParam(void)
{
    unsigned char temp;
    temp = Byte_Read(FLAG_EPPROM_ADDR);
    if(temp == 0x5a)
    {
        mode = Byte_Read(MODE_EPPROM_ADDR);
        if(mode>5) mode=0;
    }
}

void UpdateSaveParam(void)
{
    Sector_Erase(FLAG_EPPROM_ADDR);           //2á3yÕû¸öéèÇø
    Byte_Program(FLAG_EPPROM_ADDR, 0x5a);     //½« DEBUG_DATA D′èë EEPROM
    Byte_Program(MODE_EPPROM_ADDR, mode);
}

//5msÑóê±
void Delay5Ms(void)
{
        unsigned int TempCyc = 60552;        
        while(TempCyc--);
}

//400msÑóê±
void Delay400Ms(void)
{
        unsigned char TempCycA = 5;
        unsigned int TempCycB;
        while(TempCycA--)
        {
                  TempCycB=44269;
                  while(TempCycB--);
        }
            UpdateSaveParam();
}
//-------------------------------------í¨μàêäèëÑ¡Ôñé趨oˉêy¿aê¼---------------------------------------//
void key_scan()
{
        static bit KEY_MODE1_sign,KEY_MODE2_sign,KEY_MODE3_sign,KEY_MODE4_sign,KEY_MODE5_sign;                                //¾2ì¬Î»±äá¿°′¼ü×ÔËø±êÖ¾
        static uint count1,count2,count3,count4,count5;                                                                                                                                                                                                //¾2쬼Æêy±äá¿                        
        
        if(KEY_MODE1==0)                                                                                                                                                                       //¼ì2a°′¼ü1°′ÏÂ
        {
                if(KEY_MODE1_sign==0)
                {
                        count1++;                                 //Ïû¶¶¼Æêy1×Ô+1
                        if(count1>=1000)                          //°′Ö÷Ñ-»·ÖüÆú100~2000μ÷Õû
                        {
                                KEY_MODE1_sign=1;                 //°′¼ü1×ÔËø±êÖ¾ÖÃ1
                                K1=0;K2=K3=K4=K5=1;               //led1è¡·′                        
                        }
                }
        }
        else                                                       //°′¼ü1ì§Æe
        {
                KEY_MODE1_sign=0;                                  //°′¼ü1×ÔËø±êÖ¾Çå0
                count1=0;                                          //Ïû¶¶¼Æêy1Çå0
        }

        if(KEY_MODE2==0)                                           //¼ì2a°′¼ü2°′ÏÂ
        {
                if(KEY_MODE2_sign==0)
                {
                        count2++;                                 //Ïû¶¶¼Æêy1×Ô+1
                        if(count2>=1000)                          //°′Ö÷Ñ-»·ÖüÆú100~2000μ÷Õû
                        {
                                KEY_MODE2_sign=1;                 //°′¼ü2×ÔËø±êÖ¾ÖÃ1
                                K2=0;K1=K3=K4=K5=1;               //led2è¡·′                        
                        }
                }
        }
        else                                                       //°′¼ü2ì§Æe
        {
                KEY_MODE2_sign=0;                                  //°′¼ü2×ÔËø±êÖ¾Çå0
                count2=0;                                          //Ïû¶¶¼Æêy1Çå0
        }

        if(KEY_MODE3==0)                                           //¼ì2a°′¼ü3°′ÏÂ
        {
                if(KEY_MODE3_sign==0)
                {
                        count3++;                                 //Ïû¶¶¼Æêy1×Ô+1
                        if(count3>=1000)                          //°′Ö÷Ñ-»·ÖüÆú100~2000μ÷Õû
                        {
                                KEY_MODE3_sign=1;                 //°′¼ü1×ÔËø±êÖ¾ÖÃ3
                                K3=0;K2=K1=K4=K5=1;               //led3è¡·′                        
                        }
                }
        }
        else                                                       //°′¼ü1ì§Æe
        {
                KEY_MODE3_sign=0;                                  //°′¼ü1×ÔËø±êÖ¾Çå0
                count3=0;                                          //Ïû¶¶¼Æêy1Çå0
        }

        if(KEY_MODE4==0)                                           //¼ì2a°′¼ü2°′ÏÂ
        {
                if(KEY_MODE4_sign==0)
                {
                        count4++;                                 //Ïû¶¶¼Æêy1×Ô+1
                        if(count4>=1000)                          //°′Ö÷Ñ-»·ÖüÆú100~2000μ÷Õû
                        {
                                KEY_MODE4_sign=1;                 //°′¼ü2×ÔËø±êÖ¾ÖÃ1
                                K4=0;K1=K3=K2=K5=1;               //led4è¡·′                        
                        }
                }
        }
        else                                                       //°′¼ü4ì§Æe
        {
                KEY_MODE4_sign=0;                                  //°′¼ü4×ÔËø±êÖ¾Çå0
                count4=0;                                          //Ïû¶¶¼Æêy1Çå0
        }
        if(KEY_MODE5==0)                                           //¼ì2a°′¼ü2°′ÏÂ
        {
                if(KEY_MODE5_sign==0)
                {
                        count5++;                                 //Ïû¶¶¼Æêy1×Ô+1
                        if(count5>=1000)                          //°′Ö÷Ñ-»·ÖüÆú100~2000μ÷Õû
                        {
                                KEY_MODE5_sign=1;                  //°′¼ü5×ÔËø±êÖ¾ÖÃ1
                                K5=0;K1=K3=K2=K4=1;               //led5è¡·′                        
                        }
                }
        }
        else                                                       //°′¼ü5ì§Æe
        {
                KEY_MODE5_sign=0;                                  //°′¼ü5×ÔËø±êÖ¾Çå0
                count5=0;                                          //Ïû¶¶¼Æêy1Çå0
        }
                               
                                UpdateSaveParam();
}
/************Ö÷3ìDò************/
void main()
{
        RecoverParam();
                                key_scan();                     
}
ID:287536 发表于 2018-3-26 21:15
没有EEProm没法实现记忆功能
ID:295906 发表于 2018-3-25 15:51
511386807 发表于 2018-3-24 14:28
每次有按键按下时,将当前的状态写入EEPROM中,每次程序启动时,从EEPROM读取就行。

关键是,不会写。
ID:234868 发表于 2018-3-24 14:28
每次有按键按下时,将当前的状态写入EEPROM中,每次程序启动时,从EEPROM读取就行。

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

Powered by 单片机教程网

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