📄 init.c
字号:
#include <ATT7027.H>
#include <MAIN.H>
void LcdDrvInit(void);
void L_default(void);
void restoredata(void);
void init_ATT7027(void);
void load_Flash_write(void);
unsigned char judg_flash_init(void);
void init_RTC(void);
unsigned char check_sum(unsigned char *p,unsigned char length);
void UpdateLCD(unsigned long x);
void init_time(void);
code unsigned char eeprominit[] =
{
0x33, 0x33, 0x33,
0x11, 0x11, 0x11, // Meter serial number.
0x12, 0x34, 0x56, 0x00, //eprom_program_password
0x00, 0x16, 0x00, // Real meter constant = 1600 counts/kWh
0xaa, //0x00,
0x59, 0x23, //eprom_autoread_date[2];
0x00, 0x96, 0x00, //eprom_bureau_No
0x88, 0x88, 0x88, 0x88, //eprom_clear_password
0xff, 0xff, 0x06, //eprom_display_select
0x00, 0x00, //eprom_program_degree
0x00, 0x00, 0x00, 0x00,
0xaa,
0x00, 0x00, 0x00, 0x00,
0xca,
0x11, 0x12, 0x13, 0x14, //eprom_back_real_energy
0x55, 0x44, 0x33, 0x22,
0xaa,
0x21, 0x22, 0x23, 0x24,
0x22,
//0x00, 0x00, 0x00, //eprom_ActivePeakLevel[3];
0x00, //eprom_period_number[1];
0x00, 0x00, 0x00, 0x00,//eprom_clear_time[3];
//eprom_verify_time_25day;
0x00, 0x00, 0x00, 0x00,//eprom_program_time[4];
0x00, 0x00, 0x00, 0x00,//eprom_max_address[48];
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,// eprom_energy_day[40];
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x70, 0x05, 0x0a, 0x06 //eprom_energy_address[5];
};
void LcdDrvInit(void)
{
CLCDCFG=0x3f;//将PA、PB、PC口配置成LCD输出
CP02CFG=0x00;//将P0口配置成GPIO,P2口配置成UART0、UART1、LVDIN、SF、PF、QF
KEYIE=0x00;//将P1口配置为GPIO口,不产生按键中断,采用查询方式获得按键信息
CP3CFG=0x0a;//将P3.2配置成GPIO,P3.3配置成/INT1,其它口线为GPIO,允许UART1口的发送通讯Tx1进行38k调制
TCON|=0x04;//将/INT1配置成下降沿触发
CSUPDC&=0xdb;//OPEN LCD AND TPS,NOT OPEN IIC
CSUPDC|=0x08;//CLOSE LVD
LCDCR=0x00;//在系统被复位以后,LCD的状态是:COM0、COM1、COM2、COM3都被使用
//对比度选择最大对比度,快速充电时间为1/32个FLCD周期,快
LVDCON=0xc0;//将LVD配置成检测LVDIN管脚
}
void init_ATT7027(void)
{
Flash_Read_ATT7027(OFFSET_OF(EEPROM_DATA,Active_Power_Gain_GP1), &g_CommBuffer[0],OFFSET_OF(EEPROM_DATA,Active_Power_Gain_GP1)-OFFSET_OF(EEPROM_DATA,EMU_Krms_Rms));
WriteCALATT7027(0x41,&g_CommBuffer[0],OFFSET_OF(EEPROM_DATA,Active_Power_Gain_GP1)-OFFSET_OF(EEPROM_DATA,EMU_Krms_Rms));
}
void init_RTC(void)
{
EA=0;
BWPR=0xC3;//使能写PMOD[1:0]操作
BWPR=0x9B;//开启所有受保护位的写使能
CSECR=0x59;
CMINR=0x30;
CHOUR=0x12;
CDAYR=0x10;
CMTHR=0x04;
CYEAR=0x07;
CWKDR=0x02;
BWPR=0xA8;//关闭所有受保护位和受保护寄存器的写使能
//BWPR=0x9A;
}
void init_time(void)
{
TMOD=0x09;//将TIMER0为16位触的定为模
CKCON=0x08;
TCON=0X10;
TL1=0XF4;
TH1=0XF4;
TL0=0X00;
TH0=0X01;
SCON1=0XC0;
IE=0X82;
}
void UpdateLCD(unsigned long x)
{
unsigned char i;
static const unsigned char LCDFont[] =
{
0x7D, // 0
0x60, // 1
0x3E, // 2
0x7A, // 3
0x63, // 4
0x5B, // 5
0x5F, // 6
0x70, // 7
0x7F, // 8
0x7B, // 9
0x77, // A
0x4F, // B
0x1D, // C
0x6E, // D
0x1F, // E
0x17 // F
};
for(i=4;i<=11;i++)
{
LADR=i*2-1;
LDAT=(LCDFont[(x >>((11-i)*4)) & 0xf])&0xf;
LADR=i*2;
LDAT=(LCDFont[(x >>((11-i)*4)) & 0xf]>>4)&0xf;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -