找回密码
 立即注册
查看: 723|回复: 19

冲哥单片机视频学习打卡

[复制链接]

该用户从未签到

3

主题

22

回帖

93

积分

注册会员

积分
93
发表于 2023-5-29 12:26:09 | 显示全部楼层 |阅读模式
本帖最后由 1872978045 于 2023-5-31 15:36 编辑

第一集:

总结:
1.什么是单片机?
单片机是把具有数据处理能力的CPU、RAM、ROM多种I/O口,定时/中断功能集成到一块硅片上构成的一个小而完善的微型计算机系统

单片机有很多形状,STC有40个引脚的,也有20个引脚的,最小单片机只有8个引脚
STC32G是STC最新的一款,是STC里性能最强的
2.单片机能做什么
单片机基本上就是一个小的功能减少的计算机,能写入用户程序:能读取在输入引脚上的电压信号,能在引脚上输出特定的电平信号,能在特定引脚上输出电压信号,能计算时间,能计数,能做数学运算,能做逻辑运算,能顺序动作,能通信等功能,总的来说就是他能做有规律可循的控制应用
单片机广泛应用于仪器仪表、家用电器、医用设备等各个领域,大致可分如下几个范畴:智能仪器、工业控制、家用电器、网络和通信、医用设备领域、模块化系统、汽车电子等
3.新手常见问题解答
建议新手学STC的51单片机,51单片机也不会淘汰
入门单片机可以看一套教学视频,然后参加竞赛
做一个普通项目的话要学会寻找资料,对项目做整体评估
汇编不是太需要,建议学习C语言
单片机用寄存器好,比库函数简洁方便
遇到不懂的可以寻求官方技术人员的帮助
4.学习建议

(1)一定要静得下心,沉得住气;
(2)多动手,不要一看就会,一写就废
(3)举一反三,发散思维,时常思考为什么
(4)多看官网,多看手册,有问题多交流
(5)逛逛论坛,吸收一些别人好的东西
(6)尝试着自己做一些项目,竞赛题


疑问:
stc8h和stc32g有什么区别?
sct89c51和stc8h只有引脚和中断系统有区别吗,编程语法都一样吗,是否有其他区别?
大一的时候学过C语言,但是这学期单片机课程是用的汇编,课程设计也是用汇编写的,重新学习c语言需要花较多的时间吗

回复 送花

使用道具 举报

该用户从未签到

3

主题

22

回帖

93

积分

注册会员

积分
93
 楼主| 发表于 2023-5-29 12:39:27 | 显示全部楼层
本帖最后由 1872978045 于 2023-5-31 15:47 编辑

第二集
总结:
V9.4实验箱有很多模块,比如蜂鸣器、红外发射、红外接收、电压比较、数码管、LED灯、万能板、NTC测温、18B20、ADC按键、基准电压、PWM模拟、DAC、24C02、矩阵按键、独立按键、LCD接口、LED、USB、232接口、FLASH扩展、RS232接口和调试接口
NTC测温是采集连续的电压信号(通过ADC采集),模拟测温,可以测出连续的温度曲线
18B20采集慢,采集时间间隔大,数字测温
单片机一些数据保存到外部存储,这样可以在更换单片机的时候保持数据不变,省去了一些步骤
一个汉字16*6的像素
flash扩展比24c02扩展更大
工作电压1.9V~5.5V,尽量不要超出工作电压
疑问:
ADC按键,矩阵按键和独立按键有什么区别?ADC按键工作原理是什么

课后作业:
我想用NTC做一个温度检测器,可以通过串口在电脑上输出连续的温度,然后还可以打开温度记录功能,通过按键可以设置要记录多久,并且把结果保存咋FLASH里,可以通过单片机按键调出保存的温度数据

点评

ADC按键,矩阵按键和独立按键有什么区别? ---独立按键一个io只能接一个按键,矩阵按键是行个数*列个数个按键 ADC按键工作原理是什么 --  发表于 2023-5-29 17:02
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

22

回帖

93

积分

注册会员

积分
93
 楼主| 发表于 2023-5-29 15:32:12 | 显示全部楼层
本帖最后由 1872978045 于 2023-5-31 16:24 编辑

第三集
总结

1.STC-ISP软件的下载
STC-ISP软件是开发STC家的单片机的必备神器,不仅能下载STC全系列单片机的程序,甚至集成了虚拟显示功能,范例程序程序,在线生成工具,驱动安装等等功能

下载方法:打开https://stcai.com/giri,找到最新版本的STC-ISP软件的压缩包,直接下载运行即可。,如果没有安装驱动要提前安装

