找回密码
 立即注册
查看: 1526|回复: 8

关于Ai8051u的学习历程

[复制链接]
已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
发表于 2026-3-30 15:50:56 | 显示全部楼层 |阅读模式
首先,在小程序中添加芯片型号,keil仿真设置
截图202603301606264384.jpg
接着打开keil软件,按照如下步骤进行操作,选择所采用的芯片
截图202603301610009096.jpg
1.新建项目
截图202603301559339332.jpg

2.选择项目路径
截图202603301559572715.jpg
前两步操作之后的结果如下
截图202603301600382133.jpg

3.新建main主函数
截图202603301600506745.jpg


选择编译的语言,c语言,保留路径如上


4.接下来点击魔法棒,选择target选项,对cpu模式进行选择,选项卡中的cpu mode进行选择,由于AI8051限制我们选择c251即可,同时勾选右侧的4字节
截图202603301601094873.jpg
所有设置如下图
截图202603301601193452.jpg
接着切换output选项卡,生产hex文件,由于代码在64k下,选择hex80即可,同时勾选右侧文件生成create
截图202603301601335545.jpg
5.下载头文件,使用官方Aicube-isp小程序进行下载,注意芯片型号一定要选对,同时选择文件格式keil的c语言模式
截图202603301601449736.jpg
保存文件至main函数所在的文件夹里,文件名为所选用单片机型号,如“Ai8051u.h”
截图202603301602057058.jpg
保存成功后显示如下
截图202603301602181339.jpg

添加库文件,将库文件移动至keil创建项目的目录下
屏幕截图 2026-03-30 154023.png
在魔法棒中切换到c251选项卡,include paths,添加库文件,头文件路径
截图202603301603079928.jpg
编写代码如下
截图202603301603202045.jpg
6.打开烧录小程序,进行烧录,首先打开程序文件,obj中选中hex文件
截图202603301603411613.jpg
在烧录箱中进行下载,具体操作为先进行长按断电,长按p32,再松开电源开关,接着松开p32,即可进行下载,通信地址变成如下时可以进行下载(左下角点击下载)
截图202603301603592617.jpg
按键如上图
截图202603301605374238.jpg
烧录按键如上图

下载成功后如图
截图202603301604186133.jpg
点自动下载,之后再次断电下载(如上操作),每当文件代码有变动时,都需要重新断电下载(注意查看hex文件是否为最新编译的结果)
截图202603301604445461.jpg
最终实验效果如下,圈中的灯亮起
截图202603301604549975.jpg




回复

使用道具 举报 送花

已绑定手机

14

主题

175

回帖

1135

积分

版主

积分
1135
发表于 2026-3-31 08:31:05 | 显示全部楼层
要 做到 USB不停电下载;
要 尝试 AiCube 图形化自动配置生成程序工具;
推荐优先看的:  
printf_usb("Hello World !\r\n")及
USB不停电下载, 演示视频链接:
https://www.stcaimcu.com/thread-19077-1-1.html

下载 最新的 AiCube-ISP-V6.96T 或以上版本软件 !

深圳国芯人工智能有限公司-工具软件

下载 最新的 USB库函数,永远用最新的 USB库函数 !
深圳国芯人工智能有限公司-库函数
下载 最新的 用户手册 !
下载 最新的 上机实践指导书 !

下载 最新的 Ai8051U 用户手册
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf

下载 最新的 Ai8051U 实验指导书,
有 AiCube 图形化自动配置生成程序工具使用说明
https://www.stcaimcu.com/data/do ... %AF%BC%E4%B9%A6.pdf

推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接



回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-3-31 16:37:05 | 显示全部楼层
第四节

前置工作:官网下载usb库函数,使用的硬件仍为Ai8051u试验箱,接着如下操作

1.将上一节的全部文件复制到下载的usb示范文件中

点击cdc查询模式的文档



将如下两个文件复制到示范文件中,主要是lib文件和.h文件



左键双击group1,添加lib文件,如果查找不到lib文件,则有可能是文件查找范围没有切换,需要切换至全部文件





调用新添加的.h文件

最终所有代码如下


编译结果显示重复引用,得在烧录小程序里更改官网名定义,此为官方定义自动进入下载的字符


自定义更改后依旧失败



删除部分段落后,再无错误,删除char定义的三行代码后,上半部分段落如下,下半部分保持不变


接着进入烧录小程序打开最新程序文件,obj中找到hex文件

下载成功如下显示

硬件显示为如下图








第六节
首先打开前面的代码,修改如下,删除定义的X,A赋值语句

截图202603311539138525.jpg
不按时灯不亮
截图202603311542484342.jpg
按下之后灯亮,实验1结束
截图202603311543156874.jpg
实验2代码所需修改部分如下
截图202603311548411022.jpg
灯常亮
截图202603311549019273.jpg
按下之后灯灭
截图202603311549195349.jpg
实验3代码如下
截图202603311627586203.jpg

但是上面这串代码实操时,灯会有一瞬间出现频闪,想要解决这个问题可以通过新增一段延时函数来修正,具体修改如下

屏幕截图 2026-04-01 102802.png
截图202604011032002692.jpg
在烧录小程序中进行如下更改,记得更新hex文件
截图202604011040529508.jpg







回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-3-31 16:38:59 | 显示全部楼层
第五节

首先把上一个帖子的代码打开,打开h文件(在头文件引用用将双引号内.h文件选中,右键open document打开文件),将define printf—HID前面的斜杠去掉,意思为将此功能打开,修改完毕之后重新编译

接着打开main主函数,对如下部分进行修改,“\r\n”为换行字符,注意,双引号为英文状态输入法下才有效


注意串口更换,否则就会像我这样。同时注意在程序文件打开最新的hex文件


更换串口usb-cdc串口模式,才能进行下载,下载完成效果如下



展示成果如下



如果想要进行简单运算,首先需要对代码进行修改,定义参数


赋值


修改输出内容,改为你想让它执行的运算


打开烧录软件,在keil中更新最新hex文件,在烧录中打开


下载


发送数据,得到如下结果


硬件显示如下


如果需要进行判断则对部分代码进行如下修改


将keil生成的hex文件更新,再重新烧录,发送数据后显示如下




















回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-4-1 16:27:39 | 显示全部楼层
第七节

1.灯每3秒闪烁一次,按下p32时进行计数

首先在烧录小程序中调用时钟代码,硬件选择和生成的时钟代码频率要一样,都选择24MHz
截图202604011628264285.jpg




生成c语言代码,插入到如下的位置

截图202604031059116899.jpg
截图202604031059304547.jpg

再对时钟进行初始化

截图202604031059477107.jpg
为时钟初始赋值

截图202604031101095998.jpg



再将中断函数插入,对if语句进行修改
截图202604031102278463.jpg


进入烧录小程序,进行修改如下
截图202604030950191381.jpg

打开最新hex,进行烧录
截图202604030951527149.jpg

按下按键p32,打开串口工具之后即可观察到如下情况

截图202604031052573603.jpg


2.按下之后三秒灭
截图202604031456063813.jpg

先将灯打开,对其进行初始化,计数3秒之后打断,停止计数灯灭
截图202604031456415568.jpg

3.先为跑马灯进行初始状态设定

截图202604031517506722.jpg

将时钟改为500毫秒,替换原来三秒的时钟
截图202604031518054944.jpg

当按下p32,灯开始闪烁时,对时钟进行初始化,如果按下p32灯没有闪烁,则关闭定时器,两个灯都关掉
截图202604031525294811.jpg


截图202604031518562816.jpg














回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-4-7 10:15:33 | 显示全部楼层
第八节



1,首先依旧使用上一节的代码,对LED初始状态进行初始化,同时修改时钟延迟时间

屏幕截图 2026-04-07 101220.png
定时器频率都改为24MHz,修改如下



打开定时器初始化,对if语句进行如下修正

截图202604071016556741.jpg

对中断函数进行如下修改

截图202604071017563500.jpg


实物每个灯每次3ms亮一次
截图202604071018567187.jpg


2,不使用冗杂的语句,使用for语句实现延迟

首先定义数组
截图202604071501434456.jpg


再定义计数变量
截图202604071502582024.jpg

撰写新的延迟3ms的代码
截图202604071503596643.jpg

实物为第一个灯实验现象为间断几秒的频闪

3,跑马灯

用数组进行对灯的点亮顺序进行一个说明,接着将u8 num进行初始化
截图202604071535358517.jpg




对if语句进行修改,当时钟计数大于等于500次时
将状态至零,p0-p7引脚的灯状态取反,num继续加,从零加到7,大于7时,num又清零
截图202604071537529580.jpg

由于在for语句中已经进行清零,上面修改的中断函数还需要进行修改

截图202604071543044966.jpg


最终实验现象为p0-p7的灯依次亮起熄灭,跑马灯成功



4,

定义按键按下持续时间,修改定时器,24MHZ,24位,12T,延迟10ms
截图202604071650144061.jpg



对for语句进行如下修改,使得每1s将所要打印的东西输出
每10ms判断p32是否按下,如果按下,对按键按下次数进行累加
当按下等于五次时,数组累加,若按下次数小于五次则直接清零

截图202604071653414889.jpg
截图202604071701598921.jpg


实验现象为,按下累计五次之后,灯的亮灭便切换了一种别的形式,未按满五次则灯一个一个亮灭
多次长按之后数组亮灭更换成如下状态,每按5次亮起的灯均不相同
截图202604071705046729.jpg





5,

对函数进行如下修改,将main里的部分函数抽出,重新建立c和h文件,使得主函数看起来更简洁

截图202604081102209601.jpg

截图202604081102417148.jpg

截图202604081103015818.jpg

截图202604081103199374.jpg


增减c和h文件至编写main的同一路径下。
点击左上角任务栏的空白纸张,可以看到新建了一个文件
此时,将其保存至这个项目同一路径下
截图202604081105333872.jpg
分别命名为config.h和config.c


将上一步骤的这些函数复制到c文件中
截图202604081107283655.jpg

再对h文件进行编写如下
截图202604081108024716.jpg

两个文件都进行保存,编译

双击source group1 将c文件添加至项目中,此时项目下拉会有三个文件
截图202604081109512188.jpg

之后编译会发现我们编写的文件找不到这是因为,没有定义查找路径

添加路径。点击魔法棒,切换到c251,标蓝位置右侧省略号展开添加
截图202604081111544444.jpg

展开后如下,点击红色叉叉左边进行目录添加,出现如下空白之后点击其右侧的省略号
找到main函数所在文件,不需要具体找到哪个文件,只要保证文件在此目录下即可。
选择,添加,ok完成
屏幕截图 2026-04-08 105056.png

再次进行编译,就不会有错

6,
再新增两个文件,专门放管脚有关的代码

io.c代码如下,遗漏的部分照葫芦画瓢自行补充
截图202604091043058018.jpg

io.h的代码如下

截图202604091044092027.jpg

task.h的代码,或有更新
截图202604091044586369.jpg

task.c的代码,或有更新
截图202604091045244751.jpg

截图202604091045489032.jpg

截图202604091045599433.jpg

config的代码如下
截图202604091047158324.jpg
c文件如下
截图202604091047582951.jpg

截图202604091048169052.jpg

main函数如下
截图202604091048448924.jpg
截图202604091048599304.jpg
截图202604091049129331.jpg
截图202604091049243931.jpg

编译之后烧录,发现程序无法运行,进行代码更改,main中删除所选蓝色部分
















截图202604091100048192.jpg
回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-4-9 15:40:06 | 显示全部楼层
第九节


1.数码管的静态显示

首先打开烧录工具,点击工具,字库生成工具

截图202604091539055124.jpg



打开右侧数字8,LED数码管字体,将所需要点亮的灯点上
截图202604091541002600.jpg


这里我们默认即可,点击确定,所需要的代码就会生成

截图202604091544311777.jpg

接着将代码填入IO.C的数组中
截图202604091545494666.jpg
接着在io.h中定义引脚
截图202604091553252769.jpg
对io.c进行如下修改,将595的数据发送出去Seg_Task 是显示刷新入口。Display_Seg 负责组装两位(或两片)数据。Send_595 负责底层时序发送。RCK 置 1 置 0 负责最终把数据 “亮” 出来。


io.c中进行如下修改(《=二者之间不要有空格,此处有误)
截图202604091701506804.jpg

截图202604100922127630.jpg

io.h中进行函数定义
截图202604100930075249.jpg

在主函数中进行函数定义
截图202604100933239272.jpg

在task.c中新增任务
截图202604100937497405.jpg


烧录之后显示p0-p2仍然在亮,影响后续工作运行,将其注释掉
截图202604100947548741.jpg
实验结果如下图
截图202604100952461646.jpg

io.c中新增位码数组
截图202604100958211651.jpg
对数码管的任务进行修改

截图202604101118594984.jpg

编译,实物显示仍然为上图

截图202604101122308493.jpg

2.

在io.c文件中进行对数码管的段码和位码刷新
截图202604101131046746.jpg
在task.c文件中进行对刷新时间的修改
截图202604101133125153.jpg

