找回密码
 立即注册
查看: 861|回复: 25

学习《Ai8051U教学视频》感悟及学习体会

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-1-22 21:48:43 | 显示全部楼层 |阅读模式
前几天的学习由于进错了发帖区,导致无效,感谢STC西北区客服孙经理,
为我提供了正确的发帖链接,为了表示诚意,从第一课开始学习。



                                        致敬冲哥老师!




                                  虽然有了解,还是比较惊叹!




                        六大功能,扪心自问学完以后自己能掌握几项?




             虽然经常使用,老瓶装新酒,还是要抱着空杯的心态去学习。







                                                  以上两个图是我自己比较中意的两个功能。

                                                    最后感谢冲哥,感谢孙经理!


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-1-23 19:52:19 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-1-23 20:09:57 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-1-25 01:15:02 | 显示全部楼层

学习《Ai8051U教学视频》感悟及学习体会
第三课  点亮第一颗LED
首先要感谢STC西北区客服孙经理,为我转发了
网友推荐的keilc51v9.53_downcc+C51C251环境
搭建等文件,刚好赶上冲哥的教学进程。

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=1412021598018545118&skey=@crypt_8617.jpg

讲到了第三课,就拉开了学习的距离,专业的人士
认为是幼儿园教程,没有基础的学员开始听天书了。
平心而论,冲哥讲的非常通俗,浅显而易懂,代码
加实例非常生动。

冲哥洋洋洒洒讲了34分钟,归纳起来就三件事:
一是Keil uVision 简单的配置;
二是Keil uVision文件的创建与设置;
三是实操基于Ai8051U芯片的,最简单点灯代码。

一、Keil uVision 简单的配置
1、代码注释语言的设置



按上面的方法设置,就不会乱码了。

2、Tab键的配置
留出四个空格,是编写代码一种规范,可以
利用Tab键作为快捷键完成。



如上图,将Tab size的参数设为4就可以了。

二、Keil uVision文件的创建与设置
打开AI8051U的规格书一路抄作业就行了










比着葫芦画瓢,按照规格书1、2、3跟着学就行了,会不会
英语无关紧要,因为国芯的工程师已经将创建与设置图形
化了。

三、实操基于Ai8051U芯片的,最简单点灯代码
这节课承上启下,是进入专业学习的开始,冲哥详细的讲解了
基础知识和概念,并用计算器生动形象的介绍了2进制与16进
制的关系。



冲哥还讲了一些干货

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=5989325092564173391&skey=@crypt_8617.jpg

例如上图的红色部分,对初学者就非常友好。
在课程里还讲了一些技巧。

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=1354646448529721678&skey=@crypt_8617.jpg

如上图,用AIapp-ISP软件来定义IO口的设置,既快又准确。

对于本人来讲没有太大的难度,对于我的学生则是噩梦的开始。
为了帮助学生快速的学习,我建议有条件的学员采用双屏学习。

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=43458903421139236&skey=@crypt_861758.jpg

如上图一样,跟着老师一步一步地学,若是跟前没有老师指导,
就反复看视频对照联系,根据自己的能力量力而行,不要过分
追求学习速度,因为第三课的基础打不好,以后的课程没法学。
对于英语底子差的学员建议再一个比较好用的翻译软件应急。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2025-05-03 11:09:27
已绑定手机

83

主题

291

回帖

409

积分

中级会员

积分
409
发表于 2025-1-27 17:29:28 | 显示全部楼层
感谢分享,我咋没有申请到屏幕啊,好羡慕,能够做出AI写字板的例程。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-7 20:39:48 | 显示全部楼层
               学习《Ai8051U教学视频》感悟及学习体会
                        第四集 USB不停电下载
  
          火狐截图_2025-02-07T12-00-08.420Z.png

一、课程
本节课讲了一个问题三个概念:
一个问题就是:USB不停电下载
三个概念是:      

第一个概念是: 访问XFR寄存器
      表达式是:  P_SW2 |= 0x80;
      对有基础的人来讲,可以仔细听一下;对于
初学者来讲,了解一下概念就可以了。
第二个概念是:中断
      表达式是:IE2 |= 0x80;
这个概念非常重要,必须理解。
第三个概念是:中断
       表达式是:IE2 |= 0x80;
这个概念也非常重要,必须理解。
除了掌握概念,还应该知道两者的区别
外,还应该知道两者区别。
二、实践
实践的过程非常悲催,估计是复制粘贴时字符格式改变了,
出现了下列错误:
Build target 'Target 1'
compiling main.c...
main.c(24): error C25: syntax error near 'void'
main.c(26): error C25: syntax error near '|='
main.c(30): error C25: syntax error near 'while'
main.c(30): error C25: syntax error near '1'
main.c(36): error C25: syntax error near '}'
Target not created.
Build Time Elapsed:  00:00:00
没办法,带着学生逐个敲字符,总算过了编译关。
为了印证一下课堂案例,我修改了以下代码,使用
擎天柱,Ai8051U-LQFP48 转 89C52-DIP40 核心板验证成功。

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=1040436586491261676&skey=@crypt_8617.jpg

                                         图为三灯点亮。

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=2419807430698090412&skey=@crypt_8617.jpg

                                      图为二灯点亮。

三、总结

本节课 对于没有基础的小白来讲,认真听课就完了,
想学习就直接敲代码,若是跟前没有老师帮你分析
编译错误,你就等着崩溃吧!
本节课的建议是,跟着老师开开眼界,涨一下见识,
待试验箱来了,再上机实习。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-9 20:31:49 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-9 20:59:06 | 显示全部楼层
第五课  C语言基础(续1)

三、数据的基本类型

整型(Integer Types

整型用于存储整数,根据存储范围和精度的不同,分为以下几种:

int:标准整数类型,通常占用4个字节(32位),范围大约为 -2,147,483,648 2,147,483,647
short int short:短整型,通常占用2个字节(16位),范围大约为 -32,768 32,767
long int long:长整型,通常占用4个字节(32位),范围与int相同,但在某些系统中可能为8个字节(64位)。
long long int long long:扩展长整型,通常占用8个字节(64位),范围为 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
unsigned int:无符号整型,占用4个字节,范围为 0 4,294,967,295
unsigned short int unsigned short:无符号短整型,占用2个字节,范围为 0 65,535
unsigned long int unsigned long:无符号长整型,占用48个字节,范围为 0 18,446,744,073,709,551,61564位)。
unsigned long long int unsigned long long:无符号扩展长整型,占用8个字节,范围为 0 18,446,744,073,709,551,615

1. 浮点型(Floating-Point Types

浮点型用于存储小数,根据精度不同分为:

float:单精度浮点型,通常占用4个字节,精度约为7位有效数字。
double:双精度浮点型,通常占用8个字节,精度约为15-16位有效数字。
long double:扩展双精度浮点型,占用长度和精度因编译器和平台而异,通常比double更精确。

(二)字符型(Character Types

字符型用于存储字符,实际上是以整数形式存储字符的ASCII码值:

char:字符型,通常占用1个字节(8位),范围为 -128 127(有符号)或 0 255(无符号)。
unsigned char:无符号字符型,占用1个字节,范围为 0 255
signed char:有符号字符型,占用1个字节,范围为 -128 127

(三)枚举型(Enumeration Type

枚举型是一种用户自定义的整数类型,用于定义一组具有特定名称的整数值:

enum Color { RED, GREEN, BLUE };

在上述例子中,REDGREEN BLUE 是枚举常量,它们的值默认从0开始依次递增。

(四)空类型(Void Type

void 是一种特殊类型,表示无类型。它通常用于以下场景:
函数返回值:表示函数不返回任何值。
函数参数:表示函数不接受任何参数。
指针类型:void * 表示指向未知类型的指针,可以存储任意类型的地址。

以上涉及到的语句必须能读会背,整不明白数据类型,以后的课没法上。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-10 23:33:24 | 显示全部楼层
                               第五课  C语言基础(续2)
四、C语言常用运算符
C语言中,运算符用于对数据进行各种操作,包括算术运算、逻辑运算、位运算等。下表是C语言中常用的运算符及其分类和用法:
算术运算符(Arithmetic Operators
算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法和取模。
1.概念

例如:

int a = 10, b = 3;
int sum = a + b;  // 13
int diff = a - b; // 7
int product = a * b; // 30
int quotient = a / b; // 3(整数除法)
int remainder = a % b; // 1

1.应用
C语言中,算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法和取模。以下是对这些运算符的详细说明和使用。

例如
1)加法运算符(+
用于将两个数相加。
语法:

result = operand1 + operand2;

例如

int a = 5;int b = 3;int sum = a + b; // sum 的值为 8

2)减法运算符(-
用于从一个数中减去另一个数。
语法:

result = operand1 - operand2;

例如

int a = 5;int b = 3;int difference = a - b; // difference 的值为 2

3)乘法运算符(*
用于将两个数相乘。
语法:

result = operand1 * operand2;

例如

int a = 5;int b = 3;int product = a * b; // product 的值为 15

4)除法运算符(/
用于将一个数除以另一个数。需要注意的是,如果两个操作数都是整数,则结果也是整数(整数除法),否则结果为浮点数(浮点除法)。

语法:

result = operand1 / operand2;

例如

int a = 5;int b = 3;int quotient = a / b; // quotient 的值为 1(整数除法)
float c = 5.0;float d = 3.0;float floatQuotient = c / d; // floatQuotient 的值为 1.666666(浮点除法)

5取模运算符(%
用于计算两个整数相除后的余数。取模运算符只能用于整数。

语法:

result = operand1 % operand2;

例如

int a = 5;int b = 3;int remainder = a % b; // remainder 的值为 2

6自增运算符(++
用于将变量的值加1。自增运算符可以是前置(++a)或后置(a++)。·
前置自增(++a):先将变量的值加1,再使用新的值。·
后置自增(a++):先使用变量的当前值,再将其值加1·

例如

int a = 5;int b = ++a; // a 的值先加1变为6,然后赋值给bb的值为6
int c = 5;int d = c++; // c 的值先赋值给d,然后c的值加1d的值为5c的值为6

7自减运算符(--)用于将变量的值减1。自减运算符也可以是前置(--a)或后置(a--)。前置自减(--a):先将变量的值减1,再使用新的值。
后置自减(a--):先使用变量的当前值,再将其值减1
例如:

int a = 5;int b = --a; // a 的值先减1变为4,然后赋值给bb的值为4
int c = 5;int d = c--; // c 的值先赋值给d,然后c的值减1d的值为5c的值为4

例如:
以下是一个综合使用算术运算符的例如代码:

#include <stdio.h>;
int main() ;
{
int a = 10, b = 3;

int sum = a + b;                // 加法
printf("Sum: %d\n", sum); // 输出:Sum: 13

int difference = a - b;                          // 减法
printf("Difference: %d\n", difference); // 输出:Difference: 7

int product = a * b;                     // 乘法
printf("Product: %d\n", product); // 输出:Product: 30

int quotient = a / b;                                               // 除法        
printf("Quotient (integer division): %d\n", quotient); // 输出:Quotient (integer division): 3

float floatQuotient = (float)a / b; // 强制类型转换为浮点除法
printf("Quotient (floating-point division): %.2f\n", floatQuotient); // 输出:Quotient (floating-point division): 3.33

int remainder = a % b;                       // 取模
printf("Remainder: %d\n", remainder); // 输出:Remainder: 1

int c = 5;
int d = ++c;                                                       // 自增
printf("c after pre-increment: %d, d: %d\n", c, d); // 输出:c after pre-increment: 6, d: 6

c = 5;
d = c++;
printf("c after post-increment: %d, d: %d\n", c, d); // 输出:c after post-increment: 6, d: 5

c = 5;
d = --c;                                                               // 自减
printf("c after pre-decrement: %d, d: %d\n", c, d); // 输出:c after pre-decrement: 4, d: 4

c = 5;
d = c--;
printf("c after post-decrement: %d, d: %d\n", c, d); // 输出:c after post-decrement: 4, d: 5

return 0;
}
8)学习者需要注意的几个问题
1.整数除法和浮点除法
如果两个操作数都是整数,则结果也是整数(整数除法)。
如果至少有一个操作数是浮点数,则结果是浮点数(浮点除法)。
如果需要进行浮点除法,可以使用强制类型转换,例如 (float)a / b
2.取模运算符
取模运算符只能用于整数,不能用于浮点数。
3.自增和自减运算符
前置和后置自增/自减运算符的区别在于操作的顺序。前置操作符先改变变量的值,再使用新的值;后置操作符先使用变量的当前值,再改变其值。
通过这些算术运算符,可以完成大部分基本的数学计算任务。
(待续)

不要小看了上文的运算符,学不明白上面的内容,以后的课你根本听不懂,更无法写代码,所以我们不要赶学习进度,学会才是我们最终的目的。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-12 01:10:31 | 显示全部楼层
                    第五课  C语言基础(续3)

(二)关系运算符(Relational Operators

关系运算符用于比较两个值的大小,结果为布尔值(truefalse),见下表:



例如:
int a = 10, b = 3;
int isEqual = (a == b); // false
int isNotEqual = (a != b); // true
int isGreater = (a > b); // true

逻辑运算符(Logical Operators

1.概念

逻辑运算符用于组合多个条件,结果为布尔值。



例如:
int a = 10, b = 3;
int andResult = (a > 5 && b < 5); // true
int orResult = (a > 5 || b > 5); // true
int notResult = !(a > 5); // false

2.应用

C语言中,逻辑运算符用于组合多个条件,最终产生一个布尔值(true false)。逻辑运算符主要有三种:逻辑与(&&)、逻辑或(||)和逻辑非(!)。以下是它们的用法和例如

1逻辑与运算符(&&

逻辑与运算符用于判断两个条件是否都为真。只有当两个条件都为真时,结果才为真;否则结果为假。
语法:

condition1 && condition2

特点:
如果 condition1 为假,则不会计算 condition2,直接返回假(短路特性)。
如果 condition1 为真,才会计算 condition2,最终结果取决于 condition2
例如
#include <stdio.h>
int main()
{
int a = 10, b = 20;
int result;

// 例如1:两个条件都为真
result = (a > 5 && b > 15); // true && true -> true
printf("Result 1: %d\n", result); // 输出:Result 1: 1

// 例如2:一个条件为假
result = (a > 5 && b < 15); // true && false -> false
printf("Result 2: %d\n", result); // 输出:Result 2: 0

// 例如3:利用短路特性
result = (a > 5 && (b / (a - 10) > 1)); // a > 5 为真,才会计算后面的条件
printf("Result 3: %d\n", result); // 输出:Result 3: 1
return 0;
}

2逻辑或运算符(||

逻辑或运算符用于判断两个条件中是否至少有一个为真。只要有一个条件为真,结果就为真;只有当两个条件都为假时,结果才为假。
语法:

condition1 || condition2

特点:
如果 condition1 为真,则不会计算 condition2,直接返回真(短路特性)。
如果 condition1 为假,才会计算 condition2,最终结果取决于 condition2

例如
#include <stdio.h>
int main()
{
int a = 10, b = 20;
int result;

// 例如1:两个条件都为真
result = (a > 5 || b > 15); // true || true -> true
printf("Result 1: %d\n", result); // 输出:Result 1: 1

// 例如2:一个条件为假
result = (a > 5 || b < 15); // true || false -> true
printf("Result 2: %d\n", result); // 输出:Result 2: 1

// 例如3:两个条件都为假
result = (a < 5 || b < 15); // false || false -> false
printf("Result 3: %d\n", result); // 输出:Result 3: 0
return 0;
}

3逻辑非运算符(!

逻辑非运算符用于对一个条件取反。如果条件为真,则结果为假;如果条件为假,则结果为真。

语法:
!condition

例如
#include <stdio.h>
int main()
{
int a = 10;
int result;

// 例如1:条件为真
result = !(a > 5); // !(true) -> false
printf("Result 1: %d\n", result); // 输出:Result 1: 0

// 例如2:条件为假
result = !(a < 5); // !(false) -> true
printf("Result 2: %d\n", result); // 输出:Result 2: 1

return 0;
}

例如;
逻辑运算符经常用于控制程序的流程,例如在if语句中。以下是一个综合例如,展示如何在实际场景中使用逻辑运算符:

#include <stdio.h>
int main()
{
int age = 25;
int hasLicense = 1; // 1 表示有驾照,0 表示没有驾照

// 判断是否可以开车
ia (age >= 18 && hasLicense)
{
printf("You are allowed to drive.\n");
}
else
{
printf("You are not allowed to drive.\n");
    }

// 判断是否需要提醒办理驾照
ib (age >= 18 && !hasLicense)
{
printf("You should get a driver's license.\n");
    }

return 0;}
输出:
假设 age = 25 hasLicense = 1,程序的输出为:
You are allowed to drive.

4)学习者需要注意的几个问题:

1.短路特性:逻辑与(&&)和逻辑或(||)运算符具有短路特性,这可以避免不必要的计算,提高程序效率。
2.优先级:逻辑非(!)的优先级高于逻辑与(&&)和逻辑或(||),因此在复杂的表达式中,可能需要使用括号来明确优先级。
3.布尔值:在C语言中,非零值被视为true,零值被视为false
通过合理使用逻辑运算符,可以实现复杂的条件判断,从而控制程序的执行流程。




回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 20:20 , Processed in 1.078371 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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