2.STC32手册下载
方法一:用户手册可以在STC-ISP软件内下载

方法二:打开深圳国芯人工智能有限公司-芯片手册 (stcai.com),在左边找到STC32系列,点击"STC32规格书下载”即可
3.PDF阅读器下载
手册比较大,需要一款好的PDF浏览器

方法一:使用WPS打开
方法二:下载福昕阅读器
4.学会使用福昕阅读器查阅手册
(1)如何使用PDF阅读器打开手册
(2)如何查阅自录和详情
(3)如何快速查阅章节
(4)如何使用搜索功能

5.跟着手册搭建C251开发环境
(1)安装keil(已经装过了)
(2)安装C251编译环境(用户手册第五章有详细步骤)

(3)如何同时安装C51、C251和MDK?答:可以装到同一个路径,会自动处理完成,不会出现冲突
6.程序包的下载
程序包可以在STC-ISP软件内下载,也可以打开深圳国芯人工智能有限公司-实验箱 (stcai.com),找到"STG32G实验箱9.4"点击代码下载
7.第一个工程的编译和下载

1、编译前准备:
首先打开 STC 的 ISP 下载软件,然后在软件右边功能区的“Keil 仿真设置”页面中点击“添加型号和头文件到 Keil 中 添加 STC 仿真器驱动到 Keil 中”按钮,添加到keil文件内即可

使用USB下载功能,要安装驱动,在STC-ISP软件顶部点击USB驱动程序,如果不放心可以先点击“关闭USB驱动程序WINDOWS强制数字签名”,然后再点击“安装STC-CDC\USB转串口驱动”,安装完成之后还要点击“安装软件模拟USB下载驱动”
2、下载:(通俗易懂的说明)将板子通过USB线连接电脑(冲哥PPT上连接敲成链接了哦),按下P3.2按钮,此时按下并松开OFF钮,再松开P3,2并进入下载模式
(官方说明)

(1)、使用 USB 线将实验箱与电脑进行连接
(2)、打开 STC-ISP下载软件
(3)、选择单片机型号为“STC32G12K128”,打开需要下载的用户程序
(4)、实验箱9.4 使用硬件 USB 接口下载。进入 USB 下模式需要先按住实验箱上的 P3.2,然后按一下 ON/OFF 电源按键,接着松开 ON/OFF 电源按键,最后可松开 P3.2按键。正常情况下就能识别出“STC USB Writer”设备
(5)、点击 STC-ISP 下载软件中的“下载/编程”按钮


回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

22

回帖

93

积分

注册会员

积分
93
 楼主| 发表于 2023-5-29 15:52:57 | 显示全部楼层
本帖最后由 1872978045 于 2023-5-31 16:36 编辑

第四集(上):
总结
单行注释//         多行注释/*     */


1.LED点亮原理
输入电压VCC是高电平,输出电压GND就是低电平,分别用1和0表示
二极管正极接VCC,负极接GND就可以点亮二极管
点亮LED4:P40输出低电平,P60输出低电平
2.新建工程
(1)、打开keil软件,选择project中的New uVersion Project
(2)、然后输入文件名保存
(3)、接下来需要选择芯片型号,选择STC32G12K128,然后确定保存就行了
(4)、然后新建源代码文件,打开“File”菜单中的“New
(5)、在新建的文件中输入相应的源代码,然后选择“File”菜单中的“Save”项对文件进行保存,名字的后缀必须为.c建议小写
(6)、在exit里选择configuration,把Encoding改为GB2312,Tab改成4
(7)、打开“Project”中的“Option for Target ‘Target1’”,在“Output”属性页中,将“Create HEX File”选项打上勾,保存即可
3,点亮第一个LED
需要用到P4口和P6口,在使用I/O口之前要先设置端口模式,使用sfr P4 0xc0   sfr P4M1 =0XB3  sfr P4M0 =0XB4 格式设置
单独控制一个引脚,用 sbit P00=P0^0 设置
sfr 是特殊功能寄存器,表示的是80H~0FFH区域
C语言sfr定义方法: sfr 名字=地址
配置端口的模式:00为准双向口,01为推挽输出,10为高阻输入,11为开漏输出
核心程序给P40端口和P60端口置零:
while(1)
{  
     P40 = 0;
     P60 = 0;
}
下载到板子上没有现象可以看一下端口地址是否写错了




