找回密码
 立即注册
查看: 128|回复: 7

学习记录HC【1】Ai8051U深度入门到32位51大型实战教学视频

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 2025-6-5 00:06:54 | 显示全部楼层 |阅读模式
【选芯片起因】
由于我接了朋友的一个项目需要用单片机做一个遥控器,通过Lora方式无线控制PLC设备的动作。在我们欧大师的推荐下,了解了这款Ai8051U国产单片机芯片。
我主要是在职业学校教工业机器人(ABB、FANUC、KUKA...)、PLC(西门子、三菱、台达...)的,接朋友这个项目,完全是因为想自己多学点东西。
【回顾以前】
(1)我第一次接触单片机应该是这个模块(单片机的PLC(三菱梯形图)):

单片机的PLC(三菱梯形图)

单片机的PLC(三菱梯形图)

当时PLC还是蛮贵的,偶然一次机会知道有这种国产的单片机的PLC,而且还可以用三菱的编程软件直接编程,然后把梯形图程序下载到单片机里,然后IO的使用基本和三菱PLC的使用一样。当时这个我觉得太牛了。
(2)我第一次认真了解单片机是这个模块(欧大神自己设计制作的单片机学习板):

欧大神自己设计制作的单片机学习板

欧大神自己设计制作的单片机学习板

这个是我朋友欧大神自己设计制作的单片机学习板,当时得他送给我一块,我现在一直保留着,觉得今后还会用得上,但是一放就是十多年了,板子上已经积灰了。记得在2011年暑假,也没有什么地方去,就自己泡在实验室对着网上的资料一个个实验跟着做,从一个LED灯的点亮到后面能让数码管显示数字,还没有学到中断、定时器这些东西。那个暑假过得非常充实。
(3)再学单片机(正规网上卖的实验盒):

正规网上卖的实验盒

正规网上卖的实验盒

那个暑假过后的几年,由于工作原因没有时间再继续学习单片机,所以单片机记忆也就停留在暑假中。2019年我想再提升下自己的编程能力就主动和单位提出要带单片机比赛所以后来就用了网上卖的实验盒来带学生训练,这个盒子的资料很丰富,每个部分的电路原理图,每个芯片的手册资料,每个实验的原代码都有,在这些资料的加持下我边学边指导学生训练,在这个过程中,也得到了欧大神的大力支持,我学了点阵的显示,矩阵按钮的控制,数码管的动态扫描,还做了一个简易的时钟可以通过按钮来调节时间参数。当时定时器、中断让我折腾了好长一段时间。最终我指导的学生获得了省赛三等奖的成绩。

获奖成绩

获奖成绩

【感想】
从一个学PLC的转到学工业机器人再转到学单片机我觉得这一路磕磕绊绊也算有点收获,这离不开欧大神的引领,他肯定经常在这个论坛逛,但是这里是新手村,可能来看到的机会不多。只是想表达对他的感谢。然后我想表达就是我们在职业学校教学生,我觉得就要多用国产的东西,不管是工业机器人、PLC、还是单片机等,虽然大家都知道目前还是国外的产品占主流,但是这也有一个企业传承的问题,因为之前的前辈都用这个,有现成的代码只要在这个基础上修改就行了,因此现阶段想大面积换国产是不现实的。但是只要我教的学生里今后有涉及到设计,如果他刚刚开始的选型就是选择国产,那这个齿轮就开始往好的方向旋转了。我坚信国产会越来越好的。
前面啰嗦了一大堆.....下面回归正题-----学习记录(不是买不起,而是“白嫖”更有性价比)
【学习记录】
今晚看了两集
第一集主要做了这个Ai8051U芯片的介绍,以及他特别厉害的几个功能都实际演示出来了。
第二集主要是介绍了这个学习实验箱的硬件以及软件环境的搭建。在跟着教程安装完c251v560.exe这个软件后,进行PJ,我遇到了一个坑。。。。使用KEIL_Lic的时候时间总是2020年的,过期了。因为我以前装过keil,都自带了lic,我就直接用了,发现都PJ失败,后来看到PDF教程里的lic界面不太一样,于是我就去网上找了另一个版本同时也向大家推荐一个好用的搜索网址:https://metaso.cn/search/8618615 ... D%E5%9C%B0%E5%9D%80。这个也是朋友推荐给我的,我觉得非常好用。然后就顺利找到和教程里一样的工具,后面就顺利PJ了。后面的几个软件安装都很顺利,由于目前没有实验箱,只能跟做到这里。
最后谈谈我看完两集后的感想:
1、视频教程详细,配套资源多,论坛活跃,我觉得我这个项目稳了。
2、可能我会按欧总讲的,等够80芯愿后,换一块“擎天柱-AI8051U转89C52-DIP40核心功能板”然后把需要的硬件进行搭建好,进行程序编写和测试,功能都OK了再进行PCB板子的设计。
3、可能我后面会重点看和项目相关的内容,其他和项目无关的暂时跳过。
4、借用AI工具协助完成项目。
今天的学习就到这里。


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 2025-6-6 11:31:30 | 显示全部楼层
学习记录HC【2】
第三集:点亮第一颗LED灯
总体感觉:非常保姆级的教程,适合0基础的小白,真正做到照着视频做就一定能出一样的效果。
(1)过程中讲了一些软件的设置(按下Tab软件跳4格等等)
(2)还很贴心的用“打人”讲执行一次和死循环的区别
(3)还讲了电路的原理,特别让我印象深刻的讲到三极管原理,速记方法,看箭头,电源从正指向负,开关打开
(4)对照实物打开摄像头,看读者看到真实的效果
(5)对ISP工具的使用,单片机的IO口可以快速的设置然后把代码复制出来使用
第四集:USB不停电下载
总体感觉:一开始把整个效果通过摄像头直接演示,让读者知道最后的效果是怎么样的。很详细的教了整个过程,包括程序移植,代码的注释,根据手册查找相关资料。确实这样方便很多,以前都是每次下载都要给单片机断一次电。
(1)在官网下载所要的文件ASM是汇编文件,CDC和HID,大神推荐用CDC。我才知道有.lib库文件,这个是一个封装好的很多个.c和.h文件,是加密的。给别人使用,但是别人不知道代码。
(2)介绍的中断和查询模式的区别,查询方式是高效稳定的模式。

(3)移植关键部分到工程: 添加头文件--USB初始化函数(ib+.h库实现)--命令参数--打开P_SW2寄存器和IE2寄存器(只打开一个位!)

(4)或等于(|=)讲解非常详细,不改变原来的位,想改变哪位就或等于哪位
总体感觉就是通过USB中断来实现不断电下载单片机程序。
今天学习到这里。明天继续。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 2025-6-7 09:10:31 | 显示全部楼层
学习记录HC【3】
第五集,C语言基础
1.C语言USB-CDC串口之printf函数的实现
如何使用printf,现场演示。
提炼了几点不停电下载程序经常容易错的几个地方。
#define  替换名   被替换名   
*fmt
2.数的进制:2进制、10进制、16进制
十进制1-15对应十六进制1-F
3.数据的基本类型
默认最大32位,如果要用64位需要增加一个头文件
4.C语言常用运算符
全局和局部变量的解释
位运算符大概听懂了,但是要能灵活运用还需要自己多做几次练习。后面用到再练习
截图202506070909496680.jpg
截图202506070909533361.jpg
截图202506070909573863.jpg
截图202506070910013861.jpg
截图202506070910044490.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 2025-6-8 22:47:53 | 显示全部楼层

学习记录HC【4】
第六集,I/O输入输出
GPIO:通用输入输出端口。高电平就是1接近电源电压,低电平就是0V。
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTAzMDk3fGFkM2VkOGQ3fDE3NTAwMjM5MjB8MHw%3D
IO高电平最大输入多少呢,要根据芯片的参数资料。比如电源电压是5.5V,其他的高电平就不能超过5.5+0.3=5.8V,如果电源电压是3.3V,那其他引脚高电平就不能超过3.6V。不能随便接其他电源。
通过PnM1和PnM0组合,可以配置出四种I/O工作模式:准双向口,推挽输出,高阻输入,开漏模式。
实验箱用3.3V
输入低电平要低于0. 99V,输入高电平要高于1.18V。
按键输入检测:
按钮的原理图,
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTAzMDk4fDM1OTE4ZTlhfDE3NTAwMjM5MjB8MHw%3D
任务里按钮的定义和我之前学的不一样,为什么可以直接P32?之前我学的是sbit S3=P3^2;这个地方有疑惑。
还有机械按钮的消抖,我还是比较喜欢用欧大神的方案;
#include <reg51.h>
sbit k1=P1^0;  //定义k1按钮的引脚
void main(void)//申明一个无返回值的主函数
{
bit k11,syck1;//申明两个位变量(位变量只有0和1两个状态)
   while (1)//死循环
   {
        k11=k1;//先把k1按钮的状态读到k11变量,防止由于单片机扫描太快导致前面判断的时候读取了一次引脚状态,后面保存状态的时候又读取了一次,就有可能会导致两次读取引脚的时候是不一致的。
         if(k11==0 && syck1==1)//如果按钮按下(k11==0),按钮的上一次状态是没有按下(syck1==1)
         {
            P2=~P2;//P2口的状态反转
            }
            syck1=k11;//把k11变量状态给到syck1变量。这里的作用其实就是把按钮没有按下前的状态记录下来,当按钮按下后,这里的syck1就==0了,保证了IF里面的代码只会执行一次
      }
}
作业由于没有机器,所以没有办法验证。暂时不提交,等核心板到了再补。
截图202506082247366162.jpg
截图202506082247519971.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 7 天前 | 显示全部楼层
学习记录HC【5】
第七集,定时器中断
【定时器的介绍】
通过一个循环灯的闪烁,加一个按钮按下动作说明,单核运行,没有办法实现同时,只能引入定时器中断。
通过ISP工具快速生成定时器中断的初始化函数和定时器中断函数。把灯的闪烁代码放到定时器中断函数里面,按钮的按下还是在while死循环里。
【定时器的应用】
很详细的对照每个参数介绍了定时器的配置过程。并且如何定时3秒与TL0和TH0的值之间的关系,很很清楚的计算出来。
【函数的定义、申明、调用】
如果函数在main后面,就需要申明,如果在main前面就不需要函数申明。
总体感觉讲得蛮细的,照着做没什么问题。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 6 天前 | 显示全部楼层
学习记录HC【6】
第八集,定时器周期性调度任务
1.周期性任务介绍
2.文件的创建(.c和.h)
3.结构体的介绍
4.结构体数组的周期性任务调度

LED1 0.3秒闪一次,LED2 0.6秒闪一次,LED3 0.9秒闪一次
typedef struct
    {
        u8 Run;               //任务状态:Run/Stop
        u16 TIMCount;         //定时计数器
        u16 TRITime;          //重载计数器
        void (*TaskHook) (void); //任务函数
    } TASK_COMPONENTS;  
   
static TASK_COMPONENTS Task_Comps[]=
{
//状态  计数  周期  函数
    {0,      1,       1,     执行功能},         
    {0,     10,     10,    执行功能},      
};   
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 5 天前 来自手机 | 显示全部楼层
学习记录HC【7】
定时器周期性调试任务
问题回顾:
1、U的大小写问题
2、“;”分号的中文和英文状态
3、少了大括号(查错的时候双击那条错误,找到错误的地方或者是往上一行就是报错的地方)
4、大括号不对齐
5、调试助手的时间问题
【周期性任务介绍】

任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED3 0.9秒取反一次


通过一个变量计数,假设这个变量1ms自加一次,加到300即为300ms,加到600就是600ms;计数到达后重新清0;
数组的介绍:
由原来的u16 Count_300\u16 Count_600\u16 Count_900改为u16 Count_ms[3]={0,0,0}
for指令的介绍
任务2:数组点亮LED,实现流水灯

注意事项:
LED是0点亮,1熄灭
数组长度需要把握好
流水灯移动的时间

这个任务的完成主要是先把每个灯亮的位16进制做好,存在数组里,然后定时器依次去+1,做好控制,当>7变量清零就可以实现流水灯。
今天先学到这里。
总体感觉老师讲得很细,基本照着做就能实现。但是也要注意,这些方法是老师提供的,其实想拓展自己的思维,要想更多的方法来实现同样的功能。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-15 21:22:55
已绑定手机

1

主题

10

回帖

71

积分

注册会员

积分
71
发表于 昨天 22:11 | 显示全部楼层
学习记录HC【8】
定时器周期性调试任务2(这两天出差了。。。一定没有时间学习更新学习记录)
任务3:按键1按一下,LED通过数组移动一下;
注意事项:
按键不能在通过while判断是否按下松开了
可以通过按键按下计数
按下按钮不能一直在while里面,这个方法不行了。采用定时器的方式。
通过定时器的周期性的调用,实现按钮消抖,串口持续打印输出,流水灯显示三个任务的同时并行工作。

.c和.h文件的创建
这个功能是把常用的函数或者头文件放到对应的.C和.H文件里面,这样代码可以优化和简洁些。
结构体数组的周期性任务调度
这个结构体类似把多个变量合成一个复合体,这种方式我之前没有接触过,感觉是做一些大项目的时候会很方便。我这里听得也是比较模糊,没太听懂。只是感觉这样会比较灵活。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 05:45 , Processed in 0.147536 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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