西西研究员推荐先看的视频
把推荐的视频看了几遍,没有实际的操作体验,理解不深。网上买来Ai8051U芯片,转接板和其他的零配件,做了一个精简版的单片机最小系统,跟着视频一步一步学着做:1.打开 AiCube-ISP-v6.96A 点击菜单栏的 AiCube ,
新建项目,勾选 USB,通用串行总线 选项,点击 创建 按钮,生成项目。
成功实现了 “printf_usb("Hello World !\r\n")及usb不停电下载” 的功能。
请您后续打卡发在同一条帖子,不同楼层下,谢谢 “第三集 点亮第一颗LED”的学习
今天学习了冲哥的视频“第三集 点亮第一颗LED”,因申请的“擎天柱”还没有拿到,试验箱的申请还需要用自己焊接的简配版最小系统板(简称小板)跟着视频照着做了一遍,顺利通过。焊接的小板:
在这个过程中有一个发现:当在电脑上插入连着小板的USB线后电脑居然自动识别出了"USB-CDC,CDC"串口(电源是接通的但是没有按下P3.2按键)。这是不是因为前次下载的“printf_usb("Hello World !\r\n")及usb不停电下载”的原因呢?此时点击“下载”还是不能下载,必须把3个全部勾选上,才可以实现“usb不停电下载”!
但是下载“点亮第一颗LED”项目后,"USB-CDC,CDC"串口就没有了,必须按下P32键接通电源才行!看来"USB-CDC,CDC"串口有“继承性”!于是把前次的程序进行修改,增加点亮LED部分,
编译下载一次后,就又可以实现“usb不停电下载”了。看来“usb不停电下载”这个方便的功能还需好好理解应用!
好的。就是以后的帖子就在“西西研究员推荐先看的视频”的帖子下,点击“发表回复”进行发帖,是吗?
另外:昨天的帖子有一个关于“usb不停电下载”的回复,还没理解,可以把这段重发一下吗?或在哪里可以找到适合初学者通俗易懂的材料。
OK可以的,参考以下视频,后续您的打卡回复都只要在本帖下面发表回复就行
推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接
https://v.stcai.com/sv/1c5eec2-197fcd9b766/1c5eec2-197fcd9b766.mp4
https://v.stcai.com/sv/1fce8086-197cf2b9dd4/1fce8086-197cf2b9dd4.mp4 第四集 USB不停电下载官方 免费+包邮 的 “擎天柱”核心板收到了,十分感谢!
小板子挺精致的,与电脑的连接使用的是“Type C”接口,板上焊接了四个按键开关,旁边分别标注了“POWER”,“nRESET”,“P32 INT0”,“P33 INT1”,其中“POWER”,“P32 INT0”两个按键开关配合,可以实现USB下载(先按下“P32 INT0”按键并保持按下,再按下“POWER”按键然后松开,再松开“P32 INT0”按键);还有两个贴片LED标注了“POWER”和“VCC”,分别指示电源接通和系统电源接通(按下“POWER”按键可以断开系统电源!),P2口焊接了8个贴片LED小灯,有了这个“擎天柱”核心板学习Ai8051U单片机就要比用自己手搓的小板方便许多,也要安全许多,避免了插针时出错。找来Type C数据线,插入电脑,板子程序就跑起来了,板子出厂预装了跑马灯程序。试着 按下“P32 INT0”按键,再按下“POWER”按键,AiCube-ISP-v6.96A软件可以扫描到 (HID1)USB-Writer。然后按照冲哥视频,先新建了一个目录“No_PWR_Off”,然后下载USB库文件,找到需要的文件拷贝到“No_PWR_Off”目录下,然后启动keil软件,打开工程,修改LED灯地址以适应擎天柱核心板,编译不通过,显示如下图:根据编译信息,在程序中,注释掉如下图所示语句,重新编译通过,下载运行成功,测试不停电下载功能都正常!后比较视频程序的文件和自己按照视频一步一步操作后的程序文件,发现视频中的库文件是旧版,而我下载的是最新版本,于是把视频的整个项目文件都原封不动的拷贝到另外的目录,再打开编译,没有问题,看来问题是出在库文件与main.c中的语句有冲突,那么使用新的库文件要如何修改呢?是不是把有冲突的语句注释掉就可以了?简单这样处理会不会有后遗症?
这几日在学习Ai8051U单片机USB不停电下载的过程中发现下载了含有“USB不停电下载功能”的程序的单片机,用电池电源供电或者USB充电线(只有电源线)供电时,程序不运行,把程序中的实现“USB不停电下载功能”的代码去掉后,再用电池或者USB充电线(只有电源线)供电,单片机就可以正常运行,不知道是什么原因。这个问题暂且放置,等学习到后面的知识后也许就有答案了。或者有大咖看到后,能为我解疑答惑!十分感谢! 第五集 C语言基础
先学习USB_CDC串口的printf函数的实现,因为这个printf可以方便快速的帮助我们打印出变量的各种信息,可以帮助我们在开发时进行快速的调试,所以在C语言基础课程开始之前,先把这个printf函数过一下。单片机怎么才能使用printf?我们只要打开USB库中的PRINTF_USB宏定义(去掉//)。
理解PRINTF的函数原型的定义:
使用的 格式字符,转义字符,和标志:
ASCII码表:
关于数的进制,数的基本类型:
变量的定义,与定义域:
C语言常用运算符:算术运算符,关系运算符:
C语言常用运算符:逻辑运算符,赋值运算符:
C语言常用运算符:位运算符,其他运算符:
printf的使用:
C语言的使用,为单片机注入智能,在这个AI的大时代,提供无穷的可能!因此,要努力学好C语言,为更好的使用Ai8051U单片机!
第六集 IO输入输出1. 什么是GPIO:General Purpose I/O Ports 通用输入输出端口;是单片机与外界交换信息的一种途径;通过端口引脚上高低电平的变化来传递和交换信息。高低电平是相对于系统的而言的,3.3v供电系统与5v的供电系统,其高低电平的电压值是不同的,需要特别注意,不同供电电压的系统之间在交换信息时,需要进行电平转换。GPIO口的4种工作模式:1.准双向口 2.推挽输出 3.高阻输入 4.开漏模式要注意各个模式的带负载能力是不同的!2. 按键输入检测与按键消抖单片机通过连接到GPIO口的按键在按下与弹起时IO口电平的变化,来检测按键。由于按键的机械特性决定了按键在按下与弹起时必然会有抖动,这个抖动会引起IO口电平的抖动,从而使得单片机产生错误动作,必须消除此抖动;通过科学的手段,测得这个抖动的时间约为20毫秒,可以通过编程延时来达到消除抖动的目的。3. 课后小练
练习一 代码如下:
/* 实验板 - 擎天柱*/#include "ai8051u.h"#include "ai_usb.h"
void Delay20ms(void) //@40.000MHz{ unsigned long edata i;
_nop_(); _nop_(); i = 199998UL; while (i) i--;}
void main(void){ EAXFR = 1; WTST = 0; CKCON = 0;P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式 usb_init(); EA = 1; while(1) { if(P32==0) { Delay20ms(); //延时20ms按键消抖 if(P32==0) { P2=0xa5; //修改 0xfe 可以控制每次按P32键亮亮灯的方式 } } if(P33==0) { Delay20ms(); //延时20ms按键消抖 if(P33==0) { P2=0x5a; //修改 0xff 可以控制每次按P33键亮灭灯的方式 } } }}
练习二 代码如下:
/* 实验板 - 擎天柱*/#include "ai8051u.h"#include "ai_usb.h"#include "intrins.h"
unsigned char cc=0xfe;
void Delay20ms(void) //@40.000MHz{ unsigned long edata i;
_nop_(); _nop_(); i = 199998UL; while (i) i--;}
void main(void){ EAXFR = 1; WTST = 0; CKCON = 0;
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式
usb_init(); EA = 1; while(1) { if(P33==0) { Delay20ms(); //延时20ms消抖 if(P33==0) { P2=cc; if(cc==0) { cc=0xff; //变量cc恢复初始值 } while(P33==0); //等待P33按键松开 cc<<=1; //变量cc左移一位,最右位补0 } } }}
第七集 定时器中断 关于本集视频定时器及函数学习后的理解,欢迎指导:视频中为了讲解定时器,举了一个妈妈炒菜,让儿子加木头添火的例子。如果把这个让儿子加木头添火改一下是不是更符合单核CPU单片机的实际情况:“妈妈:宝贝,妈妈要炒菜,你帮妈妈看着火,一分钟提醒妈妈一下,妈妈来看要不要加一根木头,不能让火熄灭了,不然菜就炒不好了。”这里的“妈妈”相当于单片机里的“单核CPU”,“儿子”相当于单片机里的“定时器”,定时器(儿子)只负责提醒CPU(妈妈),并不执行代码(加木头),代码的执行(加木头)还是要CPU(妈妈)去做。1. 单核CPU,单次只能执行一个任务,在从100数到0的过程中,如果没有别的特殊情况,不能再去做别的事情了,那么这怎么办呢?这就要引入定时器。利用单片机的一种硬件机制,对系统时钟的某种分频进行计数,一个脉冲计数一次,由于系统时钟的精确稳定性,这种计数就可以对应到相应的时间的间隔,这就是定时器了。定时器干的事情就是计数并当计数到设定值时发出一个信号,由单片机系统根据这个信号来调配程序的执行步骤;这个信号就是定时器的中断信号。所谓中断,就是打断当前正在做的事情。定时器中断就是CPU接收到定时器完成计数后发出的信号,打断正在执行的代码转而去执行另一段代码的过程。2. printf函数输出某些汉字乱码的消除在Ai8051U.pdf 2025/8/25版本的第60页进行了说明。如下图:3. 定时器运行机制详细说明如下列图:4. 定时器在使用时的定时时间的计算以及初始化程序的编写,AiCube-ISP-v6.96C(目前最新版)软件提供了很好用的工具,使用方法如下图所示:5. 函数的使用:包含函数的定义,声明,调用等步骤,参考下列图示说明:6. 课后小练:根据练习要求,先使用“AiCube-ISP-v6.96C”软件的“AiCube”工具,生成程序框架,然后在框架程序提示的相应位置编写代码:1.变量声明 :2.使用“AiCube-ISP-v6.96C”软件的“定时器计算器”工具,生成“定时器0”的10ms的初始化程序和“定时器0”的中断程序框架,复制并粘贴到keil程序中:3.编写程序其它部分实现练习要求,完整程序打包如下:
页:
[1]