找回密码
 立即注册
楼主: lao4jiadian

32G12K128实验箱学习打卡ORSTC32位8051单片机原理及C语言程序设计视频教程

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-05-06 09:22:11

718

主题

1万

回帖

1万

积分

管理员

积分
15678
发表于 2024-11-30 18:13:34 | 显示全部楼层
lao4ji*** 发表于 2024-11-28 11:11
不亏啊?打卡学习,去官方申请一个AI8051U实验箱,等我学完32G的例程的时候,8051的所有视频例程都完善了.学习 ...

32G12K128分享学习芯路历程后,我们送您 Ai8051U实验箱
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-05-06 09:22:11

718

主题

1万

回帖

1万

积分

管理员

积分
15678
发表于 2024-11-30 18:17:34 | 显示全部楼层
阿白*** 发表于 2024-11-29 19:16
好像CAN接口没有引出

他有 CAN-屠龙刀
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-1 07:56:28 | 显示全部楼层
本帖最后由 lao4jiadian 于 2024-12-1 13:26 编辑

第四集:建立工程点亮第一颗LED上
1.LED点亮原理。
  小实验,为什么LED能点亮?
  高低电平概念:输出电压=VCC就是高电平,输
出电压=GND(一般是OV)就是低电平,分别用1和0来表示。
  GPIO (general purpose intput output)是通用输入输出端口的简称,可以通过软件来读取其输入电平,或者控制他输出高低电平。
  P0是一组GPIO口,从P0.0到P0.70-7总共有8个,P0.0是一组的其中一个GPIO口.
   可以同时操作一组IO,也能单独操作一个IO.
2.新建工程
   跟着手册: 《STC32G12K128实验箱-V9.4使用说明书》新建工程.
添加STC信息到Keil.png
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png

3.点亮第一个LED
STC32G特殊功能寄存器介绍


打开AIapp-ISP-v6.94Z.exe---选择芯片型号:STC32G12K128--打开程序文件--按住INT0按键不放---点按一下ON/OFF按钮---放开INT0按钮---ISP列表中弹出STC USB Writer (HID1)--点击下载按钮--等待烧录成功.
LED亮.jpg 一个LED 成功点

捕获.PNG

4.实现自动下载工程
可以勾选  每次下載前都重新裝载目标文件
                当目标文件变化时自动装载并发送下载命令


小技巧
1.怎么控制单独的一个引脚?sbit PO0 = PO^O;.1/选择P0.0引脚
2.怎么控制这个引脚输出电平?P00 = 1;//输出低电平·
3.书写规范一行一句,大括号缩进(需要设置),缩进四格,注释完整
4.注释符号// 单行注释/* */ 多行注释
5.CTRL+F打开快速搜索框---点击Find in Files选项卡---搜索下拉框内输入需要搜索的内容---点击Find All按钮---Find In Files选项卡中就会出现搜索结果,双击就可以跳转到结果位置.



8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-1 21:03:47 | 显示全部楼层
本帖最后由 lao4jiadian 于 2024-12-2 16:44 编辑

第5天,·实现自动下载工程不断电下载
   第1种方法:向寄存器IAP_CONTR,写入0x60,即可实现不停电ISP下载。
   第2种方法:使用STC-ISP下载软件发送的用户下载命令(USB项目)


把STC32G-DEMO-CODE-V9.6文件夹里的COMM复制到工程目录.
不例程:76-通过USB HID协议打印数据信息-可用于调试 文件夹复制到工程目录,参考一下.
引用头文件的简介
         路径中“./”、“../”、“/”代表的含义是什么?
       “./”:代表目前所在的目录。“../”:代表上一层目录。“/”:代表根目录。
         #include "./COMM/stc32_stc8_usb.h"含义就是:包含本文件夹下COMM文件夹内的stc32_stc8_usb.h         头文件


