📄 interface.c
字号:
//**************************************************************************************************************************
#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 + -