lao4jiadian 发表于 2024-12-6 19:49:50

《8051U深度入门到32位51大型实战视频》打卡OR lao****dian | 已送

第1集学习内容

哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前---www.STCAIMCU.com
8051U强在哪里?
1·屏幕显示和视频播放(flash编程器)优化了QSPI读写速度,屏幕显示高帧率刷新.(8080八位并口)
2.IIS录放音演示            1.停止 2.录音 3.播放 6.音量+ 7.音量-
3.PWM_DMA                PWM_DMA驱动点阵屏时钟演示
4频谱分析仪(上位机FFT)
5.手写计算器简单演示
flash编程器演示播放图片快速刷新
6.QSPI,PWM移相,硬件乘除,单精度浮点

East Wind 41 发表于 2024-12-7 07:44:09

第2集学习内容
感谢冲哥,把所有的工具软件都打包好了.
感谢STC论坛给我们提供好的学习交流环境---www.STCAIMCU.com
Ai8051U例程85+4个,实现的功能都很强大.
1.8051试验箱演示

2.常用软件的简介
3.STC-ISP软件演示,添加STC头文件.

4.KEIL中断号扩展布丁的使用演示

5.Ai8051U实验箱下载程序演示,
6.试验箱跑马灯演示
总结:硬件介绍--软件安装---示例程序下载演示

East Wind 41 发表于 2024-12-7 19:32:36

第3集学习内容
1.创建空工程(参考Ai8051U手册6.5章节)
添加保存新工程--选择单片机型号Ai8051U--书写添加mian.c代码到工程--设置KEIL工程内存模式--勾选创建HEX选项(HEX_386)

2.添加头文件 (利用ISP软件,结合Ai8051U手册6.4章节)
单片机头文件简介

利用ISP生成头文件的方法演示

3.最终代码如下:

#include "ai8051u.h"
void main(void)
{

    P0M1 = 0x00;   P0M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;   

    P40 = 0;       

    while(1)
    {
      P00 = 0;               
    }
}
书写规范:语句结束要加分号,大括号要换行缩进.
4.如何配置IO口模式


East Wind 41 发表于 2024-12-7 21:26:40

第4集学习内容 USB不停电下载
1.实验下载对比演示
2.下载所需文件(STC官网www.STCAl.com--软件工具--库函数--USB库文件下载)
3.移植STC32G关键部分到新工程(32位模式).


    1 添加头文件--代码包复制.查询模式
    2USB初始化函数(tib+.h库实现)LIB文件特点介绍.函数是隐藏的

    3命令参数
      char *USER_DEVICEDESC = NULL;
      char *USER_PRODUCTDESC = NULL;
      char *USER_STCISPCMD = "@STCISP#";
    4 打开P_SW2寄存器和IE2寄存器(只打开一个位!)

      EAXFR=|0x80可以访问XFR   问题:8051所有的寄存器都能位寻址了吗?
      IE2|=0x80      打开USB中断      EUSB
      EA=1               打开总中断
      DEVSTATE_CONFIGURED       usb 连接成功标识???
      编译报L57错误的原理


East Wind 41 发表于 2024-12-9 11:06:46

