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

📄 ddsy922.c

📁 为88SC102IC卡与AT89C52做表的可以供大家参考
💻 C
📖 第 1 页 / 共 5 页
字号:
//==============================================================================
// 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 + -