书写完毕后,显示蓝色的文字的都是关键词,显示黑色的文字是我们自己定义的名字.
typedef  类型定义(重命名)
stc32_stc8_usb.h头文件里的sfr的简单认识,体会.
KEIL报错排除方法.
函数声明 函数定义与编译顺序
Snipaste_2024-12-01_16-52-42.png
没发现冲哥说的设置USB时钟源的有关代码,看有用的代码好像只有一下几行,其他好像都是设置端口模式的代码.
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度
把以上3行代码复制到USB初始化语句的前面,编译后测试,竟然可以了,好神奇啊!
尝试单独注释这几行代码,发现起作用的只有扩展寄存器(XFR)访问使能语句.
Snipaste_2024-12-01_15-23-11.png
总结:不停电下载在STC32G单片机最小代码如下6行(注意定义的顺序):
char *USER_DEVICEDESC = NULL;        //不定义会报错误L127,L128
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";  
EAXFR = 1; //扩展寄存器(XFR)访问使能
usb_init();  //USB初始化
EA = 1;      //IE寄存器--EA  中断总开关
HID.png
在反复下载的时候,咨询查看,未下载之前,ISP软件显示连接到了一个HID\VID_34BF\PID_FF01的设备,终于明白了不停电下载的实现原理.
总结`:写入以上代码后,单片机创建了一个USB_HID接口,一直连在电脑上,下载时ISP软件通过USB_HID接口发出用户命令,单片机收到信息后,复位到USB下载模式,实现不停电下载.
同理USB_CDC为虚拟串口实现的不停电下载.
Snipaste_2024-12-01_20-21-30.png

8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-2 21:17:52 | 显示全部楼层
第6天:C语言printf函数 运算符和进制数
1.C语言 printf函数的实现
主函数添加程序:
if(DeviceState != EVSTATE_CONFIGURED) continue;
if (bUsbOutReady)
  {
  usb_OUT_done();//接收应答(固定格式)
  }

常规用法:printf("Hello World!”);printf(“室内温度:%.2frin”, 11.2);

捕获2.PNG 捕获.PNG
格式字符       含义
%d                以十进制整数形式输出
%ld               以十进制长整形输出
%f                 以单精度浮点型输出
%lf                以双精度浮点型输出
%o                以八进制整型输出整数。
%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

ASCII字符代码表(0-127)

2.数的进制:2进制、10进制、16进制
   80H=0x80   等于10进制的128
  二进制--十进制--十六进制的转换方法

8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-3 19:47:56 | 显示全部楼层
本帖最后由 lao4jiadian 于 2024-12-3 21:10 编辑

第7天学习内容(第5集下)
C语言常用运算符
算术运算符

加(+)减(一)乘(*)除(/)  运算逻辑与普通数学一致,运算优先级别与普通数学一致
模(余)运算符(%) :不允许出现浮点型,余数正负取决于被除数正负
自增(++i, -i; i++; i-)

位运算符
右移(>>)左移(<<)   数值按2进制表示法,进行移位操作.右移最高位加入0.左移最低位加入0
按位与(&)             2个位比较,都为1时=1  否则=0
按位或(|)                 2个位比较,有1时=1  都不等于1时=0
按位异或(^)              2个位比较,值相反时=1 相同时=0
取反(~)                     数值按2进制表示法,按位取反(1变0,0变1)

赋值运算符
+= 加赋值(a+=3 等价于 a=a+3)
-= 减赋值
*=乘赋值
/= 除赋值
%= 求余赋值
&= 按位与赋值
|=按位或赋值
^=按位异或赋值
<<=左移位赋值
>>=右移位赋值

printf("%u \r\n",1<<2)            0000 0001<<2    0000 0100=4
printf("%u \r\n",0x11&0x10)   0001 0001 & 0001 0000=16
printf("%u \r\n",0x11|0x10)     0001 0001 | 0001 0000=17
printf("%u \r\n",~0x11)           ~0000 0000 0001 0001=65518
捕获2.PNG
捕获.PNG
数据类型                              位数   字节               值范围
bit                                          1                            0 or 1
signed char                            8        1              -128-+127
unsigned char                        8        1                  0- 255
enum (结构体时讲)              8/16   1 or 2            -128-+127 or-32768— +32767
signed short int                    16        2               -32768 - +32767
unsigned short int                16        2                0 — 65535
signed int                             16        2                -32768-+32767
unsigned int                         16        2                0- 65535
signed long int                     32        4               -2147483648- +2147483647
unsigned long int                 32        4              0- 4294967295
float                                      32        4              + 1.175494E-38 — +3.402823E+38
double                                  32        4              +1.175494Е-38 - +3.402823E+38
sbit                                        1                             0 or 1                   未讲解
sfr                                          8          1                 0- 255                  未讲解
sfr16                                      16         2                0- 65535             未讲解


8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-5 20:09:59 | 显示全部楼层
第8天学习内容(第六集: LED闪烁和花式点灯上)
STC-ISP软件与STC32G手册的更新方法1.直接去官网下载2.在原ISP软件里更新.
1.基于Delay实现的LED闪烁
define 命令的简介. define指令将一个标识符(宏名)映射到一个指定的文本或符号.‌
typedef命令简介.新定义的名称在右面,后面需要加分号.define命令新定义的名称在左面,不需要加分号
while do while 的用法,执行流程.
delay函数原理简介.自增,自减介绍.
双灯1秒闪烁




8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-5 21:19:43 | 显示全部楼层
第9天学习内容(第六集: LED闪烁和花式点灯下)
2.函数的使用
在模块化编程里,.函数使用分为如下三步
1:函数定义
返回值·函数名称(入口参数)
{
函数要执行的功能
}
@返回值:没有返回值就是void
@函数名称:避开关键词,不重复,非特殊字符随便取
@入口参数:类型+名称,多个参数用", "隔开,空就写void
2.函数声明
返回值 函数名称(入口参数);
3.函数调用
函数名称(入口参数);


模块化编程知识
新建  xxx.c +  xxx.h文件,代表一个功能块。


xxx.h格式:
#ifndef __XXX_H
#define __XXX_H
调用头文件
函数声明...
#endif


xxx.c格式
#include “xxx.h”
函数定义


添加文件一定要记得引用路径和添加到工程里
为什么要添加引用路径,想不明白
函数的使用(定义、声明、调用)模块化编程是:把声明和定义放到模块里,程序中直接调用前,先包含相应的头文件.
SOS救援灯
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(200);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭       
        delay_ms(200);
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(200);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(200);
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(200);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(200);


        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(500);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(500);
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(500);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(500);
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮
        delay_ms(500);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(500);
       
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(200);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(200);
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮       
        delay_ms(200);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭               
        delay_ms(200);
        P60 = 0;                        //点亮
        P67 = 0;                        //点亮
        delay_ms(200);
        P60 = 1;                        //熄灭
        P67 = 1;                        //熄灭       
        delay_ms(200);       
       
        delay_ms(1000);       
        P6=0x00;                               //全亮结束
        delay_ms(1000);       
        P6=0xff;       
        delay_ms(1000);       




8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-6 21:16:17 | 显示全部楼层
第10天学习内容(第七集:按键点灯上)
1.SOS求救灯代码讲解
2.按键的原理
Snipaste_2024-12-06_20-37-12.png
3.按键消抖原理(按下后10毫秒再检测一次)
Snipaste_2024-12-06_20-51-15.png
4.按键C代码的实现,演示
5.按键控制LED小灯亮灭代码实现
6.按键按下逻辑的C代码控制方法(如按键按下只执行一次,松开按键执行代码)




8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

34

主题

171

回帖

1201

积分

金牌会员

积分
1201
发表于 2024-12-9 21:46:04 | 显示全部楼层
第11天学习内容(第七集:按键点灯下)
1.按键长按,短按功能代码实现
2.松开按键时,执行动作的代码实现
小技巧:不确认程序执行优先级时,把优先执行的代码用括号括起来.
           weil 有大括号时不愿加分号,省略时要加分号.


数组的使用方法
Snipaste_2024-12-09_21-33-37.PNG
数组使用分为如下两步
1.定义方式
类型 名称[长度] = { 数值 };
2.使用 C程序中,数组的索引开始值为0
赋值:名称[索引] = 数值   


数组流水灯:
Snipaste_2024-12-09_21-37-29.PNG




8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 09:14 , Processed in 0.129652 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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