diff --git a/MCU/MCU_REAL _FINAL/MCU_1.uvopt b/MCU/MCU_REAL _FINAL/MCU_1.uvopt
index 2dd09f6..b06f386 100644
--- a/MCU/MCU_REAL _FINAL/MCU_1.uvopt
+++ b/MCU/MCU_REAL _FINAL/MCU_1.uvopt
@@ -281,6 +281,18 @@
0
0
+
+ 1
+ 7
+ 1
+ 0
+ 0
+ 0
+ .\eeprom.c
+ eeprom.c
+ 0
+ 0
+
@@ -291,7 +303,7 @@
0
2
- 7
+ 8
5
0
0
@@ -303,7 +315,7 @@
2
- 8
+ 9
5
0
0
@@ -315,7 +327,7 @@
2
- 9
+ 10
5
0
0
@@ -327,7 +339,7 @@
2
- 10
+ 11
5
0
0
@@ -339,7 +351,7 @@
2
- 11
+ 12
5
0
0
@@ -351,7 +363,7 @@
2
- 12
+ 13
5
0
0
@@ -363,7 +375,7 @@
2
- 13
+ 14
5
0
0
@@ -375,7 +387,7 @@
2
- 14
+ 15
5
0
0
@@ -385,6 +397,18 @@
0
0
+
+ 2
+ 16
+ 5
+ 0
+ 0
+ 0
+ .\eeprom.h
+ eeprom.h
+ 0
+ 0
+
diff --git a/MCU/MCU_REAL _FINAL/MCU_1.uvproj b/MCU/MCU_REAL _FINAL/MCU_1.uvproj
index 6e0a1ba..504d171 100644
--- a/MCU/MCU_REAL _FINAL/MCU_1.uvproj
+++ b/MCU/MCU_REAL _FINAL/MCU_1.uvproj
@@ -406,6 +406,11 @@
1
.\block.c
+
+ eeprom.c
+ 1
+ .\eeprom.c
+
@@ -451,6 +456,11 @@
5
..\MCU_5 _Wave_Generate\delay.h
+
+ eeprom.h
+ 5
+ .\eeprom.h
+
diff --git a/MCU/MCU_REAL _FINAL/eeprom.c b/MCU/MCU_REAL _FINAL/eeprom.c
new file mode 100644
index 0000000..4063b32
--- /dev/null
+++ b/MCU/MCU_REAL _FINAL/eeprom.c
@@ -0,0 +1,88 @@
+/*------------------------------------------------------------------*/
+/* --- STC MCU Limited ---------------------------------------------*/
+/* --- STC89-90xx Series MCU ISP/IAP/EEPROM Demo -------------------*/
+/* --- Mobile: (86)13922805190 -------------------------------------*/
+/* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/
+/* --- Tel: 86-0513-55012928,55012929,55012966----------------------*/
+/* --- Web: www.STCMCU.com -----------------------------------------*/
+/* --- Web: www.GXWMCU.com -----------------------------------------*/
+/* If you want to use the program or the program referenced in the */
+/* article, please specify in which data and procedures from STC */
+/*------------------------------------------------------------------*/
+
+#include "reg51.h"
+#include "intrins.h"
+#include "eeprom.h"
+
+
+/*----------------------------
+Disable ISP/IAP/EEPROM function
+Make MCU in a safe state
+----------------------------*/
+void IapIdle()
+{
+ IAP_CONTR = 0; //Close IAP function
+ IAP_CMD = 0; //Clear command to standby
+ IAP_TRIG = 0; //Clear trigger register
+ IAP_ADDRH = 0x80; //Data ptr point to non-EEPROM area
+ IAP_ADDRL = 0; //Clear IAP address to prevent misuse
+}
+
+/*----------------------------
+Read one byte from ISP/IAP/EEPROM area
+Input: addr (ISP/IAP/EEPROM address)
+Output:Flash data
+----------------------------*/
+BYTE IapReadByte(WORD addr)
+{
+ BYTE dat; //Data buffer
+
+ IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
+ IAP_CMD = CMD_READ; //Set ISP/IAP/EEPROM READ command
+ IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
+ IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
+ IAP_TRIG = 0x46; //Send trigger command1 (0x46)
+ IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
+ _nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
+ dat = IAP_DATA; //Read ISP/IAP/EEPROM data
+ IapIdle(); //Close ISP/IAP/EEPROM function
+
+ return dat; //Return Flash data
+}
+
+/*----------------------------
+Program one byte to ISP/IAP/EEPROM area
+Input: addr (ISP/IAP/EEPROM address)
+ dat (ISP/IAP/EEPROM data)
+Output:-
+----------------------------*/
+void IapProgramByte(WORD addr, BYTE dat)
+{
+ IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
+ IAP_CMD = CMD_PROGRAM; //Set ISP/IAP/EEPROM PROGRAM command
+ IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
+ IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
+ IAP_DATA = dat; //Write ISP/IAP/EEPROM data
+ IAP_TRIG = 0x46; //Send trigger command1 (0x46)
+ IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
+ _nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
+ IapIdle();
+}
+
+/*----------------------------
+Erase one sector area
+Input: addr (ISP/IAP/EEPROM address)
+Output:-
+----------------------------*/
+void IapEraseSector(WORD addr)
+{
+ IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
+ IAP_CMD = CMD_ERASE; //Set ISP/IAP/EEPROM ERASE command
+ IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
+ IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
+ IAP_TRIG = 0x46; //Send trigger command1 (0x46)
+ IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
+ _nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
+ IapIdle();
+}
+
diff --git a/MCU/MCU_REAL _FINAL/eeprom.h b/MCU/MCU_REAL _FINAL/eeprom.h
new file mode 100644
index 0000000..c2cd2d9
--- /dev/null
+++ b/MCU/MCU_REAL _FINAL/eeprom.h
@@ -0,0 +1,36 @@
+#ifndef _EEPROM_H_
+#define _EEPROM_H_
+
+/*Declare SFR associated with the IAP */
+sfr IAP_DATA = 0xE2; //Flash寄存器
+sfr IAP_ADDRH = 0xE3; //Flash 高地址
+sfr IAP_ADDRL = 0xE4; //Flash 低地址
+sfr IAP_CMD = 0xE5; //Flash 命令寄存器
+sfr IAP_TRIG = 0xE6; //Flash 控制触发器
+sfr IAP_CONTR = 0xE7; //Flash 控制寄存器
+
+/*Define ISP/IAP/EEPROM command*/
+#define CMD_IDLE 0 //空闲
+#define CMD_READ 1 //读
+#define CMD_PROGRAM 2 //写
+#define CMD_ERASE 3 //擦除
+
+/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
+//#define ENABLE_IAP 0x80 //if SYSCLK<40MHz
+#define ENABLE_IAP 0x81 //if SYSCLK<20MHz
+//#define ENABLE_IAP x82 //if SYSCLK<10MHz
+//#define ENABLE_IAP 0x83 //if SYSCLK<5MHz
+
+//Start address for STC89C58xx EEPROM
+#define IAP_ADDRESS 0x08000
+
+typedef unsigned char BYTE;
+typedef unsigned int WORD;
+
+void Delay(BYTE n);
+void IapIdle();
+BYTE IapReadByte(WORD addr);
+void IapProgramByte(WORD addr, BYTE dat);
+void IapEraseSector(WORD addr);
+
+#endif
\ No newline at end of file
diff --git a/MCU/MCU_REAL _FINAL/main.c b/MCU/MCU_REAL _FINAL/main.c
index 376947a..1cdd56a 100644
--- a/MCU/MCU_REAL _FINAL/main.c
+++ b/MCU/MCU_REAL _FINAL/main.c
@@ -6,26 +6,10 @@ unsigned char TH, TL;
extern Menu *NOW; //菜单指针
extern enum OPR opr; //按键状态
-unsigned char freshScreenTriger = 0;
void int0() interrupt 0 //外部中断:检测左右旋钮
{
-// IE0 = 0; //消抖
-// delay(20);
-// IE0 = 0;
-//
-// if(PIN_3 == 0)
-// {
-// delay(10);
-// if(PIN_3 == 0)
-// opr = left;
-// }
-// else if(PIN_3 == 1)
-// {
-// delay(10);
-// if(PIN_3 == 1)
-// opr = right;
-// }
+
unsigned char LS, CS, flag = 0;
LS = PIN_3;
while(!PIN_1)
@@ -81,7 +65,7 @@ int main()
displayInit(); //屏幕初始化
clear();
menuInit(); //菜单及其他初始化
-
+
while(1)
{