📄 hand_1010_rs232_ok.c
字号:
1-------0ch---1 down----0fh-------12
2-------08h---2 right---10h-------13
3-------04h---3 light---0eh-------14
4-------0bh---4 Esc-----14h-------15
5-------07h---5 lamp----12h-------16
6-------03h---6 set-----0dh-------17
7-------0ah---7 +/------05h-------18
8-------06h---8 Enter---01h-------19
9-------02h---9
//static uchar rom KEYCODE[21]={0,19,9,6,3,18,8,5,2,10,7,4,1,17,14,12,13,0,16,11,15 };
**********************************************************************************/
void Function(void) //按键功能函数
{
static uchar cby[7]={0xb3,0xad,0xb1,0xed,0xd4,0xb1,0};
static uchar tsy[7]={0xb5,0xf7,0xca,0xd4,0xd4,0xb1,0};
uchar i,j,p,n,seq;
uint k,m;
uchar charh,charl;
uchar temp_buffer[7]={0x46,0x86,0x89,0,0,0,0};
//---------------------------------------------------声音提示操作
if(key!=0) speaker();
switch (functionhandle)
{
//---------------------------------------------------登陆界面
case 0:
//---------------------------------------------------
if(displaynextpage==1)
{
printscr(0,0,'c',"******************************",buffer.ichar);
printscr(1,6,'c'," ",buffer.ichar);
printscr(2,6,'c'," ",buffer.ichar);
printscr(3,6,'c',"操作员:抄表员",buffer.ichar);
printscr(4,6,'c',"密 码:",buffer.ichar);
printscr(5,6,'c'," ",buffer.ichar);
printscr(6,6,'c'," ",buffer.ichar);
printscr(7,0,'c',"操作员类型选择请按'.'!",buffer.ichar);
printscr(8,0,'c',"******************************",buffer.ichar);
printscr(9,2,'c',"优倍电气股份(南京)有限公司",buffer.ichar);
displaytime=0;
usernumber=0;
displaynextpage=0;
}
if((key<11)&&(key>0))
{
if(key==10) key=0;
if(step_count0==4)
{
step_count1++;
if(step_count1>6) step_count1=6;
line4buffer[step_count1-1]='*'; //
line4buffer[step_count1]=0;
line4buffer[step_count1+1]=0;
password0[step_count1-1]=key;
}
}
//--------------------------------------------
if((key==set)&&(deep_count!=0)) line4buffer[--deep_count]=0;
//-------------------------------------------
if(key==dot)
if(usernumber==0)
{
for(i=0;i<7;i++)line3buffer[i]=tsy[i];
printscr(3,13,'d',SPACE,line3buffer);
usernumber=1;
}
else
{
for(i=0;i<7;i++)line3buffer[i]=cby[i];
printscr(3,13,'d',SPACE,line3buffer);
usernumber=0;
}
printscr(4,13,'d',SPACE,line4buffer);
switch(key)
{
case down :
step_count0=4;
step_count1=0;
clearhand(3);
for(i=0;i<6;i++) line4buffer[i]=0;
printscr(4,13,'d',SPACE,line4buffer); //down
break;
case up :
step_count0=3;
clearhand(4);
step_count1=0;
for(i=0;i<6;i++) line3buffer[i]=0;
break;
case enter :
//-------------------------------密码校验程序
for(i=0;i<6;i++) password[i]=read_word1(usernumber*16+i); //read password from eeprom.
for(i=0;i<6;i++)
{
if(password[i]==password0[i]) continue;
else break;
}
for(j=0;j<6;j++)
{
if(password0[j]==superpassword[j]) continue;
else break;
}
if((i==6)||(j==6))
{
printscr(7,0,'c',"密码正确!",buffer.ichar); //
line3buffer[0]=line3buffer[0]-0x30;
if(usernumber==0) funtiondisplayselect=0x01;
else funtiondisplayselect=0x02;
step_count0=1;
step_count1=0;
functionhandle=1;
displaynextpage=1;
delayms(100);
}
else {
printscr(7,0,'c',"密码错误!",buffer.ichar); //
for(i=0;i<30;i++) line4buffer[i]=0;
printscr(4,13,'d',SPACE,line4buffer);
step_count0=3;
clearhand(4);
}
for(i=0;i<6;i++) {password0[i]=0;line4buffer[i]=0;}
//----------------------------密码校验结束
break; //管理员登陆;
default: break;
}
printhand(step_count0);
break;
//-------------------------------------------------------------------------------------------
//----总菜单界面
case 1:
if(funtiondisplayselect==0x01)
{
if(displaynextpage)
{
printscr(0,0,'c',"******************************",buffer.ichar);
printscr(1,6,'c',"下载抄表信息",buffer.ichar);
printscr(2,6,'c',"上传抄表信息",buffer.ichar);
printscr(3,6,'c',"集 抄",buffer.ichar);
printscr(4,6,'c',"读单表具",buffer.ichar);
printscr(5,6,'c',"帮助",buffer.ichar);
printscr(6,6,'c'," ",buffer.ichar);
printscr(7,6,'c'," ",buffer.ichar);
printscr(8,0,'c',"******************************",buffer.ichar);
printscr(9,14,'c',"Ent:确认Esc:退出",buffer.ichar);
displaynextpage=0;
}
switch(key)
{
case down : clearhand(step_count0++); break; //down
case up : clearhand(step_count0--); break; //up
case esc : displaynextpage=1;functionhandle=0;step_count0=3;line3buffer[0]=0;line4buffer[0]=0; break;
case enter:
//------------------------------------------------------------------------
clearlcd();
functionhandle=step_count0+1;
displaynextpage=1;
step_count0=1;
step_count2=1;
deep_count=0;
for(i=0;i<30;i++)
{
line1buffer[i]=0;
line2buffer[i]=0;
line3buffer[i]=0;
line4buffer[i]=0;
}
break;
default:break;
}
if(step_count0==0) {step_count0=5;displaynextpage=1;}
if(step_count0>5) {step_count0=1;displaynextpage=1;} //置页标志
printhand(step_count0);
}
else
{
if(displaynextpage)
{
printscr(0,0,'c',"******************************",buffer.ichar);
if(step_count1==0)
{
printscr(1,6,'c',"出厂启用",buffer.ichar);
printscr(2,6,'c',"表具重置",buffer.ichar);
printscr(3,6,'c',"读单表具",buffer.ichar);
printscr(4,6,'c',"阀门控制",buffer.ichar);
printscr(5,6,'c',"表具查询",buffer.ichar);
printscr(6,6,'c',"更改价格表",buffer.ichar);
printscr(7,6,'c',"更改结算日",buffer.ichar);
printscr(8,0,'c',"******************************",buffer.ichar);
printscr(9,0,'c',"1/2 Ent:确认Esc:退出",buffer.ichar);
} //step_count0=7;
else
{
printscr(1,6,'c',"更改抄表日",buffer.ichar);
printscr(2,6,'c',"更改中继器地址",buffer.ichar);
printscr(3,6,'c',"更改标准时间",buffer.ichar); //
printscr(4,6,'c',"修改手抄器密码",buffer.ichar);
printscr(5,6,'c',"系统时间",buffer.ichar);
printscr(6,6,'c',"帮助",buffer.ichar);
printscr(7,6,'c'," ",buffer.ichar);
printscr(8,0,'c',"******************************",buffer.ichar);
printscr(9,0,'c',"2/2 Ent:确认Esc:退出",buffer.ichar);
}
displaynextpage=0;
displaytime=0;
}
if(step_count1==0)
{ //first page
switch(key)
{
case down : clearhand(step_count0++); break; //down
case up : clearhand(step_count0--); break; //up
case esc : displaynextpage=1;functionhandle=0;step_count0=3;line3buffer[0]=0;line4buffer[0]=0;break;
case enter:
//------------------------------------------------------------------------
clearlcd();
functionhandle=step_count0+10;
displaynextpage=1;
step_count0=1;
step_count2=1;
deep_count=0;
deep_count1=0;
for(i=0;i<30;i++)
{
line1buffer[i]=0;
line2buffer[i]=0;
line3buffer[i]=0;
line4buffer[i]=0;
}
break;
default: break;
}
if(step_count0==0) {step_count0=6;step_count1=1;displaynextpage=1;}
if(step_count0>7) {step_count0=1;step_count1=1;displaynextpage=1;} //置页标志
printhand(step_count0);
}
else //second page
{{
switch(key) //
{
case down : clearhand(step_count0++); break; //down
case up : clearhand(step_count0--); break; //up
case esc : displaynextpage=1;functionhandle=0;step_count0=3;line3buffer[0]=0;line4buffer[0];break;
case enter:
clearlcd();
functionhandle=step_count0+10+7;
displaynextpage=1;
step_count0=1;
step_count2=1;
deep_count=0;
for(i=0;i<30;i++)
{
line1buffer[i]=0;
line2buffer[i]=0;
line3buffer[i]=0;
line4buffer[i]=0;
}
break;
default: break;
}
if(step_count0>6) {step_count0=1;step_count1=0;displaynextpage=1;}
if(step_count0==0){step_count0=7;step_count1=0;displaynextpage=1;} //置页标志
printhand(step_count0);
}
}
}
break;
//-----step_count级子功能菜单界面
case 2:
if(displaynextpage)
{
printscr(0,0,'c',"*下载抄表信息",buffer.ichar);
printscr(1,0,'c'," ",buffer.ichar);
printscr(2,0,'c'," ",buffer.ichar);
printscr(8,0,'c'," ",buffer.ichar);
printscr(8,0,'c',"******************************",buffer.ichar);
printscr(9,14,'c',"Ent:确认Esc:退出",buffer.ichar);
displaynextpage=0;
displaytime=0;
}
/*************************************************************
uchar current_count; //当前接收或发送的数据包数。
uint current_repeater_addr; //当前有效的中继器地址。
**************************************************************/
displaynextpage=1;
functionhandle=1;
printscr(1,1,'c',"正在连接......",buffer.ichar);
printscr(9,14,'c',"Ent:确认Esc:退出",buffer.ichar);
key=0;
comm_wrong_flag=0;
current_count=0;
current_repeater_addr=0;
start_re_send_flag=0;
//-----------------------------------------------下栽数据
for(i=0;i<50;i++)
{
if(rs232receive())
{
m=dealrs232revedata();//该程序返通讯类型同时置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -