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

Ai8051U学习之旅

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8060

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8060
QQ
发表于 2024-12-9 14:34:52 | 显示全部楼层
lcl*** 发表于 2024-12-8 18:49
哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!!!
第六集:I/O输入输出
学习内容:

可以先分析下,第一次执行到“ P0 = ~n;”这一行的时候n等于几
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-14 07:50:07

19

主题

208

回帖

866

积分

高级会员

积分
866
发表于 2024-12-9 15:03:25 | 显示全部楼层
电子DI*** 发表于 2024-12-9 14:34
可以先分析下,第一次执行到“ P0 = ~n;”这一行的时候n等于几

谢谢冲哥,晚上试试。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-05-14 08:53:07
已绑定手机

13

主题

1284

回帖

3077

积分

论坛元老

积分
3077
发表于 2024-12-9 16:14:35 | 显示全部楼层
lcl*** 发表于 2024-12-8 18:49
哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!!!
第六集:I/O输入输出
学习内容:

n  = (n+1)<<1;
应该先左移以为再加1吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-14 07:50:07

19

主题

208

回帖

866

积分

高级会员

积分
866
发表于 2024-12-10 16:41:29 | 显示全部楼层

冲哥指导,应该是:
   n = n+1;
   n = ~n;
   P0 = n;
   n<<1;

昨天晚上验证过,可以。新的问题是不能重复,灯全部点亮,后面按按键就没有作用来了,想不断重复,现在还没有想到办法。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-14 07:50:07

19

主题

208

回帖

866

积分

高级会员

积分
866
发表于 2024-12-10 21:02:13 | 显示全部楼层
lcl*** 发表于 2024-12-8 18:49
哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!!!
第六集:I/O输入输出
学习内容:

哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!!!
第七集:定时器中断
   学习内容:
   1、定时器的介绍
        通过实验说明用定时器的好处。
   2、定时器的应用
        任务1:LED灯3S取反一次,这期间任意一时刻按下按钮,串口打印按键次数。
        任务2:按键按下,灯点亮3S后熄灭。
        任务3:救护车灯控制器,按下报警按钮,红蓝灯交替闪烁,再次按下按钮红蓝灯熄灭。
   3、函数的声明、定义、调用

课后练习:
电子功德机:
  按下按钮1,串口显示“双倍功德时间”,再次按下按钮显示“单次功德时间”;
  按下按钮2,双倍功德时间下串口显示“功德+2,当前功德XXX”;
  按下按钮2,单倍功德时间下串口显示“功德+1,当前功德XXX”;
  功德+1时,LED点亮1S后熄灭,表示功德成功点亮;
  功德+2时,LED点亮2S后熄灭,表示功德成功点亮。


作业分5部分,前三部分完成功能,后面两部分功能不正常,LED点亮时间不对(亮灯时间基本一样)。程序如下:

void main()
{
               
        WTST = 0;                                                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXFR = 1;                                                 //扩展寄存器(XFR)访问使能
        CKCON = 0;                                                 //提高访问XRAM速度
        
        P0M0 = 0X00;
        P0M1 = 0X00;
        P1M0 = 0X00;
        P1M1 = 0X00;
        P2M0 = 0X00;
        P2M1 = 0X00;
        P3M0 = 0X00;
        P3M1 = 0X00;
        P4M0 = 0X00;
        P4M1 = 0X00;
        P5M0 = 0X00;
        P5M1 = 0X00;
        
        usb_init();                                     //USB CDC 接口配置
//  Timer0_Init();
        EA = 1;
        
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

        P40 = 0;
        
        while(1)
        {
                if (bUsbOutReady)
                        {
//                        USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                                
                                usb_OUT_done();
                        }


               
                if(P32==0)
                {
                        Delay20ms();
                        if(P32==0)
                        {

                                if(Gd_State==0)
                                {
                                        printf("单倍功德时间");
                                        Gd_State = 1;
                                       
                                        count = count + 1;
                                }
                                else//(Gd_State==1)
                                {
                                        printf("双倍功德时间");
                                        Gd_State = 0;
                                       
                                        count = count + 2;
                                }
                                
                                
                                while(P32==0);
                        }
                }
               
                if(P33==0)
                {
                        Delay20ms();
                        if(P33==0)
                        {
                                if(Gd_State==1)
                                {
                                        count++;
                                       
                                        P00 = 0;
                                        Timer0_Init();

                                        printf("功德+1 当前功德%d\r\n",count);
                                       
                                }
                                if(Gd_State==0)
                                {
                                        count = count + 2;
                                       
                                        P00 = 0;
                                        Timer0_Init();

                                        printf("功德+2 当前功德%d\r\n",count);
                                       
                                }
                                while(P33==0);
                        }
                }
               
        }

}


void Timer0_Isr(void) interrupt 1
{
        
        
        //作业
        timer++;
        if(timer==1)
        {
                timer = 0;
                P00 = 1;
                TR0 = 0;
        }
        if(timer==10)
        {
                timer = 0;
                P00 = 1;
                TR0 = 0;
        }
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-14 07:50:07

19

主题

208

回帖

866

积分

高级会员

积分
866
发表于 2024-12-11 07:58:28 | 显示全部楼层
电子DI*** 发表于 2024-12-9 14:34
可以先分析下,第一次执行到“ P0 = ~n;”这一行的时候n等于几

谢谢冲哥指导。可以第一颗灯珠可以点亮到全部点亮,但是最后一颗点亮,再按按键不能和我视频重复循环了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:132
  • 最近打卡:2025-05-14 06:29:44
已绑定手机

84

主题

305

回帖

490

积分

中级会员

积分
490
发表于 2025-1-11 14:11:36 | 显示全部楼层
感谢分享。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-14 07:50:07

19

主题

208

回帖

866

积分

高级会员

积分
866
发表于 4 天前 | 显示全部楼层

坚持学习就可以免费得到。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-14 13:39 , Processed in 0.120828 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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