因为这是我从一个大的工程项目里摘出来的的一个翻页模式模块程序,
在这里与大家分享:
if(Key_no) // if key has pressed, first action is turn on back light
{
switch(pageno)
{
case 0:
page0_operate();
break;
case 1:
page1_operate();
break;
case 2:
page2_operate();
break;
case 3:
page3_operate();
break;
case 4:
page4_operate();
break;
case 5:
Page5_Operate();
break;
case 6:
Page6_Operate();
break;
case 7:
Page7_Operate();
break;
case 8:
Page8_Operate();
break;
case 9:
Page9_Operate();
break;
case 10:
Page10_Operate();
break;
case 11:
Page11_Operate();
break;
// case 12:
// Page12_Operate();
// break;
case 13:
Page13_Operate();
break;
case 14:
Page14_Operate();
break;
case 15: //display reg/cont perods and sum of reg user
Page15_Operate();
break;
case 16: //disp last operate type and MAC addr
Page16_Operate();
break;
default:
pageno=0;
break;
}
Key_no = 0;
disppage();
}
}
此程序模块先做键盘操作,在显示
void page0_operate(void)
{
if(Key_no&0x20) //P25 down键
pageno++;
}
void page1_operate(void) //clock page时钟操作模式
{
UCHAR idata temp;
if(pagelocate==0) //没有出现光标模式,只是显示模式
{
if(Key_no&0x20) //down: next page
pageno++;
else if(Key_no&0x40) // P26 up:last page
pageno--;
else if(Key_no&0x80) //P27 ESC键
pageno=0; //也就是最初模式页0模式
else if(Key_no&0x10) //P24 ENTER键
pagelocate=1; //第一次按enter键进入1~6的编辑模式光标停留在第一个字符
}
else if(pagestatus==0) //按enter键进入编辑模式光标1~6移动,shift between each location
{
if((Key_no&0x40)&&(pagelocate>1))
pagelocate--; //往向一光标移动
else if((Key_no&0x20)&&(pagelocate<6))
pagelocate++; //往下一光标移动
else if(Key_no&0x80) //exit move in page 退出编辑模式
pagelocate=0;
else if(Key_no&0x10) //再次按enter进入编辑每个字符模式
{
pagestatus = 1; //enter edit mode 确实进入编辑模式
time_buf[6]=0;
}
}
else //edit:change value at cursor 编辑每个字符的模式,也就是pagestatus = 1模式
{
if(Key_no&0x80)
pagestatus=0; //exit without change 按esc键退出编辑每个字符模式进入1~6字符模式
else if(Key_no&0x10) //exit and save changed value 按enter键保存修改字符
{
pagestatus=0;
Writetime1();
}
else if(Key_no&0x40) //value ++ 按up键累加功能
{
switch(pagelocate)
{
case 1: temp=(time_buf[0]>>4)*10+(time_buf[0]&0x0f);
if(temp<99) //year 00~99
temp++;
else
temp=0;
time_buf[0]=((temp/10)<<4)+temp%10;
break;
case 2: temp=(time_buf[1]>>4)*10+(time_buf[1]&0x0f);
if(temp<12) //month 1~12
temp++;
else
temp=1;
time_buf[1]=((temp/10)<<4)+temp%10;
break;
case 3: temp=(time_buf[2]>>4)*10+(time_buf[2]&0x0f);
if(temp<31) //date 1~31
temp++;
else
temp=1;
time_buf[2]=((temp/10)<<4)+temp%10;
break;
case 4:if(time_buf[3]<6) //day of week 0~6
time_buf[3]++;
else
time_buf[3]=0;
break;
case 5: temp=(time_buf[4]>>4)*10+(time_buf[4]&0x0f);
if(temp<23) //hour 0~23
temp++;
else
temp=0;
time_buf[4]=((temp/10)<<4)+temp%10;
break;
case 6: temp=(time_buf[5]>>4)*10+(time_buf[5]&0x0f);
if(temp<59) //minute 0~59
temp++;
else
temp=0;
time_buf[5]=((temp/10)<<4)+temp%10;
break;
default: break;
}
}
else if(Key_no&0x20) //value -- 按down键累减功能
{
switch(pagelocate)
{
case 1: temp=(time_buf[0]>>4)*10+(time_buf[0]&0x0f);
if(temp>0) //year 00~99
temp--;
else
temp=99;
time_buf[0]=((temp/10)<<4)+temp%10;
break;
case 2: temp=((time_buf[1]>>4)*10)+(time_buf[1]&0x0f);
if(temp>1) //month 1~12
temp--;
else
temp=12;
time_buf[1]=((temp/10)<<4)+temp%10;
break;
case 3: temp=(time_buf[2]>>4)*10+(time_buf[2]&0x0f);
if(temp>1) //date 1~31
temp--;
else
temp=31;
time_buf[2]=((temp/10)<<4)+temp%10;
break;
case 4:if(time_buf[3]>0) //day of week 0~6
time_buf[3]--;
else
time_buf[3]=6;
break;
case 5: temp=(time_buf[4]>>4)*10+(time_buf[4]&0x0f);
if(temp>0) //hour 0~23
temp--;
else
temp=23;
time_buf[4]=((temp/10)<<4)+temp%10;
break;
case 6: temp=(time_buf[5]>>4)*10+(time_buf[5]&0x0f);
if(temp>0) //minute 0~59
temp--;
else
temp=59;
time_buf[5]=((temp/10)<<4)+temp%10;
break;
default: break;
}
}
}
}
此程序位一个1602翻页模式程序模块,主要编程思路:首先有四个按键 ESC UP DOWN ENTER 在每个页面模式他的功能键又不一样
分析思路如下:首先主要实现三个页面模式,一为正常阅读模式,二为光标移动模式,三为光标确定模式,
在正常模式下 UP 表示上一页,DOWN 表示下一页,ENTER表示进入第二个光标移动模式,在第二个光标移动模式下,UP表示累减光标,DOWN表示累加光标,ENTER表示确认进入三个光标确定模式。在第三个光标确定模式下UP 表示要修改的数字的累减,DOWN表示要修改的数字累加 ENTER 表示确认并保存退出到上一级模式。
用户157103 2009-1-3 19:39
用户1398279 2009-1-1 17:32
用户513348 2008-12-30 19:57