编译后显示错误,在io.c文件中进行如下修改
屏幕截图 2026-04-10 115025.png

再次编译烧录,实物可以完整显示所有数字

3,时分秒

在io.C中进行对时分秒显示的代码编写
截图202604101509593415.jpg

截图202604101510187567.jpg

实物表现为00-00-00(手机问题,拍不出来)
截图202604101517359448.jpg

实际时分秒累加
在io.c中进行
截图202604101528492730.jpg
再将图上所选蓝色在io.h文件中进行声明
截图202604101529435776.jpg

再在task.c文件中进行调用
截图202604101533535680.jpg

实物即为一个差不多可以称为真正的计时器了(依旧是手机问题)

截图202604101535157134.jpg



对io.c中进行如下修改
截图202604101558568416.jpg

io.h对PLED_40进行函数声明
截图202604101559517141.jpg

在·task.c中进行任务增添
截图202604101602007507.jpg

编译,打开烧录软件,接上擎天柱,长按p32再按power,松开power再松开p32
查看设置有没有问题(进入write模式)
截图202604101621432504.jpg

打开最新hex下载

打开调试仿真接口
截图202604101622326336.jpg

接口设置,确定
截图202604101622597734.jpg

注意打开的串口是否为外接的串口,我的为com3,自行辨别
截图202604101625572774.jpg

再打开调试仿真,擎天柱DIP
可以看到点的灯亮起如下
截图202604101628217900.jpg

让擎天柱跑流水灯则需要在io.c中进行如下修改
截图202604101636125597.jpg

实物图如下
截图202604101637015204.jpg

对io.c进行如下修改,使得虚拟LED灯得以运行
截图202604131545194230.jpg

在io.h中进行声明
截图202604131458264385.jpg

在task.c中新增任务
截图202604131500151632.jpg

在烧录软件中进行八位数码管仿真,如下步骤点击
调试仿真接口》8段数码管
截图202604131544477920.jpg
就会如下显示
截图202604131546558781.jpg

调整串口就可以显示虚拟数码管定时器
















回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-4-13 16:18:47 | 显示全部楼层
第十节
在官网下载最新库函数,usb库函数,解压之后将此文件移植到我们编写代码的目录下
截图202604131620507328.jpg

再打开isp烧录小程序,添加型号和头文件到库
截图202604131622165895.jpg

首先对config.h进行修改引用的头文件

截图202604131618551788.jpg

将AI_sub的头文件打开,将printf函数打开
截图202604131631406950.jpg
将原本的lib文件移除
屏幕截图 2026-04-13 163234.png

再将新的lib文件添加进来
截图202604131632545081.jpg

将不需要的代码注释掉task.c
截图202604131649542011.jpg
io.h中也注释掉
截图202604131650305670.jpg


将所有报错的代码全部注释掉(未定义等的代码)


进入烧录小程序中,打开最新hex,下载(选用24MHz)


1, p2流水灯在io.c中如下编写
截图202604141437503951.jpg

完整代码如下
截图202604141511493315.jpg

调度虚拟仿真接口显示如下,左侧灯闪烁,右侧跑流水灯
截图202604141514047082.jpg

2,左侧按键计数p32,右侧按键计数p33(新增全局变量u 16 key vol)
io.c中进行编写
截图202604141540218910.jpg
截图202604141528205990.jpg

将此任务打开
截图202604141530102878.jpg

在io.c中进行如下编写,使得左侧数码管显示p32按下次数,右侧数码管显示p33按下次数
截图202604141541217505.jpg
声明
截图202604141544273479.jpg

调用该任务
截图202604141545099624.jpg

打开虚拟数码管,p32和p33都尝试按下
截图202604141549087071.jpg
左侧为p32按下次数,右侧为p33按下次数

3,按下数字按键在数码管显示对应的按键时钟
在io,c中进行如下编写
截图202604151009432288.jpg

将上面写的task.c中的任务二(task。2)屏蔽

main.c中进行变量声明,从别处调用
截图202604151010026768.jpg
任务3的代码如下,在task.c中进行编写任务3
截图202604151010166380.jpg

在io.h中进行变量声明
截图202604151010362208.jpg

打开虚拟键盘和虚拟8数码管
截图202604151024117947.jpg


回复

使用道具 举报 送花

已绑定手机

2

主题

18

回帖

89

积分

注册会员

积分
89
 楼主| 发表于 2026-4-15 10:29:33 | 显示全部楼层
第11节,矩阵按键
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 12:11 , Processed in 0.085449 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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