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

📄 disp.c

📁 ATT7022B与C8051F的通讯licheng
💻 C
📖 第 1 页 / 共 5 页
字号:


#include "c8051F340.h"																					  
#include "att7022b.h"
#include "mytype.h"
#include "intrins.h"	   
#include "shift_parameter.h"
#include "math.h"				 
#include "declare.h" 
#include "74ls138.h"
#include "panel_disp.h"
#include "professional.h"
#include "light.h"


uint	xdata memory_count;			  //定时存储次数
uint	xdata freq_collect_times;
uchar	xdata backup_negative_sign[3];//三个显示备份标志位

uchar 	xdata ChkSum1_high_byte8, 
              ChkSum1_middle_byte8, 
              ChkSum1_low_byte8;    //数据校验和
uchar	xdata Chk_time;


uchar	code led_num[11] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49,
	                        0x41, 0x1f, 0x01, 0x09};//no radix point,0~9 
							            
uchar	code led_numh[11] = {0x02, 0x9e, 0x24, 0x0c, 0x98, 0x48,
							             0x40, 0x1e, 0x00, 0x08};//radix point,0~9

ulong 	xdata energy_collect_count;

			 

uchar 	xdata original_high_byte,			//读7022B的3个字节
		          original_middle_byte, 
		          original_low_byte;

uchar	xdata new_recombine_high, 			//新的重组数
		        new_recombine_middle,
		        new_recombine_low;
								 	//ct,pt一次二次值
uint	 xdata ct_once, 
             ct_secondary, 
             pt_once, 
             pt_secondary, 
             address;

uint 	xdata buffer_for_ct_once,  				//ct,pt一次二次缓冲值
		        buffer_for_ct_secondary, 
		        buffer_for_pt_once,
	         	buffer_for_pt_secondary, 
		        buffer_for_address;

uchar xdata baud_code,
            buffer_for_baud_code;//06-07-08修改

uchar xdata	  aa;										//按键类型
uchar xdata 	delay_num;							//扫描次数



xdata 	samping_var Ua, Ub, Uc, Ia, Ib, Ic, Pfa, Pfb, Pfc, Pfsum,F, Uab, Ubc, Uca;

xdata	  energy_pq_var  Pa, Pb, Pc, Psum, Qa, Qb, Qc, Qsum;
//used for remote communication
ulong	xdata 		Wha, Whb, Whc, Qha, Qhb, Qhc, TWH, TQH,
/********************************ADD BY ZHUGAOYUN*************************/
       //         ZWH, ZQH,FWH, FQH;     
            Wza, Wzb, Wzc, Qza, Qzb, Qzc, ZWH, ZQH,
                  Wfa, Wfb, Wfc, Qfa, Qfb, Qfc, FWH, FQH;
/********************************END*************************/
//used for local display
ulong	xdata		disp_Wha, disp_Whb, disp_Whc, disp_Qha, disp_Qhb, disp_Qhc, disp_TWH, disp_TQH,
/********************************ADD BY ZHUGAOYUN*************************/
//disp_ZWH, disp_ZQH,disp_FWH, disp_FQH;

             disp_Wza, disp_Wzb, disp_Wzc, disp_Qza, disp_Qzb, disp_Qzc, disp_ZWH, disp_ZQH,
              disp_Wfa, disp_Wfb, disp_Wfc, disp_Qfa, disp_Qfb, disp_Qfc, disp_FWH, disp_FQH; 
/********************************END*************************/
ulong 	xdata compare_value[3];				//上次显示的一组码值备份(用于和本次要显示的数值来比较)


uchar 	xdata HIGH_BIT[3], 						//用于显示的第三排数码管(实际显示)
		          LOW_BIT[3],  
		          NO_DOT[3];

uchar 	xdata HIGH_BIT_tmp[3], 					//用于显示的第三排数码管(显示备份)
		          LOW_BIT_tmp[3], 
		          NO_DOT_tmp[3];
		          
uchar 	xdata disp_high, 
		          disp_low, 
		          disp_dot;

uint 	xdata psd;
uchar 	xdata task_count_number;			//任务记数
uchar	xdata watchdog_times;
	  

xdata modbus_var modbus_com;

uchar	negative_sign ;//公共符号标志
uchar	backup_negative_sign[3];//三个显示备份标志位

//注意:press_key的其它位标志不能用(因为程序运行过程中要改变它的)
bdata 	char press_key =			0x0f;		
sbit 	additional_key =			press_key^0;/*四个按键对应的类型*/
sbit 	setting_key	=				  press_key^1;
sbit 	down_key =					  press_key^2;
sbit 	up_key =					    press_key^3;
sbit	prevent_bug1 =				press_key^4;//这四个标志程序中没有用到,为了防止程序bug
sbit	prevent_bug2 =				press_key^5;
sbit	prevent_bug3 = 				press_key^6;
sbit	prevent_bug4 =				press_key^7;




