找回密码
 立即注册
楼主: YangHY

第一课 序言《AI8051U的特点》

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 09:02 | 显示全部楼层
看施密特触发器:

截图202512150902161939.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 09:08 | 显示全部楼层
端口的施密特触发器控制器
截图202512150906428711.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 09:11 | 显示全部楼层
接着看按键输入检测:

截图202512150911264374.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 09:14 | 显示全部楼层
实际就是改变IO口的电压:

截图202512150914074435.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 10:32 | 显示全部楼层
看看任务1的代码:

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 10:42 | 显示全部楼层
关于按键检测:
截图202512151042345013.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 11:14 | 显示全部楼层
怎么检测按键松开?

截图202512151114517960.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 12:30 | 显示全部楼层
这里冲哥演示如何调试程序:

按钮不听话:

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位

这样我们在串口打印出来看看,为什么按键不听话!
截图202512151235458083.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 12:54 | 显示全部楼层
虽然我们没有松手,但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松刑

                   }




截图202512151258424790.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-12-15 07:56:11
已绑定手机

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 13:03 | 显示全部楼层
这样就貌似正常了,但还是有个小问题的……………

按键输入检测
截图202512151303305811.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-17 14:35 , Processed in 0.114429 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表