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

📄 interface.c

📁 基于c8051f020的应用
💻 C
📖 第 1 页 / 共 2 页
字号:
//**************************************************************************************************************************
#include <c8051F020.h>
#include <stdio.h>
#include <setjmp.h>
#include <string.h>
#include "HEAD.H"
//**************************************************************************************************************************
jmp_buf ReturnToJSJM;
//**************************************************************************************************************************
void Sys_Function(void)
{
	xdata unsigned char SubFuncKey=0x00;	

	while(1)
	{	
		LCD_CLEAR();
		//LCD_DispStr("U:Start Test.",8,5);
		disp_chn_str("↑丰开始测试",2,10,12,1);
		//LCD_DispStr("D:Date Index.",16,5);
		disp_chn_str("↓丰数据检索",14,10,12,1);
		//LCD_DispStr("L:Clear Al:l Date.",24,5);
		disp_chn_str("←丰清除所有数据",26,10,12,1);
		//LCD_DispStr("R:System Set.",32,5);
		disp_chn_str("→丰设置参数",38,10,12,1);
		//LCD_DispStr("E:Return.",48,5);
		//disp_chn_str("确定 返回",50,15,12,1);
		Display_Data();
	
		while(!(SubFuncKey=get_key(1)));

		switch(SubFuncKey)
		{
			case UP_ARROW_KEY:
			{
				Date_Test();
				break;
			}
			case DOWN_ARROW_KEY:
			{
				Date_Index();
				break;
			}
			case LEFT_ARROW_KEY:
			{
				Clear_ALL_Date();
				break;
			}
			case RIGHT_ARROW_KEY:
			{
				Sys_Setup();
				break;
			}
			case RETURN_KEY:
			{
				LCD_CLEAR();
				return;
			}
			default:break;
		}
		SubFuncKey=0x00;
	}
}
//**************************************************************************************************************************
void Date_Test(void)
{
	xdata unsigned int  i;

	LCD_CLEAR();
	WorkStation=0xBB;
	HollDataNum=0x00;
	HollSigNum=0x00;
	TH2=0;TL2=0;
	DS1302_Read();
	//LCD_DispStr("Station:Testing",16,5);
	disp_chn_str("数据测试中",14,10,12,1);

	disp_chn_str("转数",50,10,12,1);
	disp_chn_str("时间",38,10,12,1);
	while(WorkStation==0xBB)
	{
		if(Timer3%TimeFre==0x00)
		{
			sprintf(Str_Buffer,":%05.0fc",(float)HollSigNum);
			LCD_DispStr(Str_Buffer,52,34);
			//LCD_SHOW_WellSaveStation();
			sprintf(Str_Buffer,":%3.0f/%3.0fs",(float)(HollDataNum*TestTime/40),(float)(HollDateLong*TestTime/40));
			LCD_DispStr(Str_Buffer,40,34);
			Display_Data();
		}
	}
	//LCD_DispStr("Station:Saving ",16,5);
	disp_chn_str("数据保存中",14,10,12,1);
	// 确保显示数据正确
	sprintf(Str_Buffer,":%05.0fc",(float)HollSigNum);
	LCD_DispStr(Str_Buffer,52,34);
	// 保存标志
	Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong,0xA5);
	Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong+1,0x5A);
	// 保存数据长度
	Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong+2,HollDataNum*TestTime>>8);
	Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong+3,HollDataNum*TestTime);
	// 保存日期
	for(i=0;i<9;i++)
	{
		Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong+4+i,Clock_Date_Str[i]);
	}
	// 保存时间
	for(i=0;i<9;i++)
	{
		Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong+13+i,Clock_Time_Str[i]);
	}
	// 保存井号
	Write_Eeprom(0x400*NowSaveWellAddr+HollDateLong+22,NowWellName);
	// 保存数据
	Write_Well_date(0x400*NowSaveWellAddr,HollDate,HollDateLong);
	/*
	for(i=0;i<HollDateLong;i++)
	{
		Write_Eeprom(0x400*NowSaveWellAddr+i,HollDate[i]);
		if(i%10==0x00)
		{
			sprintf(Str_Buffer,"Rate:%3.0f/100",(float)((float)i*100/HollDateLong));
			LCD_DispStr(Str_Buffer,32,5);
			Display_Data();
		}
	}
	*/
	Well_Show(NowSaveWellAddr);
	while(!(get_key(1)));
	EEPROM_Init();

}
//**************************************************************************************************************************
void Date_Index(void)
{
	xdata unsigned char SubFK=0x00;
	xdata unsigned int  i,j;
	xdata unsigned int  cursor_line;					// 显示时的当前行在当前页中的位置
	xdata unsigned int  NowFirstAddr;					// 显示时的第一行在所有有效井中的位置
 
	setjmp (ReturnToJSJM) ;					// 主界面设置点

	LCD_CLEAR();
	// 取得有效数据量,并记录位置
	NowWellNum=0x00;
	for(i=0;i<MaxWellSaveNum;i++)
	{
		if( (Read_Eeprom(0x400*i+HollDateLong)==0xA5) && (Read_Eeprom(0x400*i+HollDateLong+1)==0x5A) )
		{
			// 读取日期
			for(j=0;j<9;j++)
			{
				well_index[NowWellNum].BeginDate[j]=Read_Eeprom(0x400*i+HollDateLong+4+j);
			}
			well_index[NowWellNum].BeginDate[8]=0x00;
			// 读取时间
			for(j=0;j<9;j++)
			{
				well_index[NowWellNum].BeginTime[j]=Read_Eeprom(0x400*i+HollDateLong+13+j);
			}
			well_index[NowWellNum].BeginTime[8]=0x00;
			// 读井号
			well_index[NowWellNum].Num=Read_Eeprom(0x400*i+HollDateLong+22);

			WellSaveStation[i]=0xAA;
			UsedWell[NowWellNum]=i;
			NowWellNum++;
		}

	}
	// 空数据
	if(!NowWellNum)
	{	
		LCD_CLEAR();
	    //LCD_DispStr("No Date.",32,5);
		disp_chn_str("无数据",14,10,12,1);
		//LCD_DispStr("E:Return.",48,5);
		disp_chn_str("任意键返回",50,10,12,1);
		Display_Data();
		while(!get_key(1));
		return;
	}
	// 井名检索
	cursor_line = 0 ;
	NowFirstAddr= 0 ;

	while(1)
	{
		LCD_CLEAR();
		sprintf(Str_Buffer,"Now:%02.0f",(float)(NowFirstAddr+cursor_line+1));
		LCD_DispStr(Str_Buffer,56,8) ;
		sprintf(Str_Buffer,"ALL:%02.0f",(float)NowWellNum);
		LCD_DispStr(Str_Buffer,56,50) ;

		if(NowWellNum>=DISPLAY_LINE_NUM)
			for(i=0;i<DISPLAY_LINE_NUM;i++)
			{
				sprintf(Str_Buffer,"%03.0f",(float)well_index[NowFirstAddr+i].Num);
				LCD_DispStr(Str_Buffer,i*8,8);
				strcpy(Str_Buffer,well_index[NowFirstAddr+i].BeginDate);
			    LCD_DispStr(Str_Buffer,i*8,29);
				strcpy(Str_Buffer,well_index[NowFirstAddr+i].BeginTime);
			    LCD_DispStr(Str_Buffer,i*8,80);
			}
		else
			for(i=0;i<NowWellNum;i++)
			{
				sprintf(Str_Buffer,"%03.0f",(float)well_index[NowFirstAddr+i].Num);
				LCD_DispStr(Str_Buffer,i*8,8);
				strcpy(Str_Buffer,well_index[NowFirstAddr+i].BeginDate);
			    LCD_DispStr(Str_Buffer,i*8,29);
				strcpy(Str_Buffer,well_index[NowFirstAddr+i].BeginTime);
			    LCD_DispStr(Str_Buffer,i*8,80);
			}
		LCD_DispStr("=",cursor_line*8,2);
		Display_Data();

		while(!(SubFK = get_key(1)));
		switch(SubFK)
		{ 
 		    case UP_ARROW_KEY:
			{
				LCD_DispStr(" ",cursor_line*8,2) ;
				if(cursor_line != 0x00)
				{
					cursor_line--;
				}
				else 
				{
					if(NowFirstAddr > 0x00)
					{
						NowFirstAddr--;
					}
				}
				SubFK=0x00;
		   		break ;
			}
		   	case DOWN_ARROW_KEY:
			{
				LCD_DispStr(" ",cursor_line*8,2) ;
				if(cursor_line != DISPLAY_LINE_NUM-1 && (NowFirstAddr+cursor_line+1) < NowWellNum)
				{
					cursor_line++;
				}
				else
				{
					if(NowFirstAddr < (NowWellNum-DISPLAY_LINE_NUM) && (NowFirstAddr+cursor_line+1) < NowWellNum)
					{
						NowFirstAddr++;
					}
				}
				SubFK=0x00;
	 	   		break ;
			}
		   	case RETURN_KEY:
			{
				/*
				if(NowWellNum >= DISPLAY_LINE_NUM)
				{
					if(NowFirstAddr >= DISPLAY_LINE_NUM)
					{
						NowFirstAddr -= DISPLAY_LINE_NUM;
					}
					else
					{
						if(NowFirstAddr != 0)
							NowFirstAddr=0;
						else
							cursor_line = 0;
					}
				}
				else
				{
					NowFirstAddr = 0;
					cursor_line = 0;
				}
				*/
				SubFK=0x00;
		   		return ;
			}
		   	case LEFT_ARROW_KEY :
			{
				SubFK=0x00;
				LCD_DispStr("Del?",56,98);Display_Data();
				while(!(SubFK = get_key(1)));
				if(SubFK==RETURN_KEY)
				{
					i=UsedWell[NowFirstAddr+cursor_line];
					Write_Eeprom(0x400*i+HollDateLong+0,0xFF);
					Write_Eeprom(0x400*i+HollDateLong+1,0xFF);
					longjmp(ReturnToJSJM,0);
				}
				else if(SubFK==LEFT_ARROW_KEY)
					;
				/*
				if(NowWellNum >= DISPLAY_LINE_NUM)
				{
					if(NowFirstAddr + 2*DISPLAY_LINE_NUM <= NowWellNum)// && (NowFirstAddr+cursor_line + 1 + DISPLAY_LINE_NUM) <= NowWellNum)
					{
						NowFirstAddr += DISPLAY_LINE_NUM;
					}
					else
					{
						if(NowFirstAddr != NowWellNum - DISPLAY_LINE_NUM)
							NowFirstAddr = NowWellNum - DISPLAY_LINE_NUM;
						else
							cursor_line = DISPLAY_LINE_NUM-1;
					}
				}
				else
				{
					NowFirstAddr = 0 ;
					cursor_line = NowWellNum - 1;
				}
				*/

				//SubFK=0x00;
				break ;
			}
			case RIGHT_ARROW_KEY:
			{
				Well_Show(UsedWell[NowFirstAddr+cursor_line]);
				SubFK=0x00;
				while(!get_key(1));
   				break ;
			}
			default :break ;
  		 }
	}
}
//**************************************************************************************************************************
void Sys_Setup(void)
{
	xdata unsigned char SubFK=0x00;

	while(1)
	{
		LCD_CLEAR();
		//LCD_DispStr("U:Set Time.",8,5);
		disp_chn_str("↑丰设置时间",2,10,12,1);
		//LCD_DispStr("D:Set Well Num.",16,5);
		disp_chn_str("↓丰设置井号",14,10,12,1);
		//LCD_DispStr("L:Set test time.",24,5);
		disp_chn_str("←丰设置测试时间",26,10,12,1);
		//LCD_DispStr("R:Force ReNew Date.",32,5);
		disp_chn_str("→丰恢复所有数据",38,10,12,1);
		//LCD_DispStr("E:Return.",48,5);
		//disp_chn_str("确定  返回",50,15,12,1);
		Display_Data();
		while(!(SubFK=get_key(1)));
		switch(SubFK)
		{
			case UP_ARROW_KEY:
			{	
				Input_Time();
				break;
			}
			case DOWN_ARROW_KEY:
			{
				Input_WellNameNum();
				break;
			}
			case LEFT_ARROW_KEY:
			{
				Set_Test_Time();
				break;
			}
			case RIGHT_ARROW_KEY:
			{
				ReNew_All_Date();
				break;
			}
			case RETURN_KEY:
			{
				return ;
			}
			default:break;
			SubFK=0x00;
		}
	}

}
//**************************************************************************************************************************
void Input_Time(void)
{
 	xdata unsigned char SubSubFK=0x00,cur_x,cur_y ;
 	xdata unsigned char key_num;										// 输入位置(光标)
 	xdata unsigned char input_key[6];								// 输入数据存储

   	LCD_CLEAR();
	//LCD_DispStr("Please input time.",4,5);
	disp_chn_str("请输入时间",14,10,12,1);
	//LCD_DispStr("E:OK + Return.",48,5);
	//disp_chn_str("确定  返回",50,15,12,1);
	DS1302_Read();
	LCD_SHOW_TIME();
	Display_Data();

⌨️ 快捷键说明

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