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

第一课 序言《AI8051U的特点》

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-15 13:05:49 | 显示全部楼层
机械按键按下或者松开有抖动,一般在20ms内。

If(按键是否按下)
{
//延时20ms消去抖动

if(按键是否按下) //按键再次确认按下
     {
//执行按键功能
while(按键是否松开):
           }
     }
截图202512151305472655.jpg
截图202512151307476105.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-15 13:12:59 | 显示全部楼层
就是说,延时函数的依据是必须有:

WTST = 0;    //设置程序指令延时参数,
        EAXFR =1;    //扩展寄存器(XFR)访问使能
        CKCON = 0;   //提高访问XRAM速度       
中的第一行,否则时间就对不上

最终的代码:

//课后任务2:按一下亮一颗灯,在按一下亮两颗灯,直到全亮(变量+加法和乘法)
               
                if( P32== 0 ) //判断P32按钮是否按下,0为按下
                {
                        Delay20ms();//延时20毫秒消抖
                        if( P32== 0 ) //判断P32按钮是否确实按下
                        {
                                state = !state; //变里取反010101
                                //LED_rksj = _crol_(LED_rksj,1);//左移一位,循环移入每次往前点亮一位
                                LED_rksj = LED_rksj<<1; //左移一位,右边补0,每次往前多点亮一位
                                P0 = LED_rksj;  //P00端口左移一位输出0V,共阳极LED点亮
                                num = num +1 ;
                                        if(num>=8)
                                        {
                                                LED_rksj = 0XFF;  //送人P0口数据
                                                num = 0 ;         //P32按键次数,
                                       
                                        }
                                        printf("state: num: %d    %d\r\n", (int)state,num);
                                while(P32 == 0); //等待P32松开
                        }
               
                }

                if( P33== 0 ) //判断P33按钮是否按下,0为按下
                {
                        Delay20ms();//延时20毫秒消抖
                        if( P33== 0 ) //判断P33按钮是否确实按下
                        {
                                state = !state; //变里取反010101
                                P0 = 0XFF;  //P00端口输出3.3V,8位共阳极LED熄灭
                       
                                printf("state: %d\r\n", (int)state);
                                while(P33 == 0); //等待P33松开
                        }
               
                }


        }
       
}


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-15 13:20:53 | 显示全部楼层
最后就是课后练习:

那么第六课就到此结束
截图202512151320376904.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:15:17 | 显示全部楼层
今天开始第07.定时器的学习!


定时器的介绍
问题:.LED三秒闪烁一下,这三秒按下按键但是没有反应了?这怎么办呢?

先看中断的概念:


截图202512180815152871.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:19:36 | 显示全部楼层
最大的问题是CPU是单核的:



定时器的介绍
问题:.LED三秒闪烁一下,这三秒按下按键但是没有反应了?这怎么办呢?答:因为MCU单核的,同一时间只能执行一个事情,没有特殊情况不能被打断。所以这里就要引入一个特殊的情况,定时器中断。

截图202512180819322912.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:22:25 | 显示全部楼层
看下面的代码:

截图202512180822229835.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:32:02 | 显示全部楼层
按照上面的代码,是3秒亮,3秒灭:

按下P32 ,在串口助手打印“按键按下”

截图202512180831598065.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:35:20 | 显示全部楼层
问题:.LED三秒闪烁一下,这三秒按下按键,但是串口没有反应了?这怎么办呢?

截图202512180834517697.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:39:34 | 显示全部楼层
答:因为MCU单核的,同一时间只能执行一个事情,没有特殊情况不能被打断。所以这里就要引入一个特殊的情况,定时器中断。
看下面:

定时器作用:
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的Delay;提高程序的运行效率和处理速度(可以打断主循环)

截图202512180840049187.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2025-12-18 08:45:06 | 显示全部楼层
可以打断主循环的延时:
截图202512180844011614.jpg
截图202512180844383059.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-1 00:43 , Processed in 0.115477 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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