📄 eepromcopy.c
字号:
/***************************************************************************************************************************
* Project: EepromCopy Software Part
*
* File: EepromCopy.C (Source)
*
*Version: V0.00
*
* Created: 2006.05.10
* Last Change: 2006.05.10
*
* Author: LaiJun
*
* Company: COBY
*
* Compiler: KEIL C51 V7.07
*
* Description:
*
* SM5964(@12MHz)
*
*Copyright (c) COBY Integration Technology, Inc.
*All rights reserved.
*
***************************************************************************************************************************/
#include "PublicDef.h"
#include "PublicFunction.h"
#include "LED_FONT.H"
//define Public var
union
{
BYTE bytes[128];
WORD words[64];
DWORD dwords[32];
} GpBuffer;
BYTE *ptGpBuffer;
BYTE bDelayTime,Operate_Flag;
WORD wDelayTime,wDemoDelay,Chip_Station,Chip_Station_copy,Error_Flag;
WORD CODE Chip_table[]=
{
CHIP_STATION_D1,
CHIP_STATION_D2,
CHIP_STATION_D3,
CHIP_STATION_D4,
CHIP_STATION_D5,
CHIP_STATION_D6,
CHIP_STATION_D7,
CHIP_STATION_D8,
CHIP_STATION_R
};
BYTE CODE Led_Table[]={
#include "LED_FONT.TXT"
};
void InitMcu(void)
{
#ifdef MCU_SM5964_SynCmos
TMOD=0x10;
TL1=bCOPYTL1;
TH1=bCOPYTH1;
SCON=0x50;
T2CON=0x30;
PCON=0x00;
TH2=RCAP2H=0xff;
TL2=RCAP2L=BAUD_UART;
IT1 =0;
ET1=ES=1;
PT1=0;PS=1;
TR1=TR2=1;
EX1=0;
WDTC=0;
EA=btENABLE;
SCONF=0x0E;
DBANK=0x00;
#endif
}
void TurnOnOff_Light(BYTE Light)
{
switch (Light)
{
case LIGHT_RED:
Pin_LIGHT_RED=1;
Pin_LIGHT_GREEN=0;
break;
case LIGHT_GREEN:
Pin_LIGHT_RED=0;
Pin_LIGHT_GREEN=1;
break;
case LIGHT_YELLOW:
Pin_LIGHT_RED=1;
Pin_LIGHT_GREEN=1;
break;
case LIGHT_OFF:
Pin_LIGHT_RED=0;
Pin_LIGHT_GREEN=0;
break;
}
}
void Disp_Led(BYTE Led_Out)
{
Pin_Led_Out=Led_Out;
}
void SetEeprom(void)
{
#if SELECT_TYPE_METHOD==SELECT_BY_SOFT
Eeprom.bType_Eeprom=EEPROM_TYPE;
#else
Eeprom.bType_Eeprom=(Pin_Type_Select>>4)&0x0f;
#endif
switch (Eeprom.bType_Eeprom)
{
case EEPROM_24C01:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C01;
Eeprom.bBytes_PerPage=PAGEBYTES_24C02;
break;
case EEPROM_24C02:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C02;
Eeprom.bBytes_PerPage=PAGEBYTES_24C02;
break;
case EEPROM_24C04:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C04;
Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
break;
case EEPROM_24C08:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C08;
Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
break;
case EEPROM_24C16:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C16;
Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
break;
case EEPROM_24C32:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C32;
Eeprom.bBytes_PerPage=PAGEBYTES_24C64;
break;
case EEPROM_24C64:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C64;
Eeprom.bBytes_PerPage=PAGEBYTES_24C64;
break;
case EEPROM_24C128:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C128;
Eeprom.bBytes_PerPage=PAGEBYTES_24C256;
break;
case EEPROM_24C256:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C256;
Eeprom.bBytes_PerPage=PAGEBYTES_24C256;
break;
case EEPROM_24C512:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C512;
Eeprom.bBytes_PerPage=PAGEBYTES_24C512;
break;
default:
Eeprom.wPages_Eeprom=EEPROM_PAGES_24C08;
Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
break;
}
}
BYTE Chek_ChipStation(BYTE Iic_type)
{
SetIIC_Type(Iic_type);
Reset_Eeprom();
ptGpBuffer=GpBuffer.bytes;
if (EepromRead(0,1)==btIIC_RIGHT)
{
Chip_Station|=Chip_table[Iic_type];
return btIIC_RIGHT;
}
else
{
Chip_Station&=~Chip_table[Iic_type];
return btIIC_ERROR;
}
}
void Chek_Chip(void)
{
BYTE Iic_Chip;
for (Iic_Chip=IIC_AT24CXX_D1;Iic_Chip<=IIC_AT24CXX_R;Iic_Chip++)
Chek_ChipStation(Iic_Chip);
}
void Disp_CurLed(WORD Chip_Select)
{
switch (Chip_Select)
{
case CHIP_STATION_R:
Disp_Led(Led_Table[0]);
break;
case CHIP_STATION_D1:
Disp_Led(Led_Table[1]);
break;
case CHIP_STATION_D2:
Disp_Led(Led_Table[2]);
break;
case CHIP_STATION_D3:
Disp_Led(Led_Table[3]);
break;
case CHIP_STATION_D4:
Disp_Led(Led_Table[4]);
break;
case CHIP_STATION_D5:
Disp_Led(Led_Table[5]);
break;
case CHIP_STATION_D6:
Disp_Led(Led_Table[6]);
break;
case CHIP_STATION_D7:
Disp_Led(Led_Table[7]);
break;
case CHIP_STATION_D8:
Disp_Led(Led_Table[8]);
break;
}
}
void Disp_Loop(BYTE loop)
{
switch (loop)
{
case 0:
Disp_Led(Led_Table[CH_REG_A]);
break;
case 1:
Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]);
break;
case 2:
Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]);
break;
case 3:
Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]);
break;
case 4:
Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]);
break;
case 5:
Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
break;
case 6:
Disp_Led(Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
break;
case 7:
Disp_Led(Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
break;
case 8:
Disp_Led(Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
break;
case 9:
Disp_Led(Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
break;
case 10:
Disp_Led(Led_Table[CH_REG_F]);
break;
case 11:
Disp_Led(Led_Table[CH_NULL]);
break;
}
}
void Copy_Eeprom(void)
{
WORD Eeprom_Pages,Chip_Select;
BYTE Iic_Select,light_status=0,Scan=Eeprom.wPages_Eeprom/9;
SetEeprom();
TurnOnOff_Light(LIGHT_YELLOW);
wDelayTime=100;
while (wDelayTime);
Error_Flag=CHIP_STATION_NO;
for (Eeprom_Pages=0;Eeprom_Pages<Eeprom.wPages_Eeprom;Eeprom_Pages++)
{
TurnOnOff_Light(LIGHT_YELLOW);
SetIIC_Type(IIC_AT24CXX_R);
ptGpBuffer=GpBuffer.bytes;
if (EepromRead(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
{
Operate_Flag=OPERATE_ER;
Error_Flag|=CHIP_STATION_R;
break;
}
TurnOnOff_Light(LIGHT_OFF);
Disp_Led(Led_Table[(Eeprom.wPages_Eeprom-Eeprom_Pages)/Scan]);
for (Chip_Select=CHIP_STATION_D1,Iic_Select=IIC_AT24CXX_D1;Chip_Select<=CHIP_STATION_D8;Chip_Select<<=1,Iic_Select++)
{
if ((Chip_Station&Chip_Select)&&((Error_Flag&Chip_Select)==0))
{
if (light_status==0)
{
TurnOnOff_Light(LIGHT_YELLOW);
light_status=1;
}
else
{
TurnOnOff_Light(LIGHT_OFF);
light_status=0;
}
SetIIC_Type(Iic_Select);
ptGpBuffer=GpBuffer.bytes;
if (EepromWrite(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
{
Operate_Flag=OPERATE_ER;
Error_Flag|=Chip_Select;
}
}
}
}
#if 0
for (Chip_Select=CHIP_STATION_D1,Iic_Select=IIC_AT24CXX_D1;Chip_Select<=CHIP_STATION_D8;Chip_Select<<=1,Iic_Select++)
{
if (Chip_Station&Chip_Select)
{
Disp_CurLed(Chip_Select);
for (Eeprom_Pages=0;Eeprom_Pages<Eeprom.wPages_Eeprom;Eeprom_Pages++)
{
TurnOnOff_Light(LIGHT_YELLOW);
SetIIC_Type(IIC_AT24CXX_R);
ptGpBuffer=GpBuffer.bytes;
if (EepromRead(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
{
Operate_Flag=OPERATE_ER;
Error_Flag|=CHIP_STATION_R;
break;
}
TurnOnOff_Light(LIGHT_OFF);
SetIIC_Type(Iic_Select);
ptGpBuffer=GpBuffer.bytes;
if (EepromWrite(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
{
Operate_Flag=OPERATE_ER;
Error_Flag|=Chip_Select;
break;
}
}
}
}
#endif
if (Error_Flag==CHIP_STATION_NO)
Operate_Flag=OPERATE_OK;
}
void Operate_Eeprom(void)
{
if ((Chip_Station&CHIP_STATION_R)&&(Chip_Station!=CHIP_STATION_R))
Copy_Eeprom();
else
{
Operate_Flag=OPERATE_ER;
Error_Flag=CHIP_STATION_R;
}
if (Operate_Flag==OPERATE_OK)
{
TurnOnOff_Light(LIGHT_GREEN);
Disp_Led(Led_Table[CH_NULL]);
}
else
TurnOnOff_Light(LIGHT_RED);
wDelayTime=500;
while (wDelayTime);
Key_Func=KEY_NO_KEY;
while (1)
{
Chek_key();
if (Key_Func==KEY_NO_KEY)
break;
}
}
void main(void)
{
BYTE Loop_Counter,Loop_Counter1;
WORD wLoop_Counter;
InitMcu();
TurnOnOff_Light(LIGHT_OFF);
Disp_Led(Led_Table[CH_NULL]);
wDelayTime=1000;
while (wDelayTime);
SetEeprom();
Loop_Counter=0;
Loop_Counter1=11;
wLoop_Counter=0;
Operate_Flag=OPERATE_NO;
wDemoDelay=400;
Chip_Station=Chip_Station_copy=CHIP_STATION_NO;
Error_Flag=CHIP_STATION_NO;
while (1)
{
Chek_key();
if (Key_Func==KEY_START)
{
Operate_Eeprom();
Chek_Chip();
Chip_Station_copy=Chip_Station;
wLoop_Counter=CHIP_STATION_R;
}
switch (Operate_Flag)
{
case OPERATE_NO:
if (wDemoDelay%50==0)
{
Chek_Chip();
if (Chip_Station!=Chip_Station_copy)
{
if (Chip_Station_copy==CHIP_STATION_NO)
{
if (Chip_Station&CHIP_STATION_R)
wLoop_Counter=CHIP_STATION_R;
else if (Chip_Station&CHIP_STATION_D1)
wLoop_Counter=CHIP_STATION_D1;
else if (Chip_Station&CHIP_STATION_D2)
wLoop_Counter=CHIP_STATION_D2;
else if (Chip_Station&CHIP_STATION_D3)
wLoop_Counter=CHIP_STATION_D3;
else if (Chip_Station&CHIP_STATION_D4)
wLoop_Counter=CHIP_STATION_D4;
else if (Chip_Station&CHIP_STATION_D5)
wLoop_Counter=CHIP_STATION_D5;
else if (Chip_Station&CHIP_STATION_D6)
wLoop_Counter=CHIP_STATION_D6;
else if (Chip_Station&CHIP_STATION_D7)
wLoop_Counter=CHIP_STATION_D7;
else
wLoop_Counter=CHIP_STATION_D8;
}
else
wLoop_Counter=Chip_Station^Chip_Station_copy;
Disp_CurLed(wLoop_Counter);
Chip_Station_copy=Chip_Station;
if (Chip_Station==CHIP_STATION_NO)
Loop_Counter1=5;
else
wDemoDelay=600;
}
}
if (wDemoDelay==0)
{
Loop_Counter=INC(Loop_Counter,LIGHT_RED,LIGHT_YELLOW);
TurnOnOff_Light(Loop_Counter);
if (Chip_Station!=CHIP_STATION_NO)
{
while (1)
{
if (wLoop_Counter==CHIP_STATION_R)
wLoop_Counter=CHIP_STATION_D1;
else
wLoop_Counter*=2;
if (Chip_Station&wLoop_Counter)
break;
}
Disp_CurLed(wLoop_Counter);
wDemoDelay=600;
}
else
{
Loop_Counter1=INC(Loop_Counter1,0,11);
Disp_Loop(Loop_Counter1);
wDemoDelay=200;
}
}
break;
case OPERATE_ER:
if (wDemoDelay%50==0)
{
Chek_Chip();
if (Chip_Station!=Chip_Station_copy)
{
Operate_Flag=OPERATE_NO;
Chip_Station_copy=CHIP_STATION_NO;
Chip_Station=CHIP_STATION_NO;
Loop_Counter=0;
wLoop_Counter=0;
Loop_Counter1=11;
break;
}
}
if (wDemoDelay==0)
{
if (Error_Flag!=CHIP_STATION_NO)
{
while (1)
{
if (wLoop_Counter==CHIP_STATION_R)
wLoop_Counter=CHIP_STATION_D1;
else
wLoop_Counter*=2;
if (Error_Flag&wLoop_Counter)
break;
}
Disp_CurLed(wLoop_Counter);
}
Loop_Counter=INCx(Loop_Counter,0,3,3);
TurnOnOff_Light(Loop_Counter);
wDemoDelay=400;
}
break;
case OPERATE_OK:
if (wDemoDelay%50==0)
{
Chek_Chip();
if (Chip_Station!=Chip_Station_copy)
{
Disp_CurLed(Chip_Station^Chip_Station_copy);
Chip_Station_copy=Chip_Station;
wDemoDelay=800;
}
if ((Chip_Station==CHIP_STATION_R)||(Chip_Station==CHIP_STATION_NO))
{
Operate_Flag=OPERATE_NO;
Chip_Station_copy=CHIP_STATION_NO;
Loop_Counter=0;
wLoop_Counter=0;
Loop_Counter1=11;
}
}
if (wDemoDelay==0)
{
wDemoDelay=800;
Disp_Led(Led_Table[CH_NULL]);
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -