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

📄 setframe.c

📁 液晶程序液晶程序液晶程序液晶程序液晶程序液晶程序
💻 C
字号:
#include<reg52.h>
//宏定义
#define   KEY_ENTER      0x01
#define   KEY_MOVE       0x02
#define   KEY_DOWN       0x03
#define   KEY_UP         0x04
#define   KEY_SET        0x05
#define   KEY_ESC        0x06

//存储在ROM中的各个地址基本,设置存入第二页中,0020-003f
#define PAGE2_BASE_ADD			0x0020//本页基本地址
#define VVALUE_STORE_ADD		0x0020//电压等级地址 10  
#define CTVALUE_STORE_ADD		0x0021//CT变比地址 400
#define PTVALUE_STORE_ADD		0x0023//PT变比地址 100
#define TSCNUM_STORE_ADD		0x0024//TSC组数地址 5
//#define HVCPERMIT_STORE_ADD		0x0025//HVC允许地址 0
#define HVCNUM_STORE_ADD		0x0026//HVC组数地址 3
#define RUNMOD_STORE_ADD		0x0027//运行模式地址 0
#define TTHRESH_STORE_ADD	0x0028//投入门限地址 75/实际为0.75
#define QTHRESH_STORE_ADD	0x0029//切除门限地址 99/实际为0.99
#define TCOEFFI_STORE_ADD	0x002a//投入系数地址 110/实际为1.10

//----------------------------------------------------

//******************************************************
typedef unsigned char uchar;
typedef unsigned int  uint;
//-----------------------------------------------------------------------------------------------------
//外部函数声明
extern void display3list(unsigned int *STRTABLE[]);//显示一屏的4行,通过改变全局变量fbchar,i有不同的显示效果,并改变全局变量selenum,
extern void key_up_move(unsigned int *STRTAB[]);//按上移键,反白上移,若为第一条则不动,输入:字符串地址列表*STRTAB[]
extern void key_down_move(unsigned int *STRTAB[],unsigned char num);//按下移键,反白下移,若为最后一条则不动?/输入:字符串地址列表数组*STRTAB[],选项总数num,void getfigurebit(unsigned int para);  
extern void init_frame(unsigned int *STRTAB[]);//写初始页面
extern void clearscreen();
extern void getfigurebit(unsigned int para);//得到各个位,最高bit4,bit3,bit2,bit1;
extern void putchar(unsigned int singlecharnum);
extern void putstr(unsigned int *STR);
//void set_time();

void send_single8(unsigned char para_ID,unsigned char para8);
void send_single16(unsigned char para_ID,unsigned int para16);
void dsp_ans(unsigned char check_ID);
void message_show();
//void can_common();
void delay20ms();

extern void bytewrite_chip1(uint wbyteadd,uchar wbytedata);
extern uchar byteread_chip1(uint rbyteadd);
extern void wordwrite_chip1(uint wwordadd,uint wworddata);
extern uint wordread_chip1(uint rwordadd);
//----------------------------------------------------------------------------------------------
//外部变量声明
extern uchar xdata KEY_BUF;
extern uchar xdata selenum;//选择的字符串号,16位
extern uchar xdata i;   //第二行显示的字符串号
extern uchar xdata fbchar;  //fbchar为反白字节,4时第一行反白,2时第二行反白,1时最后一行反白
extern uchar xdata TOTALNUM;
extern uchar xdata XPOS;//XPOS为0~7
extern uchar xdata YPOS;//YPOS为0~127
extern bit FB_FLAG;
extern unsigned int xdata bit1,bit2,bit3,bit4;
//--------------------------------------------------------------------------------

//外部变量定义
unsigned int xdata VVALUE,CTVALUE,PTVALUE,TSCNUM,HVCNUM,RUNMOD,TTHRESH,QTHRESH,TCOEFFI;
//unsigned int data SLOPETIME,STARTTORQUE,DUDELAY,STOPTIME,ID;//各全局变量

unsigned int xdata basevar[11];//变量表,记录各全局变量
unsigned int xdata var,max;

bit fbbit1,fbbit2,fbbit3;
unsigned char xdata fbbitchar; 
unsigned char xdata selebit;//设数时的各反白标志
unsigned char xdata Flag_unit;//有无单位标志
  
unsigned char remi;//记录第一行是哪个选项的变量                         
extern bit DSP_REV_FLAG;//DSP是否接受数据标志位,0接受,1 没有接受
unsigned char xdata SENDDATABUF[10];//发送缓冲器,存放包括两个字节ID在内的10个字节,放在XDATA
unsigned char xdata REVDATABUF[10];//接受缓冲器,存放包括两个字节ID在内的10个字节,放在XDATA

//数组定义
//-------------------------------------------
unsigned char code basic_para_ID[7]={0xff,0x02,0x03,0x04,0x05,0x06,0x07};//参数ID
//----------------------------------
//unsigned int code unit[7]={0x0017,0x003b,0x0036,0x002A,0x0030,0x0030,0x000a};//单位表{'','KV','A','?','?','?','?',}
unsigned int code maxvar[7]={0,600,30,90,100,120,99};//变量最值表

//字符串定义
unsigned int code STR0bsettitle[] = {0x8022,0x8023,0x8024,0x8025,0x00ff};//基本设置
unsigned int code STR1_voltrank[] = {0x0001,0x800F,0x8033,0x8034,0x8035,0x0017,0x00ff};//1电压等级
unsigned int code STR2_CTratio[]  = {0x0002,0x0017,0x0038,0x0044,0x0017,0x804A,0x804B,0x0017,0x00ff};//2CT变比
unsigned int code STR3_PTratio[]  = {0x0003,0x0017,0x003E,0x0044,0x0017,0x804A,0x804B,0x0017,0x00ff};//3PT变比
unsigned int code STR4_TSCnum[]   = {0x0004,0x0017,0x0044,0x0042,0x0038,0x804C,0x801F,0x0017,0x00ff};//4TSC组数
//unsigned int code STR5_stoptime[] = {0x0005,0x0017,0x0039,0x0046,0x0038,0x804D,0x804E,0x0017,0x00ff};//5HVC允许
unsigned int code STR5_HVCnum[]   = {0x0005,0x0017,0x0039,0x0046,0x0038,0x804C,0x801F,0x0017,0x00ff};//6HVC组数
unsigned int code STR6_runmod[]   = {0x0006,0x804F,0x8050,0x8051,0x8052,0x0017,0x00ff};//7运行方式
unsigned int code STR7_TOUthreshold[] = {0x0007,0x8053,0x8054,0x8055,0x8056,0x0017,0x00ff};//8投入门限
unsigned int code STR8_QIEthreshold[] = {0x0008,0x8057,0x8058,0x8055,0x8056,0x0017,0x00ff};//9切除门限
unsigned int code STR9_coefficient[] = {0x0009,0x8053,0x8054,0x8022,0x801F,0x00ff};//10投入系数
unsigned int * code BSETSTRTABLE[] = {STR0bsettitle,STR1_voltrank,STR2_CTratio,STR3_PTratio,STR4_TSCnum,STR5_HVCnum,STR6_runmod,STR7_TOUthreshold,STR8_QIEthreshold,STR9_coefficient};

unsigned int code UNIT0_Volt[] = {0x003b,0x0047,0x00ff};//Kv
unsigned int code UNIT3_Group[] = {0x804c,0x00ff};//组
unsigned int code UNIT4_Group[] = {0x804c,0x00ff};//组

//unsigned int code UNIT2_ActiveP[] = {0x003b,0x0049,0x00ff};//Kw
//unsigned int code UNIT3_Reactive[] = {0x003b,0x0047,0x005d,0x0041,0x00ff};//Kvar
//unsigned int code UNIT4_Frequency[] = {0x0039,0x0060,0x00ff};//Hz
//unsigned int code UNIT5_PQuant[] = {0x003b,0x0049,0x0061,0x00ff};//Kwh
//unsigned int code UNIT8_Second[] = {0x0043,0x00ff};//s
//unsigned int code UNIT9_MSecond[] = {0x003c,0x0043,0x00ff};//ms
unsigned int * code UNITTABLE[] = {UNIT0_Volt,UNIT0_Volt,UNIT0_Volt,UNIT0_Volt,UNIT3_Group,UNIT4_Group};
//-----------------------------------------------------------------------------------------

