
#include <intrins.h>
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i
while(ms--)
{
for(i = 0i <120i++)
}
}
main()
{
unsigned char LED
LED = 0xfe //0xfe = 1111 1110
while(1)
{
P2 = LED
delayms(250)
LED = LED <<1 //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 == 0x00 ) {LED = 0xfe } // 0xfe = 1111 1110
}
}
有问题的那个程序u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)
等到执行到 while(!ReadValue)//等待按键被放开 这条指令时
数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10))//等待按键被放开
另外因为你只读取了一次按键状态,所以下面那么多一堆软件消除抖动的程序白写了。
综上,正确的程序在每个判断的时刻都要重新读取下按键状态。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)