|
发表于 2019-8-24 21:50:28
|
显示全部楼层
我用的这个,12864的
//按键处理函数
void KEY_Scan(void)
{ u8 zb[11]={0x54,0x54,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x54}; //上划线,空格
if(KEY_ZJ==0) //自检按下
{delay_ms(10);//去抖动
while(KEY_DOWN == 0); //提起释放
zj_flag=1;
}
if(KEY_UP==1 && KEY_DOWN == 0 && KEY_ENTER == 1 && KEY_ESC == 1) //DOWN键按下 又选择
{
delay_ms(10);//去抖动
while(KEY_DOWN == 0); //提起释放
if(menu_page==2&&menu_next==1) //在子菜单2下 , DOWN按下右移一次
menu_next=2; //跳至子菜单2 地址设置框
else if(menu_page==2&&menu_next==2) //在子菜单2下 ,DOWN按下右移一次
menu_next=3; //跳至子菜单2 阈值设置框
else if(menu_page==2&&menu_next==3) //在子菜单2下 ,DOWN按下右移一次
menu_next=4; //跳至子菜单2 数据查询框
else if(menu_page==2&&menu_next==4) //在子菜单2下 ,DOWN按下右移一次
menu_next=1; //跳至子菜单2 参数查询框
//数值 减1
else if(menu_next_next==1&&menu_page==3)//如果在参数设置界面 当前位置 减1
{ switch (add){
case 1: if(L_gm_yz[0]>0)L_gm_yz[0]--;else L_gm_yz[0]=9;break; //修正因子 减1
case 2: if(L_gm_yz[2]>0)L_gm_yz[2]--;else L_gm_yz[2]=9;break;
case 3: if(L_gm_yz[3]>0)L_gm_yz[3]--;else L_gm_yz[3]=9;break;
case 4: if(L_gm_yz[4]>0)L_gm_yz[4]--;else L_gm_yz[4]=9;break;}
}
else if(menu_next_next==2&&menu_page==3)//如果在地址设置界面
{
////////////////////时间设置//////////////
switch (add){
case 1: if(address>0) address=address--; else address=0; time_flash=0;break; //当前位置减1
case 2: if(date_set[1]>0) date_set[1]--;else if (date_set[0]>0){date_set[0]--; date_set[1]=9;} //年
else{date_set[0]=9; date_set[1]=9;}time_flash=1;
break;
case 3: if(date_set[3]>0) date_set[3]--;else if (date_set[2]>0){date_set[2]=0; date_set[3]=9;} //月
else if(date_set[2]==0&&date_set[3]==0){date_set[2]=1; date_set[3]=2;}time_flash=1;
break;
case 4: if(date_set[5]>0) date_set[5]--;else if (date_set[4]>0){date_set[4]--; date_set[5]=9;} //日
else if(date_set[4]==0&&date_set[5]==0) {date_set[4]=3; date_set[5]=1;} time_flash=1;
break;
case 5: if(time_set[1]>0) time_set[1]--;else if (time_set[0]>0){time_set[0]--; time_set[1]=9;} //时
else{time_set[0]=2; time_set[1]=3;} time_flash=1;
break;
case 6: if(time_set[3]>0) time_set[3]--;else if (time_set[2]>0){time_set[2]--; time_set[3]=9;} //分
else{time_set[2]=5; time_set[3]=9;} time_flash=1;
break;
case 7: if(time_set[5]>0) time_set[5]--;else if (time_set[4]>0){time_set[4]--; time_set[5]=9;} //秒
else{time_set[4]=5; time_set[5]=9;} time_flash=1;
break;
}
}
else if(menu_next_next==3&&menu_page==3)//如果在阈值设置界面 当前位置 减1
{ switch (add) {
case 1: if(alm_dat[0]>0)alm_dat[0]--;else alm_dat[0]=9;break; //阈值 减1
case 2: if(alm_dat[1]>0)alm_dat[1]--;else alm_dat[1]=9;break;
case 3: if(alm_dat[2]>0)alm_dat[2]--;else alm_dat[2]=9;break;
case 4: if(alm_dat[3]>0)alm_dat[3]--;else alm_dat[3]=9;break;
case 5: if(alm_dat[5]>0)alm_dat[5]--;else alm_dat[5]=9;break;
}
}
}
if(KEY_UP==0 && KEY_DOWN == 1 && KEY_ENTER == 1 && KEY_ESC == 1) //up键按下 左选择
{
delay_ms(10);//去抖动
while(KEY_UP == 0); //提起释放
if(menu_page==2&&menu_next==1) //在子菜单2下 ,up按下左移一次
menu_next=4; //跳至子菜单2 数据查询框
else if(menu_page==2&&menu_next==4) //在子菜单2下 ,up按下左移一次
menu_next=3; //跳至子菜单2 参数查询框
else if(menu_page==2&&menu_next==3) //在子菜单2下 ,up按下左移一次
menu_next=2; //跳至子菜单2 地址设置框
else if(menu_page==2&&menu_next==2) //在子菜单2下 ,up按下左移一次
menu_next=1; //跳至子菜单2 阈值设置框
//数值加
else if(menu_next_next==1&&menu_page==3)//如果在参数设置界面 当前位置加1
{ switch (add){
case 1: L_gm_yz[0]++;if(L_gm_yz[0]>9) L_gm_yz[0]=0;break; //修正因子 加1
case 2: L_gm_yz[2]++;if(L_gm_yz[2]>9) L_gm_yz[2]=0;break;
case 3: L_gm_yz[3]++;if(L_gm_yz[3]>9) L_gm_yz[3]=0;break;
case 4: L_gm_yz[4]++;if(L_gm_yz[4]>9) L_gm_yz[4]=0;break;}
}
else if(menu_next_next==2&&menu_page==3)//如果在地址设置界面 当前位置加1
{
////////////////////时间设置//////////////
switch (add){
case 1:address=address++; if(address==100) address=0;break;
case 2: date_set[1]++;if(date_set[1]>9){date_set[1]=date_set[1]-10;date_set[0]++;} //年
else if(date_set[0]==9&&date_set[1]==9){date_set[0]=0;date_set[1]=0;} time_flash=1;
break;
case 3: date_set[3]++; if(date_set[2]==1&&date_set[3]==3){date_set[2]=0;date_set[3]=1;}//月
else if(date_set[3]>9){date_set[3]=date_set[3]-10;date_set[2]++;} time_flash=1;
break;
case 4: date_set[5]++;if(date_set[4]==3&&date_set[5]==2){date_set[4]=0;date_set[5]=1;}//日
else if(date_set[5]>9){date_set[5]=date_set[5]-10;date_set[4]++;} time_flash=1;
break;
case 5: time_set[1]++;if(time_set[0]>1&&time_set[1]>3){time_set[0]=0;time_set[1]=0;} //时
else if(time_set[1]>9){time_set[1]=time_set[1]-10;time_set[0]++;} time_flash=1;
break;
case 6: time_set[3]++; if(time_set[2]>5){time_set[2]=0;time_set[3]=0;}//分
else if(time_set[3]>9){time_set[3]=time_set[3]-10;time_set[2]++;}time_flash=1;
break;
case 7: time_set[5]++;if(time_set[4]>5){time_set[4]=0;time_set[5]=0;} //秒
else if(time_set[5]>9){time_set[5]=time_set[5]-10;time_set[4]++;}time_flash=1;
break;
}
}
else if(menu_next_next==3&&menu_page==3)//如果在阈值设置界面 当前位置加1
{ switch (add) {
case 1: alm_dat[0]++;if(alm_dat[0]>9) alm_dat[0]=0;break; //阈值 加1
case 2: alm_dat[1]++;if(alm_dat[1]>9) alm_dat[1]=0;break;
case 3: alm_dat[2]++;if(alm_dat[2]>9) alm_dat[2]=0;break;
case 4: alm_dat[3]++;if(alm_dat[3]>9) alm_dat[3]=0;break;
case 5: alm_dat[5]++;if(alm_dat[5]>9) alm_dat[5]=0;break;
}
}
}
if(KEY_UP==1 && KEY_DOWN == 1 && KEY_ENTER == 0 && KEY_ESC == 1) //enter键按下 确定
{
delay_ms(10);//去抖动
while(KEY_ENTER == 0); //提起释放
if(menu_page==1) //如果在主菜单1,则进入子菜单2
{
menu_page=2;menu_next=1;menu_next_next=0; clear_flag=1;
}
else if(menu_page==2&&menu_next==1) //在子菜单2下 ,enter键按下 确定
{ menu_next_next=1;menu_page=3;menu_next=0;clear_flag=1;add=0; } //跳至子菜单2 参数设置界面 光标回到首位
else if(menu_page==2&&menu_next==2) //在子菜单2下 ,enter键按下 确定
{ menu_next_next=2; menu_page=3;menu_next=0;clear_flag=1;add=0;} //跳至子菜单2 地址设置框界面
else if(menu_page==2&&menu_next==3) //在子菜单2下 ,enter键按下 确定
{ menu_next_next=3;menu_page=3;menu_next=0; clear_flag=1;add=0;} //跳至子菜单2 阈值设置框界面
else if(menu_page==2&&menu_next==4) //在子菜单2下 ,enter键按下 确定
{ menu_next_next=4;menu_page=3; menu_next=0;clear_flag=1;add=0;} //跳至子菜单2 数据查询界面
//获取位置
else if(menu_next_next==1&&menu_page==3)//如果在参数设置界面 获取位置
{ add=add+1; if(add==5) add=1;
if(add>1)
ShowLine(32,12+add*2+2,zb,11);//显示下划线 跳过小数点
else
ShowLine(32,12+add*2,zb,11);//显示下划线
}
else if(menu_next_next==3&&menu_page==3)//如果在阈值设置界面 获取位置
{
add=add+1;
if(add==6) add=1;
if(add==5)
ShowLine(32,12+add*2+2,zb,11);//显示下划线 跳过小数点
else
ShowLine(32,12+add*2,zb,11);//显示下划线
}
else if(menu_next_next==2&&menu_page==3)//如果在地址设置界面 获取位置
{ add=add+1;
if(add==2)
{time_read();// 读出时间
}
if(add==8) add=1;
if(add==1)
{zb[0]=0x55;zb[1]=0x55;
ShowLine(24,24,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(24,24,zb,2);//显示地址空格
}
if(add==2) //年
{zb[0]=0x55;zb[1]=0x55;
ShowLine(58,24,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(58,24,zb,2);//显示地址空格
}
if(add==3) //月
{zb[0]=0x55;zb[1]=0x55;
ShowLine(58,24+6,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(58,24+6,zb,2);//显示地址空格
}
if(add==4) //日
{zb[0]=0x55;zb[1]=0x55;
ShowLine(58,24+12,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(58,24+12,zb,2);//显示地址空格
}
if(add==5) //时
{zb[0]=0x55;zb[1]=0x55;
ShowLine(58,24+20,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(58,24+20,zb,2);//显示地址空格
}
if(add==6) //分
{zb[0]=0x55;zb[1]=0x55;
ShowLine(58,24+26,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(58,24+26,zb,2);//显示地址空格
}
if(add==7) //秒
{zb[0]=0x55;zb[1]=0x55;
ShowLine(58,24+32,zb,2);//显示地址下划线
}else
{zb[0]=0x54;zb[1]=0x54;
ShowLine(58,24+32,zb,2);//显示地址空格
}
}
}
if(KEY_UP==1 && KEY_DOWN == 1 && KEY_ENTER == 1 && KEY_ESC == 0) //ESC键按下 返回
{
delay_ms(10);//去抖动
while(KEY_ESC == 0); //提起释放
if(menu_page==2) //如果进入子菜单2 回主菜单1
{ menu_page=1;menu_next=0;menu_next_next=0;clear_flag=1; }
else if(menu_page==3) //如果进入子菜单3 回主菜单2 第一项 同时保存数据
{ data_save[0] = 0x01;
data_save[1] = L_gm_yz[0]; //低量程γ因子0.950
data_save[2] = 0x0d; //.
data_save[3] = L_gm_yz[2];
data_save[4] = L_gm_yz[3];
data_save[5] = L_gm_yz[4];
data_save[6] = alm_dat[0]; //监测报警值0002.0uSv/h
data_save[7] = alm_dat[1];
data_save[8] = alm_dat[2];
data_save[9] = alm_dat[3];
data_save[10] = 0x0d;
data_save[11] = alm_dat[5];
data_save[12] = address/10;
data_save[13] = address%10;
menu_page=2;
menu_next=1;
menu_next_next=0;
clear_flag=1;
if(add>0)
{
flash_flag=1;
add=0;
}
}
}
} |
|