📄 ddsy922.c
字号:
//==============================================================================
// PROJECT = DemoDDSY966
// MODULE = main.C
// SHORT DESC. = main module
// DEVICE = ATMAIL89SC52
// VERSION = 1.1
// DATE = 07.11.2006
// LAST CHANGE =
//-----------------------------------------------------------------------------
// Include files
//-----------------------------------------------------------------------------
#include "REGX52.H"
//-----------------------------------------------------------------------------
// Function prototypes
//-----------------------------------------------------------------------------
typedef struct
{
unsigned char eprom_factory_No[6];
//unsigned char eprom_meter_No[3];
unsigned char eprom_program_password[4];
unsigned char eprom_meter_constant[3];
unsigned char eprom_meter_iniflag;
unsigned char eprom_program_degree[2];
//unsigned char eprom_autoread_date[2];
//unsigned char eprom_bureau_No[3];
unsigned char eprom_clear_password[4];
//unsigned char eprom_display_select[3];
unsigned char eprom_money_scale;
//unsigned char eprom_ActivePeakLevel[3];
//unsigned char eprom_money_sum[4];
//unsigned char eprom_money_overplus[4];
unsigned char eprom_money_degree[2];
//unsigned char eprom_money_time[3];
unsigned char eprom_money_notice0[3];
unsigned char eprom_money_notice1[3];
unsigned char eprom_money_tally[3];
unsigned char eprom_real_energy[16];
unsigned char eprom_back_real_energy[16];
//unsigned char eprom_PeakLevel[3];
//unsigned char eprom_period_number[1];
//unsigned char eprom_period_table[36];
//unsigned char eprom_reverse_stime[3];
//unsigned char eprom_reverse_ttime[3];
//unsigned char eprom_clear_time[4];
//unsigned char eprom_verify_time_25day;
//unsigned char eprom_program_time[4];
//unsigned char eprom_min_address[48];
//unsigned char eprom_energy_day[40];
//unsigned char eprom_energy_address[5];
}EEPROM_DATA;
struct real_energy
{
union {
unsigned long current_energy;
unsigned char energy[4];
}electric;
union {
unsigned long current_money_sum;
unsigned char money_sum[4];
}money;
union {
unsigned char money_overplus[4];
unsigned long current_money_overplus;
}money0;
unsigned char pulse[1];
union {
struct
{
unsigned char command:1;
unsigned char fact:1;
unsigned char iccommand:1;
unsigned char iiccommand:1;
unsigned char fanction:4;
}bitflag;
unsigned char relay_flag;
}relayflag;
unsigned char moto_flag;
unsigned char cs;
};
struct meter_para
{
unsigned char factory_No[6];
//unsigned char meter_number[3];
unsigned char prg_password[4];
unsigned char pulse_constant[3];
unsigned char iniflag;
};
struct time
{ unsigned char second;
unsigned char second1;
unsigned char minute;
unsigned char hour;
unsigned char week;
unsigned char day;
unsigned char month;
unsigned char year;
};
/*struct ICCARD
{
unsigned char IC_card_money_sum[4];
unsigned char IC_card_money_scale[2];
unsigned char IC_card_money_degree[2];
unsigned char IC_card_money_time[3];
unsigned char IC_card_PeakLevel[3];
unsigned char IC_card_money_notice0[3];
unsigned char IC_card_money_notice1[3];
unsigned char IC_card_money_tally[3];
unsigned char IC_card_money_cs;
};
typedef struct
{
unsigned char IC_kind_card[2];
unsigned char IC_type_card[2];
unsigned char IC_system_number[3];
unsigned char IC_card_NO[3];
unsigned char IC_card_program[2];
unsigned char IC_card_erro[2];
unsigned char IC_card_flag[8];
unsigned char IC_az1_control;
union {
struct ICCARD IC_card_real[2];
//struct ICCARD,IC_card_back_real;
unsigned char IC_card_chenk1[63];
}IC_real1;
//unsigned char IC_card_chenk1[63];
unsigned char IC_card_ez1[6];
unsigned char IC_az2_control;
union{
struct real_energy real_energy;
unsigned char IC_card_chenk2[63];
}IC_real2;
//unsigned char IC_card_real_energy[14];
//union ICCARD IC_card_real[2];
//union ICCARD IC_card_back_real;
}IC_card; */
//unsigned char data ec.ReceBuf[30]={0x33,0x33,0x33,0x33,0x22,0x22,0x22,0x22,0x11,0x11,0x11,0x01,0x00,0x00 };
unsigned char idata SentBuf[16]={0x00,0x50,0x00,0x00,0x66,0x18,0x67,0x12,0x01,0x11,0x11};
unsigned char code Segment[34]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff,0x8c,0xa3,0xaf,0xc1,0xc7,0xc8,0x18};//*显示数
unsigned char idata SecCounter=0;
unsigned char idata Rece500ms=0;
unsigned char idata RecCounter=0;
unsigned char idata SecCounter500ms=0;
unsigned char idata Flag_ReceFinish=0;
unsigned char idata DisBuf[7]={0,0,0,0,0,0,0};
unsigned char idata DisMode=0;
unsigned char idata DisBit=0;
unsigned char idata DBit=1;
unsigned char idata led_Play=1 ;
unsigned char idata Command_status1;
unsigned char idata CardType;
unsigned char half_second=0;
bit Flag_ReadTime=0;
bit flag_send=0;
bit Flag_Rece=0;
bit Flag_Sec=0;
bit Flag_Relay=0;
bit Flag_Relay1=0;
bit Flag_Play=0;
//iic
sbit CTRL485 = P1^5; /* RX485的控制端*/
sbit Portic = P2^4;
sbit SO=P1^3;/*25045输出*/
sbit SI=P1^1;/*25045输入*/
sbit SCK=P1^2;/*25045时钟*/
sbit CS=P1^0;/*25045片选*/
sbit CTR_ON=P1^6;
sbit CTR_OFF=P1^7;
bit spi_read_stat=0;
struct time idata current_time;
struct meter_para idata meter_para;
struct real_energy idata real_energy;
//COMM_BUFFER g_CommBuffer;
/*unsigned char flag1;
unsigned char flag2;
unsigned char flag3;
unsigned char lcd_Play;
unsigned char half_second=0;
unsigned char Flag_ICPort;
unsigned char pulse_time;
unsigned char moto_time;
unsigned char reay_time;
unsigned char kwh_flag;
unsigned char kwh10_flag;
unsigned char down_save;
unsigned char energy_address,energy_address_day;
// unsigned char rxdata,txdata;
unsigned char rs_flag,full_flag,check_program_state,chk_user_state;
unsigned char bptr,tmp;
struct meter_para meter_para;
struct real_energy real_energy;
unsigned int time_out,in_program_out;
unsigned char minute_0_deal; */ // minute deal flag
//-----------------------------------------------------------------------------
// Global string constants
//-----------------------------------------------------------------------------
#define HIGH 1
#define LOW 0
#define offsetof(type,member) ((int)(&((type *)0)->member))
#define OFFSET_OF(type,member) offsetof(type,member)
#define SIZE_OF(TYPE,MEMBER) sizeof(((TYPE *)0)->MEMBER)
#define ClrIORBit(Reg, ClrBitMap) Reg &= ~ClrBitMap
#define SetIORBit(Reg, SetBitMap) Reg |= SetBitMap
//MAIN.C
unsigned char m_days(unsigned char mmonth);
void CalcCalendar(void);
//init.c
void delay_ms(unsigned int m);
void INT_Init( void );
void io_init(void);
void Clock_Init(void);
void timer_init(void);
void init_serialcomm(void);
void eeprom(void);
unsigned char judg_eeprom_init(void);
void L_default(void);
void Power_fail(void);
void POWER_On(void);
//I2C.c
void DelayNus(unsigned char DelayNum);
void DelayNus1(unsigned char DelayNum);
void wren_cmd(void);
void wrdi_cmd(void);
void wrsr_cmd(void);
unsigned char rdsr_cmd (void);
unsigned char page_write( unsigned int addr,unsigned char *S, unsigned char len);
unsigned char page_read(unsigned int addr,unsigned char *pp, unsigned char len);
void wip_poll(void);
void outbyt(unsigned char aa) ;
unsigned char inputbyt(void);
void rst_wdog(void);
//interrupt.c
void DisBufToBCD();
Display(void);
DataToDisBuf(void);
//measure.c
void energy_add(void);
unsigned char bcd_to_hex(unsigned char value);
unsigned long BCDTWOAdd(unsigned long x, unsigned long y);
unsigned long BCDTWOSub(unsigned long x, unsigned long y);
void bcdsub(unsigned char *value,unsigned char length);
void bcdadd(unsigned char *value,unsigned char length);
void relayON_OFF(void);
void relaynotice(void);
unsigned char check_ten_minute(unsigned char check_hour,unsigned char check_minute);
unsigned char Tow_Compare(unsigned char *Compare0 ,unsigned char *Compare );
// unsigned char *TWO_BCD_Add(unsigned char*Addition1,unsigned char *Addition);
// unsigned char TWO_BCD_Dec(unsigned char *Subtration1,unsigned char *Subtration);
unsigned long bin2bcd(unsigned long x);
unsigned char xaoyanghe_cs(unsigned char *p,unsigned char length);
//dl645.c
unsigned char Receive_Data();
bit Receive_One(unsigned char *r);
unsigned char power_check(unsigned char *r);
void Send_Data(unsigned char Serial_data);
void TXD_Int(unsigned char *s);
unsigned char Serial_Address(unsigned char *s1);
bit Serial_Password(unsigned char *s1);
bit Serial_Command_Run(unsigned char *s);
void Serial_Command();
void comm_ini(void);
//IC_CARD.c
unsigned char _CardReady();
void _CardSetPower(unsigned char level);
unsigned char _C102Reset();
void _C102AddsInc(unsigned char count);
void _C102Prog0(void);
void _C102Prog1(void);
int _C102Addressing(unsigned char address);
unsigned char C102CheckSC(unsigned char *sc);
unsigned char _C102Read(unsigned char address, unsigned char *retmsg,unsigned char len);
unsigned char _C102Write(unsigned char address, unsigned char *msg, unsigned char len);
unsigned char _C102Erase(unsigned char address, unsigned char len);
unsigned char IcHuanBiao();
unsigned char IcQinCu();
unsigned char IcChaoBiao();
unsigned char IcSheZhi();
unsigned char IcCheShi();
unsigned char IcGouDian();
unsigned char _ICardType();
unsigned char judg_meter_number(void);
extern void _nop_ (void);
unsigned char Flag_ICPort;
unsigned char reay_time;
unsigned char kwh_flag;
unsigned char kwh10_flag;
unsigned char down_save;
unsigned char moto_time;
unsigned char pulse_time;
//unsigned char energy_address,energy_address_day;
//unsigned char idata display_select[10];
union {
unsigned char ReceBuf[40];
unsigned long egy[4];
}ec;
//unsigned char idata display_time[40];
//unsigned char display_index;
//unsigned char display_communication;
//unsigned char flag1;
//unsigned char flag2;
//unsigned char flag3;
//unsigned char lcd_Play;
//extern COMM_BUFFER g_CommBuffer;
/*
unsigned char temp[3];*/
// INITIALIZATION DATA for the EEPROM
unsigned char code eeprominit[] =
{
0x00, 0x00, 0x00,
0x00, 0x00, 0x00, // 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, 0x25, 0x50, //eprom_ActivePeakLevel
// 0x00, 0x10, 0x00, 0x00, //eprom_money_sum
// 0x01, 0x00, //eprom_money_scale
0x00, 0x00, //eprom_money_degree
0x00, 0x00, 0x00, //eprom_money_time
0x00, 0x20, 0x00, //eprom_money_notice0
0x00, 0x10, 0x00, //eprom_money_notice1
0x33, 0x33, 0x33, //eprom_money_tally
0x00, 0x00, 0x00, 0x00, //eprom_real_energy
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00,
// 0xaa,
// 0x00, 0x00, 0x00, 0x00,
// 0xca,
0x00, 0x00, 0x00, 0x00, //eprom_back_real_energy
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// 0x88, 0x99, 0x77, 0x66,
// 0x55, 0x44, 0x33, 0x22,
//0xaa,
// 0x21, 0x22, 0x23, 0x24,
// 0x22,
//0x00, 0x00, 0x00, //eprom_ActivePeakLevel[3];
// 0x00, //eprom_period_number[1];
//0x25, 0x26, 0x27, 0x28, //eprom_period_table
//0x29, 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_reverse_stime[3];
//0x00, 0x00, 0x00,//eprom_reverse_ttime[3];
// 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 main();
//功能:完成通讯主流程
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -