📄 wdd.c
字号:
n=0;//初始化设定位为第零位,此后n指向当前所设定的位
if(dat>999999){dat=999999;}//最打值为999999
dat_buf[0]=dat/100000; //求BCD码
dat=dat%100000;dat_buf[1]=dat/10000;
dat=dat%10000;dat_buf[2]=dat/1000;
dat=dat%1000;dat_buf[3]=dat/100;
dat=dat%100;dat_buf[4]=dat/10;
dat_buf[5]=dat%10;
NO_CPLdisp(5,48,dat_buf[0]);
for(i=1;i<6;++i)
{NO_disp(5,i*8+48,dat_buf[i]);
}
while(1)
{i=key();
switch(i)
{case key_SET:
{ Show_new();
dat=(long)dat_buf[0]*100000;
dat+=(long)dat_buf[1]*10000;
dat+=(long)dat_buf[2]*1000;
dat+=(long)dat_buf[3]*100;
dat+=dat_buf[4]*10;
dat+=dat_buf[5];
return(dat);
}
case key_UP:
{if(++dat_buf[n]>9)dat_buf[n]=0;
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_DOWN:
{if(--dat_buf[n]==255)dat_buf[n]=9;
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_R:
{NO_disp(5,n*8+48,dat_buf[n]);
if(++n>5)n=0;
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_L:
{NO_disp(5,n*8+48,dat_buf[n]);
if(--n==255)n=5;
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_EXIT :
{Show_new();return temp;
}
case key_CLR:break;
default :break;
}
}
}
}
//---------------------------------------------------------------------------------
//号码输入框,可在画面显示(最多16字)提示信息,
//输入:cha为要显示提示信息内容数组的首地址,该数组存放要显示的字符在字库点阵CHA_lib[][]中第一维的位置
//输入:n为要提示信息的字符个数
//输入:NO为初始号码数组的首地址,
//返回:设定的号码数组的首地址;按确定键后返回号码数组为设定的号码;如果按下退出键,则为输入的初始号码
//说明:退出后自动刷新显示,恢复界面
//---------------------------------------------------------------------------------
unsigned char *Inputbox_NO(unsigned char *cha,unsigned char n,unsigned char *NO)
{unsigned char i;
Clr_Scr();
if(n<9)
{for(i=0;i<n;i++)
{cha_disp(3,i*16+(8-n)*8,cha[i]);
}
}
else
{if(n>16)n=16;//最大只能显示16个字符
for(i=0;i<8;i++)
{cha_disp(1,i*16,cha[i]);
}
for(i=8;i<n;i++)
{cha_disp(3,i*16+(16-n)*8,cha[i]);
}
}
{
static unsigned char dat_buf[6];//最大输入六位
n=0;//初始化设定位为第零位,此后n指向当前所设定的位
for(i=0;i<6;++i)
{if(NO[i]<10){dat_buf[i]=NO[i];}
else{dat_buf[i]=9;}
}
NO_CPLdisp(5,48,dat_buf[0]);
for(i=1;i<6;++i)
{NO_disp(5,i*8+48,dat_buf[i]);
}
while(1)
{i=key();
switch(i)
{case key_SET:
{ Show_new();
return(dat_buf);
}
case key_UP:
{if(++dat_buf[n]>9)dat_buf[n]=0;
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_DOWN:
{if(--dat_buf[n]==255)dat_buf[n]=9;
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_R:
{NO_disp(5,n*8+48,dat_buf[n]);
if(++n>5)n=0;//如果为最右边
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_L:
{NO_disp(5,n*8+48,dat_buf[n]);
if(--n==255)n=5;//如果为最左边
NO_CPLdisp(5,n*8+48,dat_buf[n]);
break;
}
case key_EXIT :
{Show_new();for(i=0;i<6;++i){dat_buf[i]=NO[i];} ;return dat_buf;
}
case key_CLR:break;
default :break;
}
}
}
}
//---------------------------------------------------------------------------------
//
//选项往下移一项,Select_NO加1始终指向当前选项,Select_NO最大为Select_MAX
//
//
//---------------------------------------------------------------------------------
void Select_down()
{unsigned char i;
{for(i=0;i<8;i++)cha_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
++Select_NO;
if(Select_NO<=Select_MAX)//如果小于Select_MAX,说明未到显示底部
{if((Tree[Menu_NO].DISP[Select_NO][0]!=10)||(Tree[Menu_NO].DISP[Select_NO][1]!=10)||\
(Tree[Menu_NO].DISP[Select_NO][2]!=10)||(Tree[Menu_NO].DISP[Select_NO][3]!=10)||\
(Tree[Menu_NO].DISP[Select_NO][4]!=10)||(Tree[Menu_NO].DISP[Select_NO][5]!=10)||\
(Tree[Menu_NO].DISP[Select_NO][6]!=10)||(Tree[Menu_NO].DISP[Select_NO][7]!=10))//判断是否存在下一选项
{for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]); }
else//如果没有下一选项,恢复上一选项反选
{--Select_NO;if(Select_NO==255){Select_NO=0;}
{for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
}
}
else if(Tree[Menu_NO].add_menu[1]!=0)//如果已到底部,则判断是否同目录下是否含有其他的扩展目录
{Select_NO=0;Menu_NO=Tree[Menu_NO].add_menu[1];
Show_new();
}
else//Select_NO=Select_MAX;已到底部,而且同目录下不含有其他的目录
{Select_NO=Select_MAX;
for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_MAX][i]);
}
}
//---------------------------------------------------------------------------------
//
//选项往上移一项,Select_NO减1始终指向当前选项,Select_NO最小为0
//
//
//---------------------------------------------------------------------------------
void Select_up()
{unsigned char i;
for(i=0;i<8;i++){cha_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
--Select_NO;
if(Select_NO!=255)
{ if((Tree[Menu_NO].DISP[Select_NO][0]!=10)||(Tree[Menu_NO].DISP[Select_NO][1]!=10)||\
(Tree[Menu_NO].DISP[Select_NO][2]!=10)||(Tree[Menu_NO].DISP[Select_NO][3]!=10)||\
(Tree[Menu_NO].DISP[Select_NO][4]!=10)||(Tree[Menu_NO].DISP[Select_NO][5]!=10)||\
(Tree[Menu_NO].DISP[Select_NO][6]!=10)||(Tree[Menu_NO].DISP[Select_NO][7]!=10))//判断是否存在下一选项
{for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]); }
else//如果没有下一选项,恢复上一选项反选
{++Select_NO;if(Select_NO>Select_MAX){Select_NO=Select_MAX;}
{for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[Select_NO][i]);}
}
}
else if(Tree[Menu_NO].add_menu[0]!=0)//如果已到顶部,则判断是否同目录下是否含有其他的扩展目录
{Select_NO=0;Menu_NO=Tree[Menu_NO].add_menu[0];
Show_new();
}
else//已到顶部,而且同目录下不含有其他的目录
{Select_NO=0;
for(i=0;i<8;i++)cpl_disp(Select_NO*2,i*16,Tree[Menu_NO].DISP[0][i]);
}
}
//---------------------------------------------------------------------------------
//
//返回上一级菜单目录
//Menu_NO将指向该菜单目录
//
//---------------------------------------------------------------------------------
void Go_last(void)
{Select_NO=0;Menu_NO=Tree[Menu_NO].last;
if(Menu_NO==0){Select_NO=3;}//如果返回首界面,则指向最后一栏:“进入”
Show_new();
}
//-------------------------------------------------------------------------------------
//
//如果当前Select_NO指向的选项有子菜单
//进入下一级菜单(子菜单)目录,Menu_NO将指向该菜单目录
//
//--------------------------------------------------------------------------------------
Go_next()
{if(Tree[Menu_NO].next[Select_NO]!=0)
{
Menu_NO=Tree[Menu_NO].next[Select_NO];Select_NO=0;
Show_new();
}
}
//-------------------------------------------------------------------------------------
//
//
//菜单(子菜单)目录菜单向下翻页,Menu_NO将指向该菜单目录
//
//--------------------------------------------------------------------------------------
Go_add_menu_d()
{if(Tree[Menu_NO].add_menu[1]!=0)
{
Menu_NO=Tree[Menu_NO].add_menu[1];Select_NO=0;
Show_new();
}
}
//-------------------------------------------------------------------------------------
//
//
//菜单(子菜单)目录菜单向上翻页,Menu_NO将指向该菜单目录
//
//--------------------------------------------------------------------------------------
Go_add_menu_u()
{if(Tree[Menu_NO].add_menu[0]!=0)
{
Menu_NO=Tree[Menu_NO].add_menu[0];Select_NO=0;
Show_new();
}
}
//--------------------------------------------------
//常用字符组合(可不必定义,)
unsigned char code QSRMM[5]={15,16,17,24,25};//请输入密码
unsigned char code MMCW[4]={24,25,18,19};//密码错误
/*
unsigned char code
unsigned char code
unsigned char code*/
//*****************************************************************************************
//重要功能实现程序模块
//----------------------------------------------------------------------------------------
//输入键执行程序
//根据状态机Menu_NO、Select_NO执行不同的操昨
//各子菜单,各选项下,按下SET键需要实现的功能基本在该模块实现
//主程序调用该函数
//-----------------------------------------------------------------------------------------
void function_action(void)
{unsigned int i;
i=(Menu_NO<<8)|(Select_NO);//求状态组合
switch(i) //Inputbox_dat(QSRMM,5,999999)
{case 0x0003://在开机界面下
{if(Inputbox_dat(QSRMM,4,999999)!=199999){Msgbox(MMCW,4,1);break;}
else {GO_next();break;}
}
default :{GO_next();break;}//其他未定义情况,进入下一级菜单
}
}
/**************主程序************************/
void main(void)
{unsigned char i;
unsigned char temp=32; //ASCII码控制范围起始值
delay(10000);
Menu_NO=0;Select_NO=3;
init_lcd(); //液晶初始化
Clr_Scr();
cha_disp(1,8,38);
cha_disp(3,24,39);
cha_disp(5,16,40);
cha_disp(5,36,41);
cha_disp(5,56,41);
for(;;)
{delay(60000);
for(i=0;i<64;i++)
{
Cs2=1; //
Cs1=0;
delay(10);
Lcdwritecom(Start_Line+i);
Cs2=0; //
Cs1=1;
delay(10);
Lcdwritecom(Start_Line+i);
delay(2000);
}
delay(60000);
}
while(1)
{i=key();
if(i!=255)
{ switch(i)
{ case key_SET:
{function_action();
break;
}
case key_UP:
{ Select_up();
break;
}
case key_DOWN:
{ Select_down();
break;
}
case key_R:
{Go_add_menu_u();
break;
}
case key_L:
{Go_add_menu_d();
break;
}
case key_EXIT :
{Go_last();
}
case key_CLR:{}break;
default : {}break;
}
i=255;//已处理了键值
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -