📄 123.c
字号:
wr_lcd(0x25);
//////////////////////////////////////
for(i=0;i<2;i++ ) //00
{
wr_zhiling(0xf9,0x16-i,0x20);
wr_lcd(num[numd[i]]);
}
/* wr_zhiling(0xf9,0x14,0x20); //写个小数点.
wr_lcd(0x2e);
for(i=2;i<4;i++) //00
{
wr_zhiling(0xf9,0x15-i,0x20);
wr_lcd(num[numd[i]]) ;
} */
//////////////////////////////////////
break;
case 2: //频率
wr_lcd(0xf4);
for(i=0;i<2;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(set0[2*i]);
wr_lcd(set0[2*i+1]);
}
//////////////////////////////////////////////////// //显示频率的数值
if(v==0)
{
for(i=0;i<5;i++) //.00HZ
{
wr_zhiling(0xf9,0x13+i,0);
wr_lcd(unit0[i]);
}
for(i=0;i<5;i++)
{
wr_zhiling(0xf9,0x12-i,0);
wr_lcd(num[numf[i]]);
}
}
if(v==1)
{
for(i=0;i<6;i++) //.00Khz
{
wr_zhiling(0xf9,0x12+i,0);
wr_lcd(unit2[i]);
}
for(i=0;i<5;i++)
{
wr_zhiling(0xf9,0x11-i,0);
wr_lcd(num[numf[i]]);
}
}
//////////////////////////////////////////////////////////////////////
for(i=0;i<2;i++) //幅度
{
wr_zhiling(0xf0,i,1);
wr_lcd(set1[2*i]);
wr_lcd(set1[2*i+1]);
}
for(i=0;i<3;i++) //VPP
{
wr_zhiling(0xf9,0x15+i,0x10);
wr_lcd(unit1[i]);
}
//////////////////////////////////////////////////////////////
for (i=0;i<2;i++) // 00.00
{
wr_zhiling(0xf9,0x14-i,0x10);
wr_lcd(num[numr[i]]);
}
wr_zhiling(0xf9,0x12,0x10); //写个小数点.
wr_lcd(0x2e);
for(i=2;i<4;i++) //00
{
wr_zhiling(0xf9,0x13-i,0x10);
wr_lcd(num[numr[i]]);
}
//////////////////////////////////////////////////////////////////
wr_lcd(0xfa);
for(i=0;i<3;i++) //占空比
{
wr_zhiling(0xf0,i,2);
wr_lcd(set2[2*i]);
wr_lcd(set2[2*i+1]);
}
wr_lcd(0xfa);
wr_zhiling(0xf9,0x17,0x20); //%
wr_lcd(0x25);
//////////////////////////////////////
for(i=0;i<2;i++ ) //00
{
wr_zhiling(0xf9,0x16-i,0x20);
wr_lcd(num[numd[i]]);
}
/* wr_zhiling(0xf9,0x14,0x20); //写个小数点.
wr_lcd(0x2e);
for(i=2;i<4;i++) //00
{
wr_zhiling(0xf9,0x15-i,0x20);
wr_lcd(num[numd[i]]) ;
} */
//////////////////////////////////////
break;
}
}
/***************************************************************************/
/**********************键盘扫描***********************/
uchar keyscan()
{
uchar k_new,k;
P2=0xff; //先置位按键端口;
k_new=0x00;
k=0;
k_new=P2; //将按键端口状态送给k_new;
if(k_new!=0xff) //判断是否有按键按下
{
delay(200); //按键去抖
k_new=P2;
if(k_new!=0xff) //再次判断是否有按键按下,有则执行
{
switch(k_new)
{
case 0xfe: //下
k = 1;
break;
case 0xfd: //上
k = 2;
break;
case 0xfb: //进入子菜单
k = 3;
break;
case 0xf7: //返回上一级菜单
k = 4;
break;
default:
k = 0;
break;
}
}
}
return(k); //无键按下 无键按下返回0;
}
void main()
{
uchar r=0,s=0,t=0,u,i; //s为主菜单,按键返回值;t为一级子菜单,按键返回值;把一级菜单中菜单选中状态赋给u;
int_init(); //中断初始化
serial_init();
lcd_init(); //液晶初始化
delay(10);
wr_lcd(0xf4);
start();
delay(5000);
wr_lcd(0xf4);
main_menu(temp);
while(1)
{
s=keyscan();
delay(200); //调入按键扫描程序
switch(s)
{
case 1: //菜单向下移动,但需要更多的菜单,*****可以采用,当一屏满时,可以上移16格,然后在显示,上移时则下移16格
temp++;
main_menu(temp);
if(temp==4)
{
temp=0;
main_menu(temp);
}
break;
case 2: //菜单往上移动
temp--;
if(temp==-1)
{
temp=3;
main_menu(temp);
}
main_menu(temp);
break;
case 3: //进入子菜单 ,进入子菜单后,*****嵌套键盘扫描,当有返回键时返回,否则停在此处显示
sub_menu1(temp1); //一级子菜单标志,当temp1=0,选中是频率
while(1)
{
//sub_menu1(temp1);
t=keyscan();
delay(200);
switch(t)
{
case 1: //向下移
temp1++;
if(temp1==3)
{
temp1=0;
sub_menu1(temp1);
}
sub_menu1(temp1);
break;
case 2: //向上移
temp1--;
if(temp1==-1)
{
temp1=2;
sub_menu1(temp1);
}
sub_menu1(temp1);
break;
case 3: //二级菜单配置
u=temp1; //temp1为选中的一级子菜单的标志
display_data(u,f,range,duty,w);
switch(u) /************构想,这里也是采用按键,按键不放数值一直递增***************/
{
case 0: //频率数值设置
while(1) //调用函数获得数值,然后显示
{
r=keyscan();
switch(r)
{
case 1: //按键递增 //HZ级别
if(w==0)
{
if(f<60)
f++;
if (f>=60&&f<100)
f=f+10;
if(f>=100&&f<1000)
f=f+100;
if(f>=1000&&f<10000)
f=f+1000;
if(f>=10000&&f<50000)
f=f+10000;
if(f==50000)
{
f=0;
w=1;
}
}
display_data(u,f,range,duty,w);
if(w==1) //按键递增,KHZ级别
{
if(f<100)
f++;
if(f>=100&&f<1000)
f=f+100;
if(f>=1000&&f<10000)
f=f+1000;
if(f==10000)
{
f=0;
w=0;
}
display_data(u,f,range,duty,w);
}
break;
case 2: //递减
if(w==0)
{
if(f<100)
f--;
if(f>=100&&f<1000)
f=f-100;
if(f>=1000&&f<10000)
f=f-1000;
if(f>=10000&&f<50000)
f=f-10000;
if(f==65535)
{
f=10000;
w=1;
}
}
display_data(u,f,range,duty,w);
if(w==1) //按键递减,KHZ级别
{
if(f<=10000)
f=f-1000;
if(f>100&&f<=1000)
f=f-100;
if(f<=100)
f=f--;
if(f==0)
{
f=50000;
w=0;
}
display_data(u,f,range,duty,w);
}
}
if(r==4)
{
r=0;
sub_menu1(temp1);
break;
}
if(flag==1) //////////////////////////////
{
delay(200);
flag=0;
while(TI) ;
SBUF=w;
while(!TI);
TI=0;
for(i=0;i<5;i++)
{
while(TI) ;
SBUF=numf[i];
while(!TI);
TI=0;
}
while(TI) ;
SBUF=0xbb;
while(!TI);
TI=0;
for(i=0;i<4;i++)
{
while(TI) ;
SBUF=numr[i];
while(!TI);
TI=0;
}
while(TI) ;
SBUF=0xcc;
while(!TI);
TI=0;
for(i=0;i<2;i++)
{
while(TI) ;
SBUF=numd[i];
while(!TI);
TI=0;
}
}
}
break;
case 1: //幅度大小设置
//调用函数获得数值,然后显示
while(1) //调用函数获得数值,然后显示
{
r=keyscan();
switch(r)
{
case 1:
range=range+2;
P10=~P10;
display_data(u,f,range,duty,w);
break;
case 2:
if(range>=2)
range=range-2;
display_data(u,f,range,duty,w);
break;
}
if(r==4)
{
r=0;
sub_menu1(temp1);
break;
}
if(flag==1) /////////////////////////
{
delay(200);
flag=0;
while(TI) ;
SBUF=w;
while(!TI);
TI=0;
for(i=0;i<5;i++)
{
while(TI) ;
SBUF=numf[i];
while(!TI);
TI=0;
}
while(TI) ;
SBUF=0xbb;
while(!TI);
TI=0;
for(i=0;i<4;i++)
{
while(TI) ;
SBUF=numr[i];
while(!TI);
TI=0;
}
while(TI) ;
SBUF=0xcc;
while(!TI);
TI=0;
for(i=0;i<2;i++)
{
while(TI) ;
SBUF=numd[i];
while(!TI);
TI=0;
}
}
}
break;
case 2: //占空比设置
//调用函数获得数值,然后显示
while(1) //调用函数获得数值,然后显示
{
r=keyscan();
switch(r)
{
case 1:
duty++;
if(duty==100)
duty=0;
display_data(u,f,range,duty,w);
break;
case 2:
if(duty>=1)
duty--;
display_data(u,f,range,duty,w);
break;
}
if(r==4)
{
r=0;
sub_menu1(temp1);
break;
}
if(flag==1) /////////////////////////////
{
delay(200);
flag=0;
while(TI) ;
SBUF=w;
while(!TI);
TI=0;
for(i=0;i<5;i++)
{
while(TI) ;
SBUF=numf[i];
while(!TI);
TI=0;
}
while(TI) ;
SBUF=0xbb;
while(!TI);
TI=0;
for(i=0;i<4;i++)
{
while(TI) ;
SBUF=numr[i];
while(!TI);
TI=0;
}
while(TI) ;
SBUF=0xcc;
while(!TI);
TI=0;
for(i=0;i<2;i++)
{
while(TI) ;
SBUF=numd[i];
while(!TI);
TI=0;
}
}
}
break;
}
break;
/* case 4: //返回上一级菜单
main_menu(temp);
break; */
}
if(t==4)
{
t=0;
temp1=0; //跳出一级子菜单后,temp1=0;
main_menu(temp); //跳出一级子菜单后,显示进入时的主菜单;temp为进入主菜单选中时进入一级子菜单的标志
break;
}
}
//last_form(temp);
break;
case 4: //返回主菜单
main_menu(temp);
break;
}
}
}
void inx()interrupt 0
{
flag=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -