
单片机识别5路电平并通过串口在电脑上(串口调试助手)显示问题,感觉很简单,其实很复杂!请帮忙呀
uintfp=0;voidsenddata(ucharda)//其他略去{SBUF=da;while(TI==0);TI=0;}voidselectout(ucharue...
uint fp=0;
void senddata(uchar da) //其他略去
{
SBUF=da;
while(TI==0);
TI=0;
}
void selectout(uchar ue)
{
uchar a;
a=(ue|0xe0);
switch(a)
{
case 0xf0:
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("kaka");
fp=0;
senddata(0xff);
senddata(0xff);
senddata(0xf0);
senddata(0xff);
senddata(0xff);
break;
case 0xe2:
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("nini");
fp=0;
senddata(0xff);
senddata(0xff);
senddata(0xe2);
senddata(0xff);
senddata(0xff);
break;
case 0xe4:
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("xixi");
fp=0;
senddata(0xff);
senddata(0xff);
senddata(0xe4);
senddata(0xff);
senddata(0xff);
break;
default:
if(fp==0)
{
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("None");
fp=1;
senddata(0xdd);
}
break;
}
delay1(20);
}
void main()
{
temp=0x00;
delay(100);
init1602();
delay(10);
ini();
deng=1;
hangone();
temp=P2;
delay(50);
while((temp|0xe0)!=(P2|0xe0))
{
temp=P2;
delay1(20);
}
senddata(0x03); //为什么要加这句发送语句
delay(20);
selectout(temp);
delay(20);
senddata(0x02); //为什么要加这句发送语句,不加的话显示None
while(1)
{
delay(100);
if((temp|0xe0)!=(P2|0xe0))
{
delay1(20);
while((temp|0xe0)!=(P2|0xe0))
{
temp=P2;
delay1(20);
if((temp|0xe0)==(P2|0xe0))
{
delay(10);
senddata(0x01); //为什么要加这三句发送语句,不加的话显示None
senddata(0x01);
senddata(0x01);
selectout(temp);
delay(10);
}
}
}
delay1(40);
}
}
若已上电再给5路电平,则没问题都能出,若上电时已经有5路电平已经接上的话,不写上注明的那三句,则有5路电平输入也显示None,5路电平变化才恢复正常?为什么?急呀! 展开
void senddata(uchar da) //其他略去
{
SBUF=da;
while(TI==0);
TI=0;
}
void selectout(uchar ue)
{
uchar a;
a=(ue|0xe0);
switch(a)
{
case 0xf0:
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("kaka");
fp=0;
senddata(0xff);
senddata(0xff);
senddata(0xf0);
senddata(0xff);
senddata(0xff);
break;
case 0xe2:
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("nini");
fp=0;
senddata(0xff);
senddata(0xff);
senddata(0xe2);
senddata(0xff);
senddata(0xff);
break;
case 0xe4:
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("xixi");
fp=0;
senddata(0xff);
senddata(0xff);
senddata(0xe4);
senddata(0xff);
senddata(0xff);
break;
default:
if(fp==0)
{
write_com(0x01);
delay(10);
hangone();
delay(10);
hangtwo("None");
fp=1;
senddata(0xdd);
}
break;
}
delay1(20);
}
void main()
{
temp=0x00;
delay(100);
init1602();
delay(10);
ini();
deng=1;
hangone();
temp=P2;
delay(50);
while((temp|0xe0)!=(P2|0xe0))
{
temp=P2;
delay1(20);
}
senddata(0x03); //为什么要加这句发送语句
delay(20);
selectout(temp);
delay(20);
senddata(0x02); //为什么要加这句发送语句,不加的话显示None
while(1)
{
delay(100);
if((temp|0xe0)!=(P2|0xe0))
{
delay1(20);
while((temp|0xe0)!=(P2|0xe0))
{
temp=P2;
delay1(20);
if((temp|0xe0)==(P2|0xe0))
{
delay(10);
senddata(0x01); //为什么要加这三句发送语句,不加的话显示None
senddata(0x01);
senddata(0x01);
selectout(temp);
delay(10);
}
}
}
delay1(40);
}
}
若已上电再给5路电平,则没问题都能出,若上电时已经有5路电平已经接上的话,不写上注明的那三句,则有5路电平输入也显示None,5路电平变化才恢复正常?为什么?急呀! 展开
2个回答
展开全部
单片机初始化问题,单片机识别电平是通过对比才得到结论的,就是将某端口的电压与一个电压值对比。但是必须有点平变化,你没电平变化单片机就不检测端口电压,当然什么都输出不了。你在初始化时加一个中断,每隔一段时间,就中断一次并轮流检测个端口电平(当有电平转换时,单片机会自动跳到中断)。
感觉你家那几句话没啥用,骗人的!
再有就可能是设个看门狗,有错就自动跳出就行
单片机初始化问题,单片机识别电平是通过对比才得到结论的,就是将某端口的电压与一个电压值对比。但是必须有点平变化,你没电平变化单片机就不检测端口电压,当然什么都输出不了。你在初始化时加一个中断,每隔一段时间,就中断一次并轮流检测个端口电平(当有电平转换时,单片机会自动跳到中断)。
感觉你家那几句话没啥用,骗人的!
再有就可能是设个看门狗,有错就自动跳出就行
感觉你家那几句话没啥用,骗人的!
再有就可能是设个看门狗,有错就自动跳出就行
单片机初始化问题,单片机识别电平是通过对比才得到结论的,就是将某端口的电压与一个电压值对比。但是必须有点平变化,你没电平变化单片机就不检测端口电压,当然什么都输出不了。你在初始化时加一个中断,每隔一段时间,就中断一次并轮流检测个端口电平(当有电平转换时,单片机会自动跳到中断)。
感觉你家那几句话没啥用,骗人的!
再有就可能是设个看门狗,有错就自动跳出就行
展开全部
单片机初始化问题,单片机识别电平是通过对比才得到结论的,就是将某端口的电压与一个电压值对比。但是必须有点平变化,你没电平变化单片机就不检测端口电压,当然什么都输出不了。你在初始化时加一个中断,每隔一段时间,就中断一次并轮流检测个端口电平(当有电平转换时,单片机会自动跳到中断)。
感觉你家那几句话没啥用,骗人的!
再有就可能是设个看门狗,有错就自动跳出就行了。
感觉你家那几句话没啥用,骗人的!
再有就可能是设个看门狗,有错就自动跳出就行了。
追问
能不能详细一点呀!最好来几句程序可以么?麻烦了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询