熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-3-23 16:26
正文摘要:新手,沒有太多的黑幣,抱歉了! 如圖,想做一個(gè)多路開關(guān)玩,手頭有拆機(jī)的MCU,請(qǐng)高手幫忙設(shè)計(jì)程序。 1、KEY1~7分別控制LED1~7; 2、當(dāng)任意一個(gè)KEY按下后對(duì)應(yīng)LED點(diǎn)亮,但其它LED滅; 4、需要在關(guān)機(jī)斷電時(shí)記錄最 ... |
511386807 發(fā)表于 2018-3-24 14:28 師傅,幫忙看看我的代碼哪里有問題。 加入存儲(chǔ)后,按鈕無法控制LED了,不加就可以,但是不能存儲(chǔ)。 |
#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(); } |
沒有EEProm沒法實(shí)現(xiàn)記憶功能 |
511386807 發(fā)表于 2018-3-24 14:28 關(guān)鍵是,不會(huì)寫。 ![]() |
每次有按鍵按下時(shí),將當(dāng)前的狀態(tài)寫入EEPROM中,每次程序啟動(dòng)時(shí),從EEPROM讀取就行。 |
Powered by 單片機(jī)教程網(wǎng)