//写000型数据
void write3dfig()
{
	if(fbbitchar==1)
	{
		selebit=1;
		fbbit1=1;
		fbbit2=0;
		fbbit3=0;
	}     
	else if(fbbitchar==2)
	{
		selebit=2;
		fbbit1=0;
		fbbit2=1;
		fbbit3=0;
	}    
	else if(fbbitchar==4)
	{
		selebit=3;
		fbbit1=0;
		fbbit2=0;
		fbbit3=1;
	}
	XPOS=4;
	YPOS=56;
	FB_FLAG=fbbit3;
	putchar(bit3);//写百位
	YPOS=64;
	FB_FLAG=fbbit2;
	putchar(bit2);//写十位
	YPOS=72;
	FB_FLAG=fbbit1;
	putchar(bit1);
}//写个位
//---------------------------------------------------------------------- 

//写入00.0型数据
void write2d1fig()
{
	if(fbbitchar==1)
	{
		selebit=1;
		fbbit1=1;
		fbbit2=0;
		fbbit3=0;
	}
	else if(fbbitchar==2)
	{
		selebit=2;
		fbbit1=0;
		fbbit2=1;
		fbbit3=0;
	}
	else if(fbbitchar==4)
	{
		selebit=3;
		fbbit1=0;
		fbbit2=0;
		fbbit3=1;
	}
	XPOS=4;
	YPOS=48;
	FB_FLAG=fbbit3;
	putchar(bit3);//写十位
	YPOS=56;
	FB_FLAG=fbbit2;
	putchar(bit2);//写个位
	YPOS=64;
	FB_FLAG=0;
	putchar(0x0028);//写小数点
	YPOS=72;
	FB_FLAG=fbbit1;
	putchar(bit1);
}//写小数位
//---------------------------------------------------------------------- 

//写标题和单位
void setwritestr()
{
	XPOS=0;
	YPOS=0;
	FB_FLAG=0;
	putstr(BSETSTRTABLE[selenum]); //写标题
	XPOS=4;
	YPOS=80;
	if(Flag_unit == 1)//有单位 则写单位
	{
		putstr(UNITTABLE[selenum]);//写单位
		Flag_unit = 0;
	}
}
//------------------------------------------------------------------

//从变量var得到各位数,写数
void bsetwritefig()
{
	if(var>max)
		var=max;
	if(selenum==0x04)
	{
		getfigurebit(var);
		write2d1fig();
	}//堵转延迟写的是小数,其他写的是3位整数
	else
	{
		getfigurebit(var);
		write3dfig();
	}
} 
//--------------------------------------------------------------

void key_fig_up()//按向上键,各位数加1 ,加到9时,恢复为0,加数及时更新变量写数,最大值为max
{
	if(selebit==1)  
	{
		if(bit1==9)
			bit1=0;
		else
			bit1++;
	}
	else if(selebit==2)    
	{
		if(bit2==9)
			bit2=0;
		else
			bit2++;
	}
	else if(selebit==3)  
	{
		if(bit3==9)
			bit3=0;
		else
			bit3++;
	}
	var=bit3*100+bit2*10+bit1;  //及时更新数据
}
//-------------------------------------------------------------------

void key_fig_down()//按向下键,各位数减1,减到0时循环到9
{
	if(selebit==1)  
	{
		if(bit1==0)
			bit1=9;
		else
			bit1--;
	}
	else if(selebit==2)  
	{
		if(bit2==0)
			bit2=9;
		else
			bit2--;
	}
	else if(selebit==3) 
	{
		if(bit3==0)
			bit3=9;
		else
			bit3--;
	}
	var=bit3*100+bit2*10+bit1;//及时更新数据
}//写数

//--------------------------------------------------------------------------
void set_key_move()//修改数时反白向左移移到0100时,恢复为0001,重写一遍数据
{
	if(fbbitchar==4)
		fbbitchar=1;
	else
		fbbitchar<<=1;
}
//----------------------------------------------------------------------------------

//基本设数函数
void bset_key_set()
{
	clearscreen();

	basevar[1] = VVALUE;
	basevar[2] = CTVALUE;
	basevar[3] = PTVALUE;
	basevar[4] = TSCNUM;
	basevar[5] = HVCNUM;
	basevar[6] = RUNMOD;
	basevar[7] = TTHRESH;
	basevar[8] = QTHRESH;
	basevar[9] = TCOEFFI;
	
	if(selenum<10)   //选中前六项,执行下面的函数
	{
		fbbitchar=1;
		var=basevar[selenum];
		max=maxvar[selenum];
		if(selenum == 1 || selenum == 4 || selenum == 5)
			Flag_unit = 1;//有单位
		else 
			Flag_unit = 0;//无单位
		setwritestr();
		bsetwritefig();
		while(KEY_BUF != KEY_ESC&&KEY_BUF != KEY_ENTER)
		{
			if(KEY_BUF == KEY_MOVE)
			{
				set_key_move();
				bsetwritefig();
				KEY_BUF=0xff;
			} 
			else if(KEY_BUF == KEY_UP)
			{
				key_fig_up();
				bsetwritefig();
				KEY_BUF=0xff;
			}
			else if(KEY_BUF == KEY_DOWN)
			{
				key_fig_down();
				bsetwritefig();
				KEY_BUF=0xff;
			} 
		}
		if(KEY_BUF == KEY_ENTER) //按enter键更新各全局变量
		{
		//	if(selenum==1)
		//		send_single16(basic_para_ID[1],var); 
		//	else
		//		send_single8(basic_para_ID[selenum],(uchar)var);//发送数据
		//	delay20ms();
		//	dsp_ans(basic_para_ID[selenum]);
		//	if(DSP_REV_FLAG==0)//该页面的数据处理,将设定的参数存入相应的的地址
		//	{
				if(selenum==1)
					wordwrite_chip1(VVALUE_STORE_ADD,var);//选择的是限流(16)
				else
					bytewrite_chip1((PAGE2_BASE_ADD+selenum),(uchar)var);
				basevar[selenum] = var;

				VVALUE = basevar[1];  //及时更新各个全局变量                   
				CTVALUE = (uchar)basevar[2];
				PTVALUE = (uchar)basevar[3];
				TSCNUM = (uchar)basevar[4];
				HVCNUM = (uchar)basevar[5];
				RUNMOD = (uchar)basevar[6];
				TTHRESH = (uchar)basevar[7];
				QTHRESH = (uchar)basevar[8];
				TCOEFFI = (uchar)basevar[9];
		//	} 
		} 
	} 
//	else if(selenum==7)
//	set_time();
}
//-----------------------------------------------------------------------

void main_bset()
{
	TOTALNUM = 9;//共有10项
	clearscreen();//清屏
	init_frame(BSETSTRTABLE);//写初始页面
	
	VVALUE = byteread_chip1(VVALUE_STORE_ADD);//从ROM中读出相应数据
	CTVALUE = wordread_chip1(CTVALUE_STORE_ADD);
	PTVALUE = byteread_chip1(PTVALUE_STORE_ADD);
	TSCNUM = byteread_chip1(TSCNUM_STORE_ADD);
	HVCNUM = byteread_chip1(HVCNUM_STORE_ADD);
	RUNMOD = byteread_chip1(RUNMOD_STORE_ADD);
	TTHRESH = byteread_chip1(TTHRESH_STORE_ADD);
	QTHRESH = byteread_chip1(QTHRESH_STORE_ADD);
	TCOEFFI = byteread_chip1(TCOEFFI_STORE_ADD);

	basevar[1] = VVALUE;
	basevar[2] = CTVALUE;
	basevar[3] = PTVALUE;
	basevar[4] = TSCNUM;
	basevar[5] = HVCNUM;
	basevar[6] = RUNMOD;
	basevar[7] = TTHRESH;
	basevar[8] = QTHRESH;
	basevar[9] = TCOEFFI;

	while(KEY_BUF!=KEY_ESC)
	{
		if(KEY_BUF==KEY_UP)
			key_up_move(BSETSTRTABLE);//上移选项
		else if(KEY_BUF==KEY_DOWN)
			key_down_move(BSETSTRTABLE,TOTALNUM);//下移选项
		else if(KEY_BUF==KEY_SET)  
		{
			remi=i;
			bset_key_set(); 
//			can_common();
			KEY_BUF=0xff;
			i=remi;
			
			clearscreen();
			display3list(BSETSTRTABLE);//回到上一页面
		}  
	}
}//设置后按KEY

⌨️ 快捷键说明

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