找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
1黑币
新手,没有太多的黑币,抱歉了!
如图,想做一个多路开关玩,手头有拆机的MCU,请高手帮忙设计程序。
1、KEY1~7分别控制LED1~7;
2、当任意一个KEY按下后对应LED点亮,但其它LED灭;
4、需要在关机断电时记录最近一次操作模式,方便再次开机上电时使用。

d1.jpg (55.46 KB, 下载次数: 41)

d1.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:234868 发表于 2018-3-24 14:28 | 只看该作者
每次有按键按下时,将当前的状态写入EEPROM中,每次程序启动时,从EEPROM读取就行。
回复

使用道具 举报

板凳
ID:295906 发表于 2018-3-25 15:51 | 只看该作者
511386807 发表于 2018-3-24 14:28
每次有按键按下时,将当前的状态写入EEPROM中,每次程序启动时,从EEPROM读取就行。

关键是,不会写。
回复

使用道具 举报

地板
ID:287536 发表于 2018-3-26 21:15 | 只看该作者
没有EEProm没法实现记忆功能
回复

使用道具 举报

5#
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();                     
}
回复

使用道具 举报

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

师傅,帮忙看看我的代码哪里有问题。
加入存储后,按钮无法控制LED了,不加就可以,但是不能存储。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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