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

《8051U深度入门到32位51大型实战教学视频》||建议提前赠送实验箱

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-23 06:51:03 | 显示全部楼层
aicube助手非常赞,不用再记寄存器名字了,只要了解原理,直接从软件中点击设置就能生成代码。而且生成的代码可读性非常高,结构清晰,注释明确,用户修改很容易。
截图202505230650383562.jpg
截图202505230651018412.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-23 10:23:23 | 显示全部楼层

第八集:定时器应用
代码debug小技巧分享,略过
多周期任务触发,其实是把时钟作为信号源,在软件里又定义了几个(软)分频时钟,然后通过数组实现多组分频来精简代码。这样实现的软分频时钟可以一次管理多个同时钟源的软时钟,最好还能有响应函数的配置,这个应该可以通过函数指针的方式实现(视频后半段实现了这个功能,点赞冲哥)。

然后冲哥的代码存在一个并发的问题,主函数和时钟中断函数在操作同一个计数变量count,偶然的情况可能会出现一个操作被另一个操作覆盖的问题。

按键检测的问题,我以为会以按键中断的方式实现,没想到会是用定时器触发轮询的方式。两种方法各有优劣吧。

  • 按键触发,需要自己解决误触,反复触的问题。还需要自己想办法计算触摸时长。
  • 定时器轮询,触摸时长的精度受定时器影响,在两个定时器中断期间隔的信号会被忽略,只会对两次轮询期间的状态进行对比。因此如果是高频信号,用这种方式就不能追踪到完整的信号变化形态了。

总结:本集实现了一个软件时钟触发实现周期任务控制的功能,可以根据设置的时钟信号配置多个分频信号,每个信号单独触发调用一个响应函数。使用到了数组、结构体、计时器、中断、函数指针等技术栈。

从这集开始感觉有点伤脑了,非基础的高级功能。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-06-16 09:27:19

30

主题

1201

回帖

2622

积分

超级版主

积分
2622
发表于 2025-5-23 11:14:14 | 显示全部楼层
提前获得 【免费+包邮送】的Ai8051U实验箱
=====现在送的,都可以利用MCU自带的 硬件USB直接仿真,硬件USB直接下载
【免费 + 包邮 送】 送/申样/采购 可上班时间加 如下您对应地区的客服 QQ或微信联系
加STC华南区客服司经理QQ: 2234917869 ;  微信:18012226298  要求 【免费+包邮】 送, 还免费教仿真  
加STC华南区客服刘经理QQ: 3398500488 ;  微信:18106296592  要求 【免费+包邮】 送, 还免费教仿真  
加STC华南区客服佘经理QQ: 614777595;   微信:18106296591 要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服曹经理QQ: 1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服聂经理QQ: 2593903262; 微信:18106296598  要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服吴经理QQ: 1463035472; 微信:19952583954  要求 【免费+包邮】 送, 还免费教仿真
加STC西北区客服孙经理QQ: 1347154513 ;  微信:18106296593  要求 【免费+包邮】 送, 还免费教仿真
加STC华北区客服杨经理QQ: 1638975601 ;  微信:19952583876  要求 【免费+包邮】 送, 还免费教仿真
加STC华中区客服唐经理QQ:2571301708 ; 微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
加STC东北区客服李经理QQ: 1017142298 ;  微信:19952583534  要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服曹经理QQ: 3897745450 ;  微信:18012226281 要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服吴经理QQ: 1463035472 ;  微信:19952583954 要求 【免费+包邮】 送, 还免费教仿真
STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-23 13:57:27 | 显示全部楼层

数码管电路连接

b129779d-47ed-4e57-8afe-6775481395d6.png

考虑到芯片的灌电流能力相对强,选择共阳极。不过做好电流限流也是必须的。

通过74HC595芯片,单线控制多位数码管

46b22e5a-b726-4d12-9f60-6a8620c82d2f.png

SCK: 移位,表明要输入下一位

DATA: 数据为,0或1

RCK:将当前数据输出显示到数码管。

74HC595就是将收到的数据缓存8bit,溢出时将溢出的高位数据输出到下一个74HC595,最后一个则直接丢弃即可。

2个74HC595控制8个数码管

上门串联的方式控制几个数码管就需要几个74HC595芯片。另一种方式是用一个74HC595控制显示的数字,另一个74HC595用户数码管的选择器。然后通过高频率的点亮被选中的数码管(同时其它数码管为灭),在视觉上造成多个数码管同时显示的效果。

a5b96902-32f5-4ece-a5f2-6166712f2211.png

上排数码管引脚由一个595控制,需要主控一个输出引脚;下面数码管引脚需要一个595控制,需要主控一个输出引脚。

知识点,8051单片机中,整型变量左移/右移操作后,高位溢出会自动保存到CY寄存器中。在普通8051单片机中,没有浮点数,也没有高位数的乘除法,需要通过这种溢出位的方式在软件中设计算法实现。

时间显示

  1. 定义计时器,每1s中,内部时间数据加1s,满60s加1分钟,满60分钟加1h,满24h清零
  2. 每1ms刷一次,一次将时间数字、分隔符显示到数码管上。

仿真

