📄 nedu_sub_state.c
字号:
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
else if(Sub_Mode == TCH_K_5)
{
Delay(10000);
switch(number)
{
case 1:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_M;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_N;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_O;
OS_EXIT_CRITICAL();
break;
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
else if(Sub_Mode == TCH_K_6)
{
Delay(10000);
switch(number)
{
case 1:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_P;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_Q;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_R;
OS_EXIT_CRITICAL();
break;
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
else if(Sub_Mode == TCH_K_7)
{
Delay(10000);
switch(number)
{
case 1:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_S;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_T;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_U;
OS_EXIT_CRITICAL();
break;
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
else if(Sub_Mode == TCH_K_8)
{
Delay(10000);
switch(number)
{
case 1:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_V;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_W;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_X;
OS_EXIT_CRITICAL();
break;
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
else if(Sub_Mode == TCH_K_9)
{
Delay(10000);
switch(number)
{
case 1:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_Y;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_Z;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_DOT;
OS_EXIT_CRITICAL();
break;
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
else if(Sub_Mode == TCH_K_0)
{
Delay(10000);
switch(number)
{
case 1:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_COMA;
OS_EXIT_CRITICAL();
break;
case 2:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_EQU;
OS_EXIT_CRITICAL();
break;
case 3:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_AT;
OS_EXIT_CRITICAL();
break;
default:
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
break;
}
}
}
if(Sub_Mode <= 0x5a && Sub_Mode >= 0x2a) //读取数据
{
if(flag && Sub_Mode >= 0x41 && Sub_Mode <= 0x5a) //输入为字母
{
OS_ENTER_CRITICAL(); //关中断
Sub_Mode+=0x20; //切换为小写
OS_EXIT_CRITICAL();
}
if(line == 0) //第一行在输入
{
if(index < 19) // 如果name数组没有越界
rec.name[index++]=Sub_Mode;//往name数组里面存数据
}
else if(line == 1) //第2行在输入
{
if(index1 < 15 ) // 如果telnum数组没有越界
/****如果输入的是0-9的数字或者“-”,往telnum数组里面存数据****/
if ((Sub_Mode >=0x30 && Sub_Mode <=0x39)||Sub_Mode ==0x2d)
rec.telnum[index1++]=Sub_Mode;
}
else if(line == 2) //第3行在输入
{
if(index2 < 15) // 如果plmnum数组没有越界
if(Sub_Mode >=0x30 && Sub_Mode <=0x39) //往plmnum数组里面存数据,只能是数字
rec.plmnum[index2++]=Sub_Mode;
}
else if(line == 3) //第4行在输入
{
if(index3 < 24) // 如果mail数组没有越界
rec.mail[index3++]=Sub_Mode;//往mail数组里面存数据
}
}//end if
switch(Sub_Mode)
{
case TCH_K_Line1: //点击姓名输入栏
line=0; //将line置零
LCD_Clear(CLR_ALL);
LCD_loard_tig(PDA_SETREC);
break;
case TCH_K_Line2: //点击电话号码输入栏
line=1; //将line置1
LCD_Clear(CLR_ALL);
LCD_loard_tig(PDA_SETREC);
break;
case TCH_K_Line3: //点击手机号码输入栏
line=2; //将line置2
LCD_Clear(CLR_ALL);
LCD_loard_tig(PDA_SETREC);
break;
case TCH_K_Line4: //点击邮箱输入栏
line=3; //将line置3
LCD_Clear(CLR_ALL);
LCD_loard_tig(PDA_SETREC);
break;
case TCH_RETURN: //返回
line=0; //将line置零
return; //返回
case TCH_K_Esc: //返回上一级操作界面, 返回之前将用户输入的记录清空
line=0; //将line置零
return; //返回
case TCH_K_Del: //往前删除一个字符
if(line == 0)
{
if(index > 0)
{
rec.name[--index]=0x0; //在当前行往前删除一个字符
}
}
else if(line == 1)
{
if(index1 > 0)
{
rec.telnum[--index1]=0x0; //在当前行往前删除一个字符
}
}
else if(line==2)
{
if(index2 > 0)
rec.plmnum[--index2]=0x0; //在当前行往前删除一个字符
}
else if(line==3)
{
if(index3 > 0)
rec.mail[--index3]=0x0; //在当前行往前删除一个字符
}
LCD_Clear(CLR_ALL); //清除屏幕
LCD_loard_tig(PDA_SETREC); //初始化所有显示缓冲区
break;
case TCH_K_ENTER: // ENTER 键事件处理
if(rec.name[0]==0x0 )
{
line=0; // 姓名为空,跳到第一行,继续输入
}
else if(rec.telnum[0]==0x0 )
{
line=1; // 电话号码为空,跳到第2行,继续输入
}
else if(rec.plmnum[0]==0x0)
{
line=2; // 手机号码为空,跳到第3行,继续输入
}
else if(rec.mail[0]==0x0)
{
line=3; // 邮箱为空,跳到第4行,继续输入
}
else if(rec.name[0]!=0x0 && rec.telnum[0]!=0x0 && rec.plmnum[0]!=0x0 && rec.mail[0]!=0x0) //姓名,电话号码,手机号码,邮箱都不为空
{
InsertALine(file,filename,rec); //调用插入方法,将用户输入的记录数据插入文件
line=0; // 然后将line置零
return; //返回
}
LCD_Clear(CLR_ALL);
LCD_loard_tig(PDA_SETREC);
break;
case TCH_K_Sft: // Sft键事件处理,/按Sft键转换字母的大小写
flag = !flag; //改变标志值
break;
}//end switch
OS_ENTER_CRITICAL(); //关中断
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL(); //开中断
OSTimeDly(1); //延时
}//end while
return;
}
/*
**********************************************************************************************************************
* DIS_MIAN
*
* 作者:朱成果
*
* 时间:2006年5月15日
*
* 描述:显示主菜单。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void dis_main(void)
{
LCD_Clear(CLR_ALL);
LCD_loard_tig(PDA_VERSION);
LCD_loard_tig(PDA_MAINPAGE);
return;
}
/*
**********************************************************************************************************************
* DIS_TIME
*
* 作者:朱成果
*
* 时间:2006年6月5日
*
* 描述:显示系统时间。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void dis_time(void)
{
int i;
OS_CPU_SR cpu_sr;
U32 bcolour=0xDB; //显示背景色
U32 fcolour=0x00; //显示前景色
U32 t_offset=0x5a0; //条目间距
U32* pList_t; //显示指针
LCD_Clear(CLR_ALL); //显示背景
LCD_loard_tig(PDA_SYSTIME);
LCD_loard_tig(PDA_VERSION);
LCD_loard_tig(BT_RETURN);
for(;;)
{
Rtc_Read();
pList_t =(U32*)0xc005588;
BCDU32toAsc(HexToInt((U32)RTC_data.year));
(void)LCD_Prints(intstr,fcolour,pList_t,bcolour);
BCDU8toAsc(HexToInt((U8)RTC_data.month));
pList_t += t_offset;
(void)LCD_Prints(intstr,fcolour,pList_t,bcolour);
BCDU8toAsc(HexToInt(RTC_data.day));
pList_t += t_offset;
(void)LCD_Prints(intstr,fcolour,pList_t,bcolour);
BCDU8toAsc(HexToInt(RTC_data.hour));
pList_t += t_offset;
(void)LCD_Prints(intstr,fcolour,pList_t,bcolour);
BCDU8toAsc(HexToInt(RTC_data.min));
pList_t += t_offset;
(void)LCD_Prints(intstr,fcolour,pList_t,bcolour);
BCDU8toAsc(HexToInt(RTC_data.sec));
pList_t += t_offset;
(void)LCD_Prints(intstr,fcolour,pList_t,bcolour);
for(i=0;i<200;i++)
{
if(Sub_Mode == TCH_RETURN || Sub_Mode == TCH_K_ENTER)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
return;
}
OSTimeDly(5);
}
}//end for
return;
}
/*
**********************************************************************************************************************
* SUB_DIS_DATE
*
* 作者:胡仲华 曹攀
*
* 时间:2007年7月3日
*
* 描述:日历打印程序。即显示指定年月的日历到LCD上。
*
* 参数:U32 year :指定的年份。
* U32 month :指定的月份。
*
* 返回值:无
*
***********************************************************************************************************************
*/
void sub_dis_date(U32 year,U8 month,U8 data)
{
U32 bcolour=0xff; //背景色
U32 fcolour=0x00; //前景色
U32 d_offset=0x5a0; //日显示时向下偏移量
U32 r_offset=6; //日显示时向右偏移量
U32* pList_d=(U32*)0xc00a028; //日显示指针
U32* pList_m=(U32*)0xc005bd0; //月显示指针
U32* pList_y=(U32*)0xc005b78; //年显示指针
U8 i=1;
int j;
int week; //本月首天的星期
U8 days; //本月天数
BCDU32toAsc(year);
(void)LCD_Prints(intstr,fcolour,pList_y,bcolour); //向LCD上输出年份
BCDU8toAsc(month);
(void)LCD_Prints(intstr,fcolour,pList_m,bcolour); //向LCD上输出月份
getDate(year,month,&week,&days);
if(data > days)
data = days;
for(j=0;j<6;j++) //清空日期显示部分
{
(void)LCD_Prints(" ",fcolour,pList_d,bcolour);
pList_d+=d_offset;
}
/*向LCD上输出日历*/
pList_d = r_offset*week+(U32*)0xc00a028;
/***输出日历第一行***/
for(j = week;j<7;j++)
{
if(i == data)
{
fcolour=0xff;
bcolour=0x33;
}
BCDU8toAsc(i);
(void)LCD_Prints(intstr,fcolour,pList_d,bcolour);
i++;
pList_d += r_offset;
fcolour=0x00;
bcolour=0xff;
}
/***输出日历其余行***/
do
{
pList_d -= 42;
pList_d += d_offset;
for(j = 0;j < 7;j++)
{
if(i <= days)
{
if(i == data)
{
fcolour=0xff;
bcolour=0x33;
}
BCDU8toAsc(i);
(void)LCD_Prints(intstr,fcolour,pList_d,bcolour);
i++;
pList_d += r_offset;
fcolour=0x00;
bcolour=0xff;
}
}
}while(i <= days);
}
/*
**********************************************************************************************************************
* DIS_DATE
*
* 作者:胡仲华 曹攀
*
* 时间:2007年7月3日
*
* 描述:显示系统日历。按"上一月","下一月","返回"进行对应的操作。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void dis_date(void)
{
OS_CPU_SR cpu_sr;
U32 year; //要显示日历的年份
U8 month; //要显示日历的月份
U8 data; //要显示日历的日期
LCD_Clear(CLR_ALL); //显示背景
LCD_loard_tig(PDA_VERSION);
LCD_loard_tig(PDA_SYSDATE);
/****向LCD上输出当前年月的日历****/
year=(U32)RTC_data.year;
month=(U8)RTC_data.month;
data=(U8)RTC_data.day;
year=HexToInt(year);
month=HexToInt(month);
data=HexToInt(data);
sub_dis_date(year,month,data);
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
while(1)
{
if(Sub_Mode == TCH_RETURN||Sub_Mode == TCH_K_ENTER) //如果当前子状态为TCH_RETURN,则返回主菜单。
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
return;
}
if(Sub_Mode == TCH_PREV || Sub_Mode == TCH_K_9) //如果当前子状态为TCH_PREV,则在LCD上显示上个月的日历。
{
month--;
//month小于等于0,则显示上一年12月
if(month<1)
{
year--;
month=12;
}
//日历显示上边界为1999.1
if(year == 1998)
{
year = 1999;
month = 1;
}
sub_dis_date(year,month,data);
}
else if(Sub_Mode == TCH_NEXT || Sub_Mode == TCH_K_3) //如果当前子状态为TCH_NEXT,则在LCD上显示下个月的日历。
{
month++;
//month大于等于12,则显示下一年1月
if(month>12)
{
year++;
month=1;
}
//日历显示下边界为2098.12
if(year == 2099)
{
year = 2098;
month = 12;
}
sub_dis_date(year,month,data);
}
OS_ENTER_CRITICAL();
Sub_Mode = TCH_INVALIDE;
OS_EXIT_CRITICAL();
OSTimeDly(200);
}//end while
}
//the end of sub_state module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -