找回密码
 立即注册
查看: 394|回复: 11

ai8051U视频学习打卡

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-17 02:46:35 | 显示全部楼层 |阅读模式

之前有学习过 stc89c52rc这个芯片 自己做了一些有趣的小项目 这次又想做 一个新的项目 因为知识量不够 就来论坛学习 没想到现在stc已经发展的这么牛了 真的非常开心和为祖国自豪

刚好看到有活动 而且我确实也需要学习这个芯片 简直事太棒了 我看是要先学3课再申请试验箱

特此前来学习并且打卡

开头那句话真的非常振奋人心

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

交流Q群:884047237

1.jpg

第一课 简单功能展示和简介

2.jpg

主要特点如下

1屏幕显示和视频播放 优化QSPI和Flash读写功能
可以让图像刷新非常快 可以播放视频 非常连贯

具体操作看 图3图4

2 I2s的录放音功能做全了

3PWM_DMA 更好的兼容了
可同时控制1000多颗2812的灯

4频谱分析仪 有了硬件浮点乘除单元可更好的实现
用I2s的录放音实现主要是运算非常快实时显示

5手写计算器
主要是手写输入

6QSPI,PWM移相 硬件乘除 单精度浮点

图3 播放flash要选串行flash编辑器

3.jpg

图4 选读取ID然后拆除芯片 点打开多文件 软件就能自动给上传 最后点编程数据

4.jpg

芯片加载程序之后就能自动播放视频了 而且画面还很流畅!

简介如下 我太久没有接触这些了 现在都内置usb了 而且内存和程序存储空间都很大!太方便了!

5.jpg

最后我想问一下 这个丝印上面是 stc8051u 和 ai8051u 有什么区别吗?是不是只是改了一些丝印呢 因为我没有找到 stc8051u的数据手册

回复

使用道具 举报 送花

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

1

主题

65

回帖

595

积分

高级会员

积分
595
发表于 2025-1-17 07:28:41 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:127
  • 最近打卡:2025-05-06 09:09:24
已绑定手机

2

主题

106

回帖

282

积分

中级会员

积分
282
发表于 2025-1-17 08:27:04 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-17 17:53:43 | 显示全部楼层

学习完了第二课了

还是那句话

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

首先看一下 开发板箱的硬件

整体

1.jpg

然后是具体的硬件介绍 正面

2.jpg

集成的功能还挺多的 就是外围的一些器件没有 比如link1d和示波器表笔还有小屏幕 不过后期再买也行无所谓了

然后看看背面

3.jpg

然后是软件部分了

4.jpg

安装一个编程软件和2个扩展 最后下载一些周边资料

去stc官网下载

5.jpg

按keil
按isp最新版 可以添加头文件
要不再keil创建工程的时候 没有对应的u的型号
我之前就没有安装 工程没法创建

keil专断插件扩展用 因为这个u的中断很多原始的不支持

最后下载实验包和手册这些资料

安装C251 根据图片教程做 可以联系销售经理要 论坛也行

用isp添加头文件

6.jpg

7.jpg

8.jpg

添加中断

10.jpg

9.jpg

下载资料包 里面有开发箱的说明和试验实例

11.jpg
下载第一个程序

12.jpg

给单片机烧录程序
先连usb和电脑

13.jpg

再选好对应的u的型号 然后 按p32拉低电平

14.jpg

再给单片机断电 就有 ubs写入的口了

15.jpg

根据文件 选 8还是32bit指令集

16.jpg

irc 频率再代码里面找 再功能说明里面

点下载编程就行了 OK了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-17 22:13:38 | 显示全部楼层

第三课 点亮一个led

还是那句!

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

创建工作文件 Keil uVision里面

1.jpg

选择工程 选新工程创建

2.jpg

当然这是我想做的工程 所以我起了这样的名字 工程的文件管理系统也是我个人的习惯

3.jpg

配置工程用的u

4.jpg

ok之后 文件夹里面会多一些文件和文件夹

5.jpg

点这三个方块可以配置工程文件的关系 每一个文件夹里面 都建立一个对应的 .c文件(直接再硬盘里面建立就行了)

6.jpg

配置好了之后 左侧就这样了

7.jpg

我们要对工程 进行一些设置

8.jpg

根据手册设置 这四项

9.jpg

再把这两项设置了

10.jpg

关于引用文件的符号解释

11.jpg

用官方的isp软件生成一个 头文件 后面程序会调用 这里就生成这个 ai8051u.h方便后期调用

12.jpg

设置一下文字的标准 省的以后 是都乱码 我以前写的程序 中文注解就都是 乱码。。。。

13.jpg

写程序 调用头文件 主函数和一个while循环 死循环

14.jpg

语句放在不同位置的 意义是不一样的

15.jpg

点亮第一个led的 程序 当然我现在还没有开发箱子 所以先截图视频的

16.jpg

这个我以前没有接触过 这里要给io口进行状态配置

17.jpg

在官方的软件里面 能看到 针脚的实际物理位置 这个很方便

18.jpg

对于命令的解释 先要配置端口 在调用端口 不能直接上来就用 觉得有点麻烦

19.jpg

不过官方软件给了 自动生成配置端口的命令 这个比较方便

准双向可以满足绝大多数需求

20.jpg

我看了一下还有功能 脚的切换 我主要需要就是用 那些通信协议 我觉得这个很方便 不过 我没有找到 ai8051u这个系列 随便找了一个别的先演示一下

21.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-19 02:36:55 | 显示全部楼层

第四课 自动程序下载

还是那句话

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

1.jpg

isp软件设置

2.jpg

今天的主要任务

3.jpg

要去官网下一下这个usb文件库

4.jpg中断命令的作用区域和查询命令的作用区域

我个人感觉 中断模式是 u被动接受 扎寻模式是 u自己在需要的时候主动去查询

5.jpg

把这个头文件和lib文件 放在工程文件的根目录下面

6.jpg在自己的工程里面 添加lib文件和头文件

7.jpg
函数的查询功能

8.jpg参看示例程序 开始写代码

9.jpg
u和电脑直接是有密码机制的 这里使用默认的 也可以自己去配置

10.jpg
开启特殊功能寄存器 开启之后才能用 这里是手册说明

11.jpg

开启特殊功能寄存器 开启之后才能用

12.jpg

设置不要 把没有调用的 函数作为警告

13.jpg把p2口的led全部点亮

14.jpg

程序成功 也可以自动烧录了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-19 22:05:01 | 显示全部楼层

第五课

还是那句话

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

1.jpg

这棵主要是学一些 c语言的基础知识 数据类型 运算符号 逻辑运算符号 数据类型这些 还有CDC 通讯

2.jpg
这个我和视频里的不一样 估计是更新了 而且默认是开启的状态

直接可以调用printf函数

3.jpg
#define的解释 就是替换一下名字

4.jpg
这里就是一些 特殊的付好了 s是字符串变量 可以把输出的元素灵活话

5.jpg
这是示例的代码 就是收到了数据 就发这个设置好的 这段字符串

6.jpg
关于这个cdc通讯的串口

8.jpg
关于窗口的更多配置

9.jpg
这里有个新知识点 强制转换 这个学习到了

11.jpg

10.jpg

各种运算符号 和 真假判断 非零都是真

12.jpg

我自己的代码设计

13.jpg

实验结果

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-20 03:04:36 | 显示全部楼层

第六课

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

1.jpg

本节的概述

2.jpg

gpio的状态 这个开漏模式不是很懂

3.jpg

消除按键抖动 以及特殊功能寄存器配置

我自己写了代码 跑起来很奇怪 不知道为什么

我是擎天柱板子 不知道哪里出问题了

#include "ai8051u.h"
#include "stc32_stc8_usb.h"
#include "intrins.h"   //

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
u8 xxx = 5;



void Delay10ms(u8 xx1)	//@24.000MHz
{
	unsigned long edata i;
	while(xx1)
	{
		_nop_();
		_nop_();
		_nop_();
		i = 59998UL;
		while (i) i--;
		xx1--;
	}

}


u8 anjian_check(void)
{
	u8 x=5;
	while(P32==0||P33==0)
	{
		Delay10ms(2);//@24.000MHz
		if(P32==0)
		{
			x=1;
		}
		else if(P33==0)
		{
			x=2;
		}

	}
	while(P32==0||P33==0)
	return x;
}



void main(void)
{

		WTST =0;//设置程序指令延时参数
		EAXFR =1;//扩展寄存器(XFR)访问使能
		CKCON=0;//提高访问XRAM速度
	  P0M1 = 0x00;   P0M0 = 0x00;   //设置为推挽输出
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口


		P23= 1;
		P21= 1;
		usb_init();
		IE2 = 0x80;	//sub允许中断
		EA = 1; //总中断
		while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

	while(1)
	{
			  if (bUsbOutReady)
        {
          //  USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
      
					printf("stc 真的很棒 \r\n");
      
				usb_OUT_done();
       }
				xxx = anjian_check();
				if(xxx==1)
				{
					printf("P32被按下了");
					P21= !P21;
					xxx=5;
				}
				else if(xxx==2)
				{
					printf("P33被按下了");
					P23= !P23;
					xxx=5;
				}
				else
				{
					continue;
        }
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-20 03:08:14 | 显示全部楼层

串口这里一直在发数据

4.jpg

然后p21灯一直常亮

我估计这个脚是一直在翻转。。。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-04-12 16:18:03
已绑定手机

10

主题

32

回帖

350

积分

中级会员

积分
350
发表于 2025-1-20 07:23:28 | 显示全部楼层

第七课了

还是那句话

哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!

1.jpg

介绍了定时器的作用 和运行的机制

2.jpg

软件设置定时器

3.jpg
定时器运行的中断程序

4.jpg

定时器开启的位置 后期我编程也是先声明了这个

5.jpg
有的字符需要加这个符号才能正常显示

6.jpg
函数的命名规则和意义

我按照课后作业写了程序 又遇到相同的问题了

微信截图_20250120071942.png

它一直侦测到 按键被按下了 我也很无语

也就是一直是按键2被按下的状态 我也很无语 大家帮我研究研究把

灯一直是亮的 就是总是刷新定时器的时间 根本不会灭

不管按那个键它都判断是 2号键被按下了 也就是P33

#include "ai8051u.h"
#include "stc32_stc8_usb.h"
#include "intrins.h" 

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void Delay20ms(void);	//@24.000MHz

void Timer0_Init_1s(void);		//1秒@24.000MHz
void Timer0_Init_2s(void);		//2秒@24.000MHz

u8 anjian_check(void);

//void Timer0_Isr(void) interrupt 1;
u8 najian=0;
u8 najian_state=0;
u8 gongDe=0;
void main(void)
{
		WTST = 0;  										//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
		EAXFR = 1; 										//扩展寄存器(XFR)访问使能
		CKCON = 0; 						  			//提高访问XRAM速度

	  P0M1 = 0x00;   P0M0 = 0x00;   //设置为推双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
		P32=1;
		P33=1;
		usb_init();
		IE2 = 0x80;	//sub允许中断
		EA = 1; //总中断
		while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置


//	while(1)
//	{
//			  if (bUsbOutReady)
//        {
//          //  USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
//      
//					printf("stc 真的很棒 \r\n");
//      
//					usb_OUT_done();
//        }
//	
//			//P2=0;
//	}
	while(1)
	{
		najian = anjian_check();
		if(najian==1)
		{
			najian_state = !najian_state;
				if(najian_state)
				{
					printf("功德单倍时间\r\n");
				}
				else
				{
					printf("功德双倍时间\r\n");
				}
	
		}
		if(najian==2)
		{
			if(najian_state)
			{
				gongDe=gongDe+1;
				printf("功德+1,当前功德:%d\r\n",(int)gongDe);
				P2=0;
				Timer0_Init_1s();		//1秒@24.000MHz
			}
			else
			{
				gongDe=gongDe+2;
				printf("功德+2,当前功德:%d\r\n",(int)gongDe);
				P2=0;
				Timer0_Init_2s();		//2秒@24.000MHz
			}
		}
	}
}






void Delay20ms(void)	//@24.000MHz
{
	unsigned long edata i;

	_nop_();
	_nop_();
	i = 119998UL;
	while (i) i--;
}


u8 anjian_check(void)
{
	u8 x=0;
	if(P32&&P33==0)
	{
		Delay20ms();	//@24.000MHz
		if(P32==0)
		{
			x=1;
		}
		else
		{
			x=2;
		}
	while(P32&&P33==1)
		{
			Delay20ms();
		}
	}

	return x;
}






void Timer0_Init_1s(void)		//1秒@24.000MHz
{
	TM0PS = 0x1E;			//设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
	AUXR &= 0x7F;			//定时器时钟12T模式
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xFC;				//设置定时初始值
	TH0 = 0x03;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0 = 1;				//使能定时器0中断
}


void Timer0_Init_2s(void)		//2秒@24.000MHz
{
	TM0PS = 0x3D;			//设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
	AUXR &= 0x7F;			//定时器时钟12T模式
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xFC;				//设置定时初始值
	TH0 = 0x03;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0 = 1;				//使能定时器0中断
}


void Timer0_Isr(void) interrupt 1
{
	P2=1;						//关闭P2 LED
	TF0 = 0;				//清除TF0标志
	ET0 = 0;				//关闭定时器0中断
}




点评

麻烦整个代码打包一个压缩包在上传吧~  详情 回复 发表于 2025-1-21 13:39
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-6 11:32 , Processed in 0.139884 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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