有点谜,为啥要为了仿真还要多学一套接口呢?

总结

本集写了一个2个595芯片控制8位数码管的驱动程序,然后做了一个时间显示效果。链一下源码以备忘。https://www.stcaimcu.com/forum.php?mod=attachment&aid=NzY0ODR8N2NkZGZmNWV8MTc0Nzk2OTcxMXw0MTE4NXwxMTkwMg%3D%3D

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-23 19:09:06 | 显示全部楼层
第10集,仿真模拟器
仿真模拟的原理是在单片机中通过串口发送指令给电脑上位机ISP,ISP解析相关命令并在界面上显示仿真结果。
底层有定好的协议,因为现在库已经封装了这些指令接口,所以不需要专门研究这些数据协议,只要知道去哪里查这些指令接口就行了。
1. include usb头文件,链接相应的lib文件
2. 在ISP软件中查找对应仿真的接口函数
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-24 07:35:22 | 显示全部楼层
第11集,实现了一个按键矩阵扫描功能,感觉这个代码很冗,我不喜欢。这集不做总结。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-24 08:13:14 | 显示全部楼层

第12集,复位

  • 硬件复位
    • 上电复位,通电自动复位
    • 低压复位,电压过低时复位(复位又解决不了低压问题)
    • 复位脚复位,下拉复位脚P4.7
    • 看门狗复位,需要定期喂狗(WDT_FLAG=0),不喂就会被迫复位。相关寄存器:WDT_CONTR
  • 软件复位
    • IAP控制寄存器:IAP_CONTR,进行软复位出发,及设置从哪里开始复位。这是不停电下载的实现基础。
      • 系统ISP区:进行下载检测,所有寄存器数据复位
      • 用户系统区:用户数据保留,
      • 用户程序区:用户数据保留,两者什么区别?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-24 10:22:31 | 显示全部楼层

51单片机特有的C语法

  • idata, xdata修饰变量的存储区域
  • sbit: 单位寄存器
  • sfr: 8位寄存器
  • far:32位指针(地址)
  • P2^0: 取寄存器P2的第0位(右边起)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-24 10:34:57 | 显示全部楼层

VSCODE开发环境搭建

VSCODE的代码提示、跳转比Keil优秀的多,只是对51本身需要进行一些适配。编译没问题,下载还需要依赖ISP软件。

  1. 安装VSCODE,安装VSCODE的C/C++插件

  2. 安装配置Keil,按网上教程设置

  3. 安装VSCODE插件Keil uVission Assistant,按照插件说明设置. (另一个人气比较往的Keil Assistant不支持C251)

    0c4946a5-f70e-440c-930b-62e441bd2c68.png

  4. 建立一个专门的51工作区,

    • 文件 -> 将工作区另存为,保存.code-workspace文件
    • 打开.code-workspace文件,在其中添加
    "settings": {
    		"C_Cpp.default.defines":[
    			"__C251__",
    			"__VSCODE_C251__"
    		],
    		"C_Cpp.default.includePath":[
    			"${workspaceFolder}/**",
    			"Keil安装目录/C251/INC",
    			"Keil安装目录/C251/INC/STC",
    		],
    		"files.encoding": "gbk"
    }
    

    a5b1d54f-d209-4e13-9512-dee3d8b44504.png

  5. 在VSCODE中,因为51的C语言跟标准C不兼容,而出现一些错误提示。

    • 将如下头文件内容放到一个头文件里,头文件可放到项目里或者Keil INC头文件目录中
    • 并在项目主程序一开始的地方include。
    • 其中的__VSCODE_C251__宏是在上面的.code-workspace中定义的,只在vscode环境中生效,不会对keil编译产生影响。
    #ifdef __VSCODE_C251__
    #define INTERRUPT(x)
    #define bit BOOL
    #define sbit BOOL
    #define sfr char
    #define xdata
    #define far
    #else
    #define INTERRUPT(x) interrupt x
    #endif
    

    b4826185-fb2c-42e6-9626-aba19a350fce.png

  6. 将Keil项目文件夹加入到VSCODE的工作区,进行开发、编译

    d5d41a8f-aa10-4bf3-ae03-ce54641a9e2d.png

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-25 08:06:16 | 显示全部楼层

第13、14集,中断

中断类型很多,对我目前不是很必需,先做一些总结吧。

中断号列表

外部中断(INT)中断类型,触发引脚,中断号,使能,配置

中断类型 触发源 信号配置 使能
外部中断INT INTn引脚 上升沿、下降沿、双边沿 全局,INTx
端口中断 所有端口
(共享中断号)
上升沿、下降沿、高低电平 全局,端口,端口x
定时器 时钟 预分频,1/12T分频,C/T=0,
gate(仅T0,T1, 开启后通过INTx使能),
重载模式及重载值(最大值-时钟数),
信号输出(TxCLKO)
全局,定时器x,
GATEx,TxCLKO
计数器(定时器变种) Tn引脚 C/T=1,gate,重载模式及重载值,
信号输出(TxCLKO)
同上

定时器原理图

f6341036-da37-4640-b7c0-95cbc8c72dd2.png

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 11:17 , Processed in 0.221483 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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