⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 att7025是一个单相SOC的单心片电表方案
💻 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 + -