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

第一课 序言《AI8051U的特点》

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

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 13:05 | 显示全部楼层
机械按键按下或者松开有抖动,一般在20ms内。

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

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

使用道具 举报 送花

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

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 13:12 | 显示全部楼层
就是说,延时函数的依据是必须有:

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松开
                        }
               
                }


        }
       
}


回复

使用道具 举报 送花

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

3

主题

202

回帖

347

积分

中级会员

积分
347
发表于 前天 13:20 | 显示全部楼层
最后就是课后练习:

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-17 13:02 , Processed in 0.110714 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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