bdata 	char panel_flag =			0x00;		
sbit 	flag_voltage =				  panel_flag^0;/*对应的四组显示标志*/
sbit 	flag_current =				  panel_flag^1;
sbit 	flag_power_pfa =			  panel_flag^2;
sbit 	flag_wh_f =					    panel_flag^3;
sbit	flag_energy_collect =		panel_flag^4;
//sbit	negative_sign = 			panel_flag^5;//公共符号标志
sbit 	flag_check_key_disp =		panel_flag^6;
//sbit	flag_reset_type		=		panel_flag^7;

bdata 	char some_symbol =			0x00;
sbit 	has_press_key =				  some_symbol^0;//按键标志,1表示按下
sbit 	uart_int_flag =				  some_symbol^1;//uart中断标志
sbit 	entry_setting_flag =		some_symbol^2;//进入设置标志
sbit	flag_power_dump =			  some_symbol^3;
sbit	flag_c10ms =				    some_symbol^4;//Time for 10ms
sbit 	flag_finish_address =		some_symbol^5;
sbit 	flag_finish_password =	some_symbol^6;//set finishing password flag,0 is no finish
sbit	flag_finish_energy = 		some_symbol^7;

bdata 	uchar general_value =		0x00;
sbit 	flag_setting_ct_once =		  general_value^0;/*正在设置项目标志*/
sbit 	flag_setting_ct_secondary =	general_value^1;
sbit 	flag_setting_pt_once =		  general_value^2;
sbit 	flag_setting_pt_secondary =	general_value^3;
sbit 	flag_finish_ct_once =		    general_value^4;/*设置项目完成标志*/
sbit 	flag_finish_ct_secondary =	general_value^5;
sbit 	flag_finish_pt_once =		    general_value^6;
sbit 	flag_finish_pt_secondary =	general_value^7;


bit flag_setting_baud_code;

bit PANEL_ONE_LINE_ONE = 0;//初始化默认灯亮
bit PANEL_ONE_LINE_TWO = 0;
bit PANEL_ONE_LINE_THREE = 0;
bit PANEL_TWO_LINE_ONE = 0;
bit PANEL_TWO_LINE_TWO = 0;
bit PANEL_TWO_LINE_THREE = 0;
bit PANEL_THREE_LINE_ONE = 0;
bit PANEL_THREE_LINE_TWO = 0;
bit PANEL_THREE_LINE_THREE = 0;
bit PANEL_FOUR_LINE_ONE = 0;
bit PANEL_FOUR_LINE_TWO = 0;
bit PANEL_FOUR_LINE_THREE = 0;

bit finish_key_operate = 0;//键盘完成操作
uchar task_delay_num;//延时记数

bit first_power_on = 0;//刚上电标志
bit flag_write_energy = 0;//定时写电能


/****************************************ADD BY ZHUGAOYUN***********
sbit 	P3_7 = P3^7;
sbit 	P3_6 = P3^6;
sbit 	P3_5 = P3^5;
sbit 	P3_4 = P3^4;
sbit 	P3_3 = P3^3;
sbit 	P3_2 = P3^2;
sbit 	P3_1 = P3^1;
sbit 	P3_0 = P3^0;

#define MC_P_INPUT			      P3_0			
#define MC_Q_INPUT 				    P3_1
#define MC_ZP_OUTPUT 				  P3_2
#define MC_FP_OUTPUT   			  P3_3
#define MC_ZQ_OUTPUT 				  P3_4			
#define MC_FQ_OUTPUT 				  P3_5
**************************************END************/

void press_down_key();
void press_up_key();
void float_char(float valp);
void float_to_bcd();
void delay(uchar t);
void write_to_flash();
void get_cpt_from_flash();
void setting_password();
void init_7022B();
void clear_7022B_data();
/*add by zhugaoyun**/
void add_energy_mc();

const uchar code auchCRCHi[] = { /* CRC High Byte Table*/ 
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,                                                         
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,                                                         
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,                                                         
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,                                                         
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,                                                         
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,                                                         
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,                                                         
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,                                                         
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,                                                         
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,                                                         
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,                                                         
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,                                                         
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40} ;

const uchar code auchCRCLo[] = { /* CRC Low Byte Table*/ 
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,
0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,
0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,
0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,
0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,
0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40} ;

