看施密特触发器:
端口的施密特触发器控制器
接着看按键输入检测:
实际就是改变IO口的电压:
看看任务1的代码:
//任务1:按下P32按钮灯亮,松开P32按钮灯灭;
if( P32==0 ) //判断P32按钮是否按下
{
P00 = 0;//P00端口输出0V,共阳极LED点亮
}
else
{
P00 = 1;//P00端口输出3.3V,共阳极LED熄灭
}
关于按键检测:
怎么检测按键松开?
这里冲哥演示如何调试程序:
按钮不听话:
state=!state;
P00 = state;
//变量state取反 010101
printf("state:%d\r\n",(int)state):I
打印函数是要求16位,我们定义的是8位:
#define u8 unsigned char//8位无符号变量(0-255)
#define ul6 unsigned int//16位无符号变里(0-65535)
u8 state = 0;//初始状态
所以要:
(int)state
意思是强制转换为16位
这样我们在串口打印出来看看,为什么按键不听话!
虽然我们没有松手,但state是在0和1跳变,从串口打印明显看到010101
我们要的是按一下,改变一下!
所以就用到:while(P32 == 0); //等待P32松开
任务3:按一下灯亮,按一下灯灭; if(P32== 0 ) //判断P32按钮是否按下,0为按下 {
state= !state; //变里取反010101 P00= state;//P00端口输出0V,共阳极LED点亮
printf("state:%d\r\n", (int)state); while(P32== 0); //等待P32松刑
}
这样就貌似正常了,但还是有个小问题的……………
按键输入检测