第5集学习内容C语言基础
Printf函数可以快速打印出变量的一个类型,数据,帮助我们快速开发.
1.      使用Printf函数的方法,打开USB库中的PRINTF_HID宏定义(去掉//)就可以使用

//#define替换名被替换名
2.理解PRINTF的函数原型的定义
#define printfprintf_hid
int printf_hid (const char *fmt, ...);

参数fmt -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。

普通字符:在输出时,普通字符将原样不动地复制到标准输出。
printf("8051U深度入门到32位51大型实战视频\r\n");
printf() 的附加参数与转换说明符是⼀⼀对应关系,如果有 n 个转
换说明符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的转
换说明符,printf() 可能会输出内存中的任意值。
位置:printf()函数的普通字符和转换说明放在" "双引号内,附加参数放在双引号外,每个附加参数之间用逗号隔开。参数,既可以是变量,也可以是常量。

字符串要用半角字符的双引号引起来,%标签是一个替换字符,跟在后面的是控制或格式字符,几个%就对应后面的几个参数. printf() 的附加参数与转换说明符是⼀⼀对应关系,如果有 n 个转换符%, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的转换符%,printf() 可能会输出内存中的任意值。

格式字符       含义
%d                以十进制整数形式输出
%ld               以十进制长整形输出
%f               以单精度浮点型输出
%lf                以双精度浮点型输出
%x或%X       以十六进制形式输出整数
%u               以十进制无符号整形输出
%i                以十进制整形输出(与%d无异)
%c               输出单个字符
%s               输出字符串
%e或%E      以指数形式输出
%g或%G   自适应数据输出(数据够大或够小则以指数形式输出,否则以小数形式输出
%р            输出地址
转义字符含义:
n.mn   表示整数占几行,m表示小数占几行                                                         %2.3f
-             输出的结果左对齐                                                                                     %-d
空格      输出值为正时冠以空格,为负时冠以负号
#            输出带有前导的数据(八进制为0~~~,十六进制为X~~~,~表示数字)      %#d

转义字符      释义
\?                  在书写连续多个问好时使用,防止他们被解析成三字字词
\'                  用于表示字符常量
\"                  用于表示一个字符内部的双引号
\\                  用于表示一个反斜杠,防止它被解释为一个转义序列符
\a                  警告字符,蜂鸣
\b               退格符
\f                  换页符
\n               换行符
\r                  回车
\t                  水平制表符(8个空格)
\v               垂直制表符
\ddd            ddd表示1-3个八进制的数字。如:\120
\xdd             dd表示2个十六进制数字,   如:\x30
n.m            n整数占几个字符,m小数占几个字符
-                   输出左对齐.
输出为正值为空格,输出负值为-
转换说明:不直接输出,用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明符结束,从而说明输出数据的类型、宽度、精度等。
      printf("8051U深度入门到32位51大型实战视频,%s\r\n","加油");

转换说明简介:
1.类型:根据不同的 fmt 字符串,函数可能需要一系列的附加参数,每个
参数包含了一个要被插入的值,替换了 fmt 参数中指定的每个 % 标签。
关于附加参数,既可以是变量,也可以是常量。

2.位置:printf()函数的普通字符和转换说明放在" "双引号内,附加参数
放在双引号外,每个附加参数之间用逗号隔开。

3.数量:printf() 的附加参数与转换说明符是⼀⼀对应关系,如果有 n 个转
换说明符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的转
换说明符,printf() 可能会输出内存中的任意值。

2.数的进制:2进制、10进制、16进制学习
32位编译器想要使用64位变量double,需要在程序文件里面添加申明:#pragma float64???第一次听说,讲32G的视频里double不是32位吗???
最常用数据类型:unsigned 只包含正值  signed包含正负值
unsigned char (u8)                     8      1                  0- 255
unsigned int      (u16)               16      2                0- 65535
unsigned long int    (u32)             32      4            0- 4294967295
float                                    32      4               正负1.175494E-38 — 正负3.402823E+38

4.C语言常用运算符
+加法运算 -减法运算 *乘法运算 /除法运算 % 模或余数运算 ++自增运算 --自减运算 ==判断是否相等 !=判断是否不等 >大于 <小于 >=大于等于 <=小于等于 & 按位与 |按位或 !取反 +=先加再赋值 ......
if{}eles{}  格式

ASCII表 1-127



East Wind 41 发表于 2024-12-9 18:06:09

第6集学习内容 (6. IO输入输出)
1.GPIO(General Purpose I/O Ports)输入/输出端口(引脚),可以输出高低电平或读状态(高低电平,ADC采样等)。
高电平:指接近于电源正极电压的电平;也叫逻辑“1”;3.3VDD时>1.18(施密特电平),5VDD时>1.6(施密特电平)
低电平:就是输出接近GND的电平;也叫逻辑“0”;3.3VDD时<0.99(施密特电平),5VDD时<1.32(施密特电平)


2.按键输入检测 1.按下按钮灯亮,放开灯灭.2.按下按钮灯灭,放开灯亮.3.按一下亮,按一下灭(反转)


变量定义位置:在大括号的头部(C99是什么格式?)

思考:a=!a   与 a!=a 有什么区别?a!=a 是不是正常语句
printf("state:%d\r\n",(int)state); %d 为16位格式,所以(int)state要强制16位转换
延时计算器注意事项:

软件按键防抖动

对其技巧:点选第一行的位置,按Alt键往下拖即可选中所有注释文本,按TAB按键对其.
补充:C99格式,网络查询结果




East Wind 41 发表于 2024-12-10 07:43:29

第7集学习内容 (7. 定时器中断)
冲哥:我们要把www.STCAIMCU.com论坛搞得旺旺的,都来论坛添把火......
1.定时器的介绍
定时器作用:1.计时.2.计数.程序运行中,可以中断去做其他的事情,完成后,继续原理的程序.
    (1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
    (2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)


Ai8051U有6个24位定时器.T0 T1 T2 T3 T4 T11
如何使用ISP软件生成定时器C代码.
2.定时器的应用
主函数大括号外面声明的变量,就是全局变量,其他函数可以调用.
Keil软件编译时,字符串中不能含有带 OxFD 编码的汉字,否则会出现乱码。
解决方法:在带有 Oxfd 编码的汉字后增加一个 Oxfd 即可。例如:printf("数学");printf("数\xfd 学");
包含Oxfd编码的汉字如下:
褒饼昌除待谍洱俘庚过糊积箭烬君魁例笼慢谬凝琵讫驱三升数她听妄锡淆旋妖引育札正铸 佚冽邶埤荦蔟摭啐帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞瘕颀螨筋酏觚鳊鼾


另外, Keil项目路径名的字符中也不能含有带0xFD编码的汉字,否则Keil软件会无法正确编译此项目。


TM0PS = 0x5B;//设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,看手册 )
AUXR &= 0x7F;//定时器时钟12T模式   AUXR最高位清零.
TMOD &= 0xF0;//低4位清零(设置T0为16位定时器)
TL0 = 0x3F;//设置定时初始值             0x013F=319 初始值65536-319
TH0 = 0x01;//设置定时初始值
TF0 = 0;      //清除TF0标志         中断标识位置0
TR0 = 1;      //定时器0开始计时,当T0_GATE=0时,TR0=1开启定时器,TR0=0时关闭定时器.
ET0 = 1;      //使能定时器0中断

3.函数的定义、声明、调用
   定义:包含返回值,函数名和入口参数,并定义了函数具体功能。
   函数的名称:描述函数功能,便于阅读理解。
   函数名称:有意义的英文单词或者组合单词,避免使用特殊字符或数字。英文不好可以用拼音吗?
   函数名称不能与C语言的关键字同名。

   格式:    返回值类型 函数名(入口参数)
                   {
                   // 函数体
                  // 函数执行的代码
                  return 返回值;
                  }


声明:返回值类型 函数名(入口参数);在头文件或者被调用之前声明,注意末尾要加分号
调用:函数名(入口参数);直接使用函数名,加上括号和分号。多个入口参数之间加逗号隔开。
小技巧:变量首字母最后大写.

先来一个32G试验箱的救护灯视频吧

8H8K64U 发表于 2024-12-10 11:29:33

必须来一套试验箱支持后续的学习,希望贴主再接再励哈

East Wind 41 发表于 2024-12-10 11:34:40

8H8K64U 发表于 2024-12-10 11:29
必须来一套试验箱支持后续的学习,希望贴主再接再励哈

非常感谢版主的支持,我会继续更新记录贴到冲哥的全部视频.产品开发STC首选,大力支持国芯.

East Wind 41 发表于 2024-12-10 21:20:47

第8集学习内容 (第8集. 定时器周期性调度任务)
1.程序常见错误分析排除
   
    关键词/变量函数名称的大小写错误或者漏了一个字符,P00写出p00,u8写成U8等等---关键       字区分大小写
    大括号缺了半个;(大括号上下一定要对齐,就不容易遗漏)
   符号的中英文错误---书写要在英文半角模式--中文全角字符会报错---书写代码时要注意输入法   状态
   语句结尾没加分号;
   变量/函数定义之后没有声明/重复定义;
   #include在调用头文件时后面要先加一个空格,在+引号头文件名称
2.定时器周期性任务调度介绍,一个定时器对3个变量进行计数,达到设定值时执行相应动作.
   数组的简介,数组索引从0开始.数组的读写.

   for语句使用介绍 ,用for语句循环了3个数组变量的赋值.
   小知识:(int)强制转换到int类型
   小知识:按住Shift再按 Tab键就可以向前缩进
   小知识:/*中间可以放注释文本,可以连续多行*/
   小知识:2进制位权 为1 2 4 8
   数组流水灯的C代码实现

文件的创建(.c和.h)一个硬件或一个功能创建一个.c与.h文件,方便调用与移植
    新建xxx.c和xxx.h文件,代表一个功能块。
   xxx.h格式:
   #ifndef __XXX_H(要英文大写)
   #define __XXX_H(要英文大写)
   调用头文件
   函数声明...
   #endif
xxx.c格式
   #include “xxx.h”(要英文小写)
   函数定义
添加.c .h文件一定要记得引用路径和添加到工程里

   结构体的介绍
   结构体数组的周期性任务调度---难理解.视频1:00到1:08.已重复观看3次

   小知识:变量类型和名称中间一定要加空格
   怎样添加任务调度到程序---还差一点意思



页: [1] 2 3
查看完整版本: 《8051U深度入门到32位51大型实战视频》打卡OR lao****dian | 已送