疑问
为什么stc8h8k64u没有P1.2口?有什么特殊用途吗?
四种端口模式有什么区别?没有特殊需求都是准双向口模式吗
sbit和sfr有什么区别?sbit只能定义端口吗?

回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

22

回帖

93

积分

注册会员

积分
93
 楼主| 发表于 2023-5-29 16:23:59 | 显示全部楼层
本帖最后由 1872978045 于 2023-5-31 17:16 编辑

第四集(下)CDC/USB不停电下载方法:
总结:
一、HID下载模式
用户程序复位到系统区进行"USB 模式 ISP 下载的方法(不停电)
1、设置方法:
(1)打开STC-ISP软件
(2)选择芯片型号,打开选项卡“收到用户命令后复位到ISP监控程序区”
(3)然后选择USB(HID)模式,并勾选“使用默认的内部自定义命令“@STCISP“ ”
(4)若需要使用此模式,则需要将stc_usb_hid.lib代码库添加到项目中
2、代码库添加教程:
(1)将COMM文件夹复制到工程文件夹内
(2)右键工程中的Source Group1,点击Add File to group,选择stc_usb_hid.lib然后点击确认添加
(3)然后在程序头添加#include "COMM/stc.h" 和#include “COMM/usb.h”两句代码
(4)然后添加三句设置自定义下载命令的代码  char "USER_STCISPCMD ="@STCISP"; char "USER_DEVICEDESC ="@STCISP"; char "USER_PRODUCTDESC ="@STCISP";
(5)然后添加调用USB初始化函数sys_init(); usb_init();   EA=1;从程序包里把void sys_init()函数复制到自己写的代码的main函数前面
(6)编译成功之后点击下载,按照上一集的方法下载进程序
(7)成功之后回到STC-ISP软件,勾选上“每次下载前都先发送自定义命令”
(8)勾选上“当目标文件变化时自动装载并发送下载指令”,然后再keil上点击编译就能下载到板子上了
调用一下stc32g.h之后可以不用对端口地址进行声明,p0.0之类的端口也可以直接写成P00
定义的函数如果放在末尾要在主函数前面加上函数声明 void sys_init();
二、CDC下载模式
设置方法
(1)、和HID添加stc_usb_hid.lib步骤一样,将stc_usb_cdc.lib添加到工程
(2)、选择USB-CDC/串口模式
(3)、第一次下载之前先取消勾选“每次下载前都先发送自定义命令”,下载完成之后再勾选上
(4)、在程序里添加 USLCLJ = 0X00; USBCOM = 0X90; 两行代码
(5)、剩下的步骤和HID下载方式基本类似
三、其他总结
EA是IE的第七位,作为中断的总开关,如果为1则说明CPU开放中断,为0则关闭所有中断
点亮全部LED核心程序:
while(1)
{
P6 = 0;
P40 = 0;
}
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

22

回帖

93

积分

注册会员

积分
93
 楼主| 发表于 2023-5-29 16:50:13 | 显示全部楼层
本帖最后由 1872978045 于 2023-5-31 20:02 编辑

第五集(上):
总结
一、C语言printf函数的实现

主函数添加程序:
if(DeviceState != DEVSTATE_CONFIGURED)
continue;
if (bUsbOutReady)
{
usb_OUT_done(); //接收应答
}
常规用法:
printf(“Hello World!”);
printf(“室内温度:%.2f\r\n”,11.2);

显示类型及格式字符:以百分号开头,用一位或者两位字母表示,常用的有%d,%f等
1.png

转义字符:常用的有/r/n(回车)
2.png

ASCII字符表:
3.png

二、数的进制:二进制、十进制、十六进制
数字:
2进制数       0   1   10   11  100   101   110 111 1000 1001 1010 1011 1100 1101  1110  1111
10进制数     0     1     2     3     4     5     6     7     8     9     10     11     12     13     14     15
16进制数     0     1     2     3     4     5     6     7     8     9      A      B      C       D        E      F
十六进制数转换二进制数:一位十六进制数转换成四位二进制数:0xff对应的二进制: 1111 1111 对应的十进制:255


其他总结
1、在USB-CDC/串口助手里可以勾选上编程完成后自动打开串口,但是时间要根据自己电脑情况设置,太短了可能不行
2、如果输出的是十六进制,可以在左侧勾选上文本模式
3、整数多于位补0会自动优化掉,不输出,小数部分会补0输出
4、C语言里16进制用0x开头表示,不用H结尾
5、掌握二进制、十进制和十六进制数的转换

回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 97 天

    [LV.6]常住居民II

    40

    主题

    1004

    回帖

    6928

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6928
    QQ
    发表于 2023-5-29 17:01:27 | 显示全部楼层
    stc8h和stc32g有什么区别?
    ---主要就是内存大小,功能其实都类似
    sct89c51和stc8h只有引脚和中断系统有区别吗,编程语法都一样吗,是否有其他区别?
    ---sct89c51能用的stc8h也都能用,但是stc8h执行速度更快,需要注意下端口模式。
    大一的时候学过C语言,但是这学期单片机课程是用的汇编,课程设计也是用汇编写的,重新学习c语言需要花较多的时间吗
    ---c比汇编简单太多了,有基础认真学的话,一天都能学完c的基础语法
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2023-5-29 17:04:23 | 显示全部楼层
    本帖最后由 1872978045 于 2023-5-31 20:23 编辑

    第五集(下):
    总结:
    一、P4端口置零可以直接写成P4 = 0X00,类似的P6端口置零也可以直接写成P6 = 0X00
    P4端口置1可以直接写成P4 = 0Xff,类似的P6端口置1也可以直接写成P6 = 0Xff


    二、C语言常用运算符
    1、算数运算符
    加(+)、减(-)、乘(*)、除(/)——————100/99=1,100%99=1
    模(余) 运算符(%):不允许出现浮点型,余数正负取决于被除数正负
    自增 (++i, --i; i++,i--)
    2、位运算符右移(>>) 左移(<<)——————1<<1=10(二进制)
    按位与(&)——————0x11&0x10=16
    按位或(|)——————0x11|0x10=17
    按位异或(^)
    取反(~)
    3、赋值运算符
    += 加赋值 (a += 3 等价于 a= a + 3)
    -= 减赋值(效果类似上面的加赋值)
    *= 乘赋值(效果类似上面的加赋值)
    /= 除赋值(效果类似上面的加赋值)
    %= 求余赋值(效果类似上面的加赋值)
    &= 按位与赋值(效果类似上面的加赋值)
    l=按位或赋值(效果类似上面的加赋值)
    ^=按位异或赋值
    <<=左移位赋值
    >>= 右移位赋值

    三、数据的基本类型
    1.png
    课堂重点:
    1、学会printf的格式化输出
    2、了解进制数(进制转换、逢几进位)
    3、学会加减乘除等运算符(了解基本运算和对应的符号)
    4、了解数据类型和数值范围
    unsigned char:0-244
    unsigned int:0-65535
    char: -255~256
    int: -32768~32767



    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2023-5-29 17:05:12 | 显示全部楼层
    电子DIY小家 发表于 2023-5-29 17:01
    stc8h和stc32g有什么区别?
    ---主要就是内存大小,功能其实都类似
    sct89c51和stc8h只有引脚和中断系统有区 ...

    谢谢谢谢!!!还在认真学中
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2023-5-29 18:10:09 | 显示全部楼层
    本帖最后由 1872978045 于 2023-5-31 20:41 编辑

    第六集(上):
    总结
    每次都要打开最新的软件版本,在软件上可以更新,如果碰到软件有什么问题的话也可以跟官方反馈
    用户手册也要及时更新

    一、基于Delay实现的LED闪烁
    什么是闪烁?有什么用?
    电子闹钟上的“:”一亮一灭的过程叫做闪烁
    1秒=1000毫秒=1000 000微秒

    在工程中添加如下语句:

    #define MAIN Fosc: 24000000UL      //定义一个主时钟
    void delay_ms(u16 ms)            unsigned int(0-65535)
    {
    u16 i;
    do{
       i= MAIN_Fosc/6000;
    while(i--)
    }
    while(--ms_;
    }



    核心程序:
    P40 =0;
    P60 = 0
    delay_ms(500);
    P60 = 1;
    delay_ms(500);

    小结:
    用define在程序前定义一个主时钟,define后不需要加分号
    可以用delay写一个延时1毫秒的函数,然后需要延时多少直接重复多少次

    do while先执行一次再判断括号内条件是否成立,while先判断条件是否成立再执行,括号内为1则是死循环,while内的程序会一直执行

    main函数内定义的变量是局部变量,main函数外定义的变量是全局变量
    a--先执行完本句再减1,--a先减一再执行本句程序

    例子程序:
    a=10

    printf("a的值为:%d/r/n",a);
    printf("a的值为:%d/r/n",a--);

    printf("a的值为:%d/r/n",--a);

    结果:
    a的值为:10
    a的值为:10

    a的值为:8

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-14 06:27 , Processed in 0.077330 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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