void KeyScan(unsigned char * idata KeyID)
{
KeyNowValue=P2&0xf8;
if(KeyNowValue==0xf8) //如果没有按键
{
if(KeyOperate_flag)
{
KeyOperate_flag=0;
KeyTimecnt=0;
}
if(KeyLongOperate_flag)
{
KeyLongOperate_flag=0;
KeyTimecnt=0;
}
}
else if(KeyNowValue==KeyLastValue) //按键值等于上次的按键值,有两种情况,1、短按键,不操作,2、长按键
{
KeyTimecnt++;
KeyLastValue=KeyNowValue;
if(KeyOperate_flag) //只响应一次值
{ KeyOperate_flag=0; }
if(KeyTimecnt>=500)
{
KeyLongOperate_flag=1;
KeyTimecnt=0;
}
}
else // 第一次按键值就进行操作
{
*KeyID=KeyNowValue;
KeyOperate_flag=1;
}
}
void Key_Operate(unsigned char * idata KeyNum)
{
//unsigned char * idata KeyNum;
//KeyScan(KeyNum);
switch(*KeyNum)
{
case 0x78: //S5按下 运行键
resetjud=0;
DACCON=DACCON |0x08; //00001000 0选择DAC为12位的,0为DAC1为0-Vref DAC0处于正常模式
DAC_SEND();//DAC输出为0
P3|=0x08; //P3^3=1,停止信号不输出
P3&=0xdf; //P3^5=0;输出运行信号
KeyOperate_flag=0;
break;
case 0xb8: //S4按下 停止键
resetjud=1; //标志位
DACCON=DACCON&0xf7;// DAC0强制归零
P3|=0x20;//P3^5=1,运行信号不输出
P3&=0xf7;//P3^3=0,输出停止信号
KeyOperate_flag=0;
break;
case 0xd8: //S3按下 '+’键
temp_s3=1; //写入FLASH/EE 标志位
if(KeyOperate_flag)
{
da_data+=precision1;//step=1
KeyOperate_flag=0;
}
else if(KeyLongOperate_flag)
{
da_data+=precision2 ; //step=5
}
if(da_data>=3276)
da_data=3276;
if(resetjud==1) //stop flag
{
counterdis=1; // flag
if(status3==0) //conrtoal signal of current
getdata1=da_data*1500/4095; //14V/1500A
else if(status4==0)
getdata2=da_data*1250/4095; //14V/1500A
}
else if(resetjud==0)
DAC_SEND();
break;
case 0xe8: //S2按下
temp_s4=1;
if(KeyOperate_flag)
{
da_data-=precision1;
KeyOperate_flag=0;
}
else if (KeyLongOperate_flag)
{ da_data=da_data-precision2;}
if(CY)
da_data=0;
if(resetjud==1) //
{
counterdis=1;
if(status3==0)
getdata1=da_data*1500/4095; //7V/2000A
else if(status4==0)
getdata2=da_data*1250/4095; //7V/2000A
}
if(resetjud==0)
DAC_SEND();
break;
case 0xf0: //S1按下 远控键
P3|= 0xd0; //输出远控信号P3^5=0
temps1=1;
if(tempstatus==3)
tempstatus=0;
switch(tempstatus)
{
case 0: //模式1 远控恒流
status3=0;
KeyOperate_flag=0;
break;
case 1: //模式2 远控恒压
status4=0;
KeyOperate_flag=0;
break;
case 2: //模式3
status1=0; //输出运行信号
KeyOperate_flag=0;
break;
}
break;
}
}
请问这个程序1、有啥问题没有,编译没有错误但是运行不出结果。
2、这样按键思路是不是可以,还有其他好的按键思路没
此帖出自
小平头技术问答
"编译完就运行成功"是基本不可能的,有啥问题得你说啊
2、这样按键思路是不是可以,还有其他好的按键思路没
把不相干的部分注释掉,先看看按键的逻辑对不对,这个总是要的.
程序不完整.
一周热门 更多>