📄 newlcdtest_1127.c
字号:
{
uchar keyvalue=0,i;
EA=0;
keytemp=KEY&0x3f;
keyjudge:
if(keytemp!=keyvalue)//键盘防抖
{
for(i=0;i<10;i++)
delay(30000);
keyvalue=keytemp;
goto keyjudge;
}
else if(keytemp<0x3f)
goto keyrun;
keyrun:
switch(keytemp)//根据key的值判断哪个键按下,执行相应的函数
{
case 0x3e:
turn_up();
break;
case 0x3d:
turn_down();
break;
case 0x3b:
turn_left();
break;
case 0x37:
turn_right();
break;
case 0x2f:
turn_affirm();
key_judge();
if(flag_affirm==1)
flag_adjust=0;
else
flag_adjust=1;
flag_affirm=0;
break;
case 0x1f:
turn_cancle();
key_judge();
if(flag_affirm==1)
flag_adjust=0;
else
flag_adjust=1;
flag_affirm=0;
break;
default:
break;
}
key_judge();//判断按键是否弹起,弹起重新判断有无按键按下,未弹起等待其弹起
count_TF2=0;//重新开始计数
RCAP2H=0x00;
RCAP2L=0x00;
TR2=1; //重新允许定时器2
en_vfd=1;
ET2=1;
EA=1;
}
////////////////////////UART中断服务程序////////////////////
void interrupt_UART(void) interrupt 4
{
EA=0;
RI0=0;
if(SBUF0!=num)
goto ret;
buf[0]=SBUF0;
sre();
ret:
EA=1;
}
///////////////////////计时器2中断服务程序////////////////////
void interrupt_T2(void) interrupt 5
{
EA=0;
TF2=0;
count_TF2+=1;
if(count_TF2==1687)
{
TR2=0;//禁止定时器2
ET2=0;
screen_off();
en_vfd=0;
count_TF2=0;
}
EA=1;
}
//////////////////接收数据块///////////////////////////////////
void sre(void)
{
ulong k;
char l=0;
int n=0;
while(!RI0); //等待一帧数据接收完成
RI0=0; //清接收完成标志位
buf[1]=SBUF0; //取出接收缓冲区的数据
while(1)
{
for(l=2;l<10;l++)
{
while(!RI0) //等待接收下一个字节
{
n++;
if(n>20000)goto receive_over; //计数超时,没有后续字节,数据接收结束
}
RI0=0;
buf[l]=SBUF0; //数据接收未完成,继续接收
n=0;
}
}
receive_over:
n=0;
if(l!=0x05) //字节长度不正确返回错误信息
{
SBUF0=ERR_LEN;
while(!TI0);
TI0=0;
goto reti;
}
REN0=0; //正确进行相应操作
/*if((buf[1]&0x7f)<=15) //buf[1]低7位表示工作参数的地址号
{
if((buf[1]&0x80)==0) //buf[1]7bit表示命令种类:0:设置工作参数;1:读取工作状态
{
unite24(buf[2],buf[3],buf[4]);
if((mil_data>=0)&&(mil_data<=0xffff00))
{
SBUF0=0x00; //设置数据正确
while(!TI0);
TI0=0;
}
else
{
SBUF0=0x20; //设置数据非法
while(!TI0);
TI0=0;
}
}
else //读取工作状态
{
SBUF0=0xff;
while(!TI0);
TI0=0;
}
}
else
{
SBUF0=0x80; //参数地址非法
while(!TI0);
TI0=0;
}*/
switch(buf[1]&0x7f) //判断工作参数地址号
{
case 0x00: //参数存储地址号为0
if((buf[1]&0x80)==0)//设置工作参数
{
switch(buf[4])//数据段buf[4]:恢复默认值(0),保存设置(1),调用工作参数(2),其他字节任意
{
case 0:
sent(PARADEFAULT,0x00,0x00,0x00);
flag_store=0;
para[0]=flag_store;
FlashWrite(para,1);
para_default( );
str_right();
break;
case 1:
store_para();
FlashWrite(para,17);
str_right();
break;
case 2:
FlashRead(para,17);
para_stored();
str_right();
break;
default: //数据非法
SBUF0=ERR_DATA;
while(!TI0);
TI0=0;
break;
}
}
else //命令非法
{
SBUF0=ERR_COM;
while(!TI0);
TI0=0;
}
break;
case 0x01: //左声道电平,LAUDIO:buf[3]为正(0)负(1)标志字节,buf[4]为数值(0~100)
if((buf[1]&0x80)==0)//设置工作参数
{
if((buf[4]<=100)&&(buf[4]>=0)&&((buf[3]==0)||(buf[3]==1)))
{
if(en_audio==0)//非静音
{
flag_symbol=((buf[3]==0)?(flag_symbol&0xfe):(flag_symbol|0x01));
laudio_signal=buf[4];
if(flag_symbol&0x01)//音量为副
{
if((laudio_signal%10)==0)lweight=lsignal[10-laudio_signal/10];
else
{
k=(lsignal[9-laudio_signal/10]-lsignal[10-laudio_signal/10])/10;
lweight=lsignal[10-laudio_signal/10]+k*(laudio_signal%10);
}
}
else
{
if((laudio_signal%10)==0)lweight=lsignal[10+laudio_signal/10];
else
{
k=(lsignal[10+laudio_signal/10]-lsignal[11+laudio_signal/10])/10;
lweight=lsignal[10+laudio_signal/10]-k*(laudio_signal%10);
}
}
dispart24(lweight);
sent(LAUDIO,msb,isb,lsb);
str_right();
}
else //静音,音量不能更改
{
SBUF0=ERR_AUD;
while(!TI0);
TI0=0;
}
}
else //数据非法
{
SBUF0=ERR_DATA;
while(!TI0);
TI0=0;
}
}
else //读取工作状态
{
SBUF0=flag_symbol;
while(!TI0);
TI0=0;
SBUF0=laudio_signal;
while(!TI0);
TI0=0;
str_right();
}
break;
case 0x02: //右声道电平,RAUDIO
if((buf[1]&0x80)==0)//写数值
{
if((buf[4]<=100)&&(buf[4]>=0)&&((buf[3]==0)||(buf[3]==2)))
{
if(en_audio==0)//非静音
{
flag_symbol=((buf[3]==0)?(flag_symbol&0xfd):(flag_symbol|0x02));
raudio_signal=buf[4];
if(flag_symbol&0x02)
{
if((raudio_signal%10)==0)rweight=rsignal[10-raudio_signal/10];
else
{
k=(rsignal[9-raudio_signal/10]-rsignal[10-raudio_signal/10])/10;
rweight=rsignal[10-raudio_signal/10]+k*(raudio_signal%10);
}
}
else
{
if((raudio_signal%10)==0)rweight=rsignal[10+raudio_signal/10];
else
{
k=(rsignal[10+raudio_signal/10]-rsignal[11+raudio_signal/10])/10;
rweight=rsignal[10+raudio_signal/10]-k*(raudio_signal%10);
}
}
dispart24(rweight);
sent(RAUDIO,msb,isb,lsb);
str_right();
}
else //静音,音量不能更改
{
SBUF0=ERR_AUD;
while(!TI0);
TI0=0;
}
}
else //数据非法
{
SBUF0=ERR_DATA;
while(!TI0);
TI0=0;
}
}
else //读取工作状态
{
SBUF0=flag_symbol;
while(!TI0);
TI0=0;
SBUF0=raudio_signal;
while(!TI0);
TI0=0;
str_right();
}
break;
case 0x03: //导频频偏
if((buf[1]&0x80)==0)//设置工作参数
{
unite24(buf[2],buf[3],buf[4]);
if((mil_data>=0)&&(mil_data<=20))
{
pilot_range=mil_data;
pilot_vol=0x10ab3*pilot_range;
dispart24(pilot_vol);
sent(PILOT,msb,isb,lsb);
str_right();
}
else //数据非法
{
SBUF0=ERR_DATA;
while(!TI0);
TI0=0;
}
}
else //读取工作状态
{
SBUF0=pilot_range;
while(!TI0);
TI0=0;
str_right();
}
break;
case 0x04: //调制度,CONT
if((buf[1]&0x80)==0)//设置工作参数
{
unite24(buf[2],buf[3],buf[4]);
if((mil_data>=0)&&(mil_data<=200))
{
fm_centi=mil_data;
fm_trans(fm_centi);
dispart24(cont_fm);
sent(CONT,msb,isb,lsb);
str_right();
}
else //数据非法
{
SBUF0=ERR_DATA;
while(!TI0);
TI0=0;
}
}
else //读取工作状态
{
SBUF0=fm_centi;
while(!TI0);
TI0=0;
str_right();
}
break;
case 0x05: //输出允许,EN_RF:buf[2]为射频开关,buf[3]为内外频标
if((buf[1]&0x80)==0)//设置工作参数
{
if(((buf[2]==0)||(buf[2]==1))&&((buf[3]==0)||(buf[3]==1))&&((buf[4]==0)||(buf[4]==1)))
{
en_power=buf[2]<<1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -