在判断中,只用P8口的灯切换OK。但加入P1口的流水灯,程序就死了。只显示P1口的灯亮,按键切换不起作用
原理图附上:
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在判断中,只用P8口的灯切换OK。但加入P1口的流水灯,程序就死了。只显示P1口的灯亮,按键切换不起作用
原理图附上:
把P1^7启动中断,换成P2^2口来启动就OK。(查了一下寄存器,前面的问题可能是进行了位的操作,有一些位没做输出。(小白之见--仅供参考))
我之后把由P1^7,引起的中断,换成了由P2^2口来引起中断 ,程序就正常了。所以P1口的位操作可能哪块有问题
还有一个奇怪的现象是,如果num为0时程序执行的不是P8口接的那个灯,而是接P1口的灯时程序直接进入死机状态,
num = s%3;
switch(num)
{
case 0: P1OUT =BIT1;
case 1:P1OUT =BIT2;//程序一运行,就执行到这,直接挂死。(* *)
case 2:P8OUT = BIT1;
}
现象为直接执行了case1的程序之后就挂了,按键也不起作用,之后调试时查了一下寄存器的值,可能跟哪个值冲突了。
需要break语句跳出。
如果这样的话我觉得这样写个逻辑是否更清楚:
if(num%2) // num % 2 == 1
{
P1OUT |= BIT1; // OUTPUT 1
}
else
{
P1OUT ^= ~BIT1; //OUTPUT 0
}
敬请参考
还有个建议,switch 函数一般最后还有个default:break;防止跑飞。
你是泡灯的话,确实需要关掉所有灯后,然后置位。
很高兴看到你解决此问题。
yunlai qiu 说:最后的总结
问题总结:
之后就是各种尝试,把num为0时换成了P8口好,又到P1口时game了,其中遇到各种死胡同,比如寄存器的值,跑飞、、、、,绕了一圈,回来,终于把位操作与加上,没注意switch(感谢Maka Luo的帮忙),又改正了一下,终于回到正规了
下图:(灯依次点亮)
再前面加一个,前一个端口的信号取反,一与就OK;
完整版如下:
sleep