YangHY 发表于 2025-12-15 09:02:19

看施密特触发器:

YangHY 发表于 2025-12-15 09:08:01

端口的施密特触发器控制器

YangHY 发表于 2025-12-15 09:11:31

接着看按键输入检测:

YangHY 发表于 2025-12-15 09:14:09

实际就是改变IO口的电压:

YangHY 发表于 2025-12-15 10:32:11

看看任务1的代码:

//任务1:按下P32按钮灯亮,松开P32按钮灯灭;       
       
                if( P32==0 ) //判断P32按钮是否按下
                {
                        P00 = 0;//P00端口输出0V,共阳极LED点亮
                }
                else
                {
                        P00 = 1;//P00端口输出3.3V,共阳极LED熄灭
                }

YangHY 发表于 2025-12-15 10:42:37

关于按键检测:

YangHY 发表于 2025-12-15 11:14:52

怎么检测按键松开?

YangHY 发表于 2025-12-15 12:30:18

这里冲哥演示如何调试程序:

按钮不听话:

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位

这样我们在串口打印出来看看,为什么按键不听话!

YangHY 发表于 2025-12-15 12:54:43

虽然我们没有松手,但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松刑
                   }



YangHY 发表于 2025-12-15 13:03:32

这样就貌似正常了,但还是有个小问题的……………

按键输入检测
页: 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28
查看完整版本: 第一课 序言《AI8051U的特点》