/*
***********************************************************************************************************
**函数原型		:  	Port_IO_Init()
**参数说明		:  	
				:		
**返回值		:		
**说	明		:	本函数用于340的I/O口初始化
************************************************************************************************************/	   
//---7022B中CS内部有200K的上拉电阻					CS---P4.5
//---7022B中DIN内部有200K的下拉电阻(Schmitt input)	DIN---P0.2 
//---7022B中SCLK内部是串行数据输入(Schmitt input)	SCLK---P0.0
//---7022B中DOUT串行数据输出						DOUT---P0.1
//---Schmitt input "1" is 0.6Vcc = 3V,"0" < 2V,high impedance is not exist
void Port_IO_Init()
{
    P0SKIP = 0xc0;
    XBR0 = 0x03;
    XBR1 = 0x40;				
	  P0MDIN &= 0x3f;
	  P0 |= 0x08;      //P0_3 = 1;  
	  P0MDOUT |= 0x05; //MOSI.SCK推挽输出;	 
	  P3 = 0xFF;       //遥信作为输入,先置1
	  P2 = 0xff;       //段码
	  P1 = 0xff;       //位选
}

/*
***********************************************************************************************************
**函数原型		:  	Oscillator_Init()
**参数说明		:  	
				:		
**返回值		:		
**说	明		:	本函数用于340的晶振初始化
************************************************************************************************************/
void Oscillator_Init(){	
	int i = 0;	  
	OSCXCN = 0x67;
	for(i = 0;i < 3000;i++);  // Wait 1ms for initialization 
	while((OSCXCN & 0x80) == 0);//Wait for external Crystal Oscillator running
	CLKSEL = 0x01;//Select external clock
	OSCICN = 0x00;//Close internal clock 			  
}					  



 /*
***********************************************************************************************************
**函数原型		:  	uart_init()
**参数说明		:  	
				:		
**返回值		:		
**说	明		:	本函数用于340的串口初始化
************************************************************************************************************/

void uart_init()
{
 	SCON0 = 0x10;	//Used for mode 1,8 bit asynchronous transfer and sending,9600 Baudrate	 
	EA = 1;
	ES0= 1;
	ET0 = 1; 
//	IP = 0x12;         
}	  
					

/*
***********************************************************************************************************
**函数原型		:  	Timer_Init()
**参数说明		:  	
				:		
**返回值		:		
**说	明		:	本函数用于340的定时器初始化
************************************************************************************************************/					
void Timer_Init()
{
	
/*	TMOD = 0x21;//T1 used for  baudrate(8位自动重载),T0 used for timing(16位)
    CKCON = 0x00;	//1/12 Frequency
    TH1 = 0xa0;  *///07-07-08
	
	TMR2CN = 0x01;//关T2
	if(baud_code >2)
		{ //07-07-09
		TMR2RLL = 0x94;
		TMR2RLH = 0x94;
	}
	else
		{			  //07-07-09
		TMR2RLL = 0x00;
		TMR2RLH = 0x00;
	}		
	ET2 = 1;	     
	uart_init();
	TR1 = 1;
	TR0 = 1;	
}

 /*							     
***********************************************************************************************************
**函数原型		:  	delay(uchar t)
**参数说明		:  	t	-->>	要延时的ms数
				:		
**返回值		:		
**说	明		:	本函数用于时间延时tms
************************************************************************************************************/
void delay(uchar t)
{//delay tms
	uint k1;
	uchar j,k2;
	for(j = 0;j < t;j++){
		for(k1 = 0;k1 < 100;k1++){
			for(k2 = 0;k2 < 12;k2++)_nop_();
		}
	}
}

 /*
***********************************************************************************************************
**函数原型		:  	Init_Device()
**参数说明		:  	
				:		
**返回值		:		
**说	明		:	本函数用于340的设备初始化
************************************************************************************************************/
void baudrate_select()
{//07-07-08
	TMOD = 0x21;//T1 used for baudrate(波特率只能由T1工作在8位自动重载方式产生),T0 used for timing(16位)
	switch(baud_code){
/*----------------------TH1 = 256 - 分频后频率 / 波特率 / 2----------------------*/
/*-----------------采用22.184频率只能达到1200~57600波特率------------------------*/
/*		case 0:{//baudrate = 300			
    			CKCON = 0x00;	//1/12 Frequency
   				TH1 = 0xa0;
			}
			break;
		case 1:{//baudrate = 600			
    			CKCON = 0x00;	//1/12 Frequency
   				TH1 = 0xa0;
			}
			break;	  */
		case 0:{//baudrate = 1200			
    			CKCON |= 0x02;	//1/48 Frequency
   				TH1 = 0x40;
			}
			break;
		case 1:{//baudrate = 2400			
    			CKCON |= 0x02;	//1/48 Frequency
   				TH1 = 0xa0;
			}
			break;
		case 2:{//baudrate = 4800			
    			CKCON |= 0x02;	//1/48 Frequency
   				TH1 = 0xd0;
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -