找回密码
 立即注册
楼主: hais***

嵌入式老鸟回炉再造打卡帖(STC32位8051单片机学习)

[复制链接]
  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-19 06:09:48 | 显示全部楼层
    第六集 LED闪烁、函数和模块化编程


    通过Delay函数进行软件延时,这里的延时时间,完全取决于系统时钟和while循环一次的指令周期,视频中说的延时0.5s,是否能做到准确,没有提及,看起来灯的闪烁时间差不多。
    函数调用比较简单,基本语法。
    模块化编程,对于大项目,意义更大一些。现在的单片机性能越来越好了,所以对于模块化编程、使用操作系统等都有了更多的选择。模块化编程是一种设计习惯,建议养成。后期会发现,模块化编程很容易,但如何合理划分模块,就是需要练就的内功了。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-19 22:08:31 | 显示全部楼层
    本帖最后由 haishi28 于 2024-3-27 16:38 编辑

    第七集 按键点灯

    讲得很细,按键的抖动是最为常见的现象,软件去抖是必须的。5~10ms,教程里提到。我的经验是10~20ms,印象里。
    LED往左边走,由于是0点亮,1熄灭LED,我会用变量ledData = 0x01; ledData << 1;  P6 = ~ledData;这样就避免了左移后是0补足的问题。
    数组,记住别越界,其他都不是事儿。但一不小心就越界了,尤其是跟指针一起使用时。


    PS:这集的声音又是一会儿大,一会儿小,最好处理一下。


    补充:
    原有的左移实现代码是下图
    截图202403262256541252.jpg

    我觉得通过取反更容易理解,如下图:
    截图202403262258102711.jpg

    先把当前值取反,得到只有一位是1的结果,然后左移,此时最低位补0,再取反则得到想要左移一位的效果。

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-20 08:00:17 来自手机 | 显示全部楼层
    本帖最后由 haishi28 于 2024-3-27 16:39 编辑

    第八集 蜂鸣器
    有源和无源,之前都是通过占空比去调节输出的声音,这里一说有源和无源,倒是不确定之前使用的是有源还是无源了。
    电磁炉的例子挺好,把前面学按键、LED灯和这节的蜂鸣器结合到一起。
    大家可以把家里的电磁炉拿出来,完全按照其功能进行编程,应该挺有意思。
    激发兴趣,是最好的教学方法。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-21 07:12:44 | 显示全部楼层
    第九集 数码管的静态使用

    数码管,在电子世界里,可以说是无处不在。
    截图202403210703559179.jpg
    八段数码管,就是8个LED组成的可以显示0~9和很多字母(注意,是很多,不是全部)。
    截图202403210704417840.jpg

    这里提到静态,简单理解就是LED是一直被点亮,下节的动态,就是利用人眼暂留特性,高频切换被点亮的LED,使得人看到的是都被点亮,而实际是分时点亮。

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-21 23:50:25 | 显示全部楼层
    本帖最后由 haishi28 于 2024-3-22 00:11 编辑

    第十集 数码管的动态显示

    跟上一集对比来看,可以理解何为“动态”。
    重点在硬件的设计差异,或者是功能需求的差异,软件就需要“动态”。
    截图202403210716114304.jpg

    如果用不同的管脚驱动不同的数码管,就只需要静态驱动即可;
    如果如上图所示,复用管脚,且需要“同时”点亮多个8段数码管,就需要软件“动态”刷新,分时点亮每一个8段数码管。


    PS: 这里的括号错了,应该往下挪一行。
    截图202403220010373334.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-22 00:48:56 | 显示全部楼层
    本帖最后由 haishi28 于 2024-3-27 21:17 编辑

    第十一集 定时器的使用

    Timer,没有嵌入式工程师会说不会用。配置时钟,配置溢出重载值,配置中断,启动Timer,就完成了Timer的使用。
    T0x12, T1x12, 不太理解为什么这么写,所以一直记不住对其清零和置1哪个是频率高。今天终于想明白了。
    T1x12 = 0,就是“不乘以(x)12”,所以是低速时钟,其实就是老的51的速度。

    T1x12 = 1,就是“要乘以(x)12”,所以是高速时钟,STC的51的速度,12倍于老51。

    截图202403220030354031.jpg

    补充:
    用了定时器,数码管没有闪烁的情况发生,跟上一集的效果形成鲜明对比。


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-23 05:47:23 | 显示全部楼层
    第十二集 计数器

    外界信号的计数,电机编码器的信号采集,可以计算频率变化,进而推出转速。
    这个编译器的问题,确实以前没遇到过。
    截图202403230526081837.jpg

    另外想提的是ISP这个软件的配置功能,确实很方便:
    截图202403230528552350.jpg

    但有一个小问题,也许这个配置内容在你用的单片机里不支持,要在手册里确认才行。
    比如上面这个管脚配置,在STC12C5204AD里是不支持上拉、下拉等功能的配置的,但界面也是有的。这一点要用户自己注意。
    可以用某个管脚输出方波,用计数器测量方波的频率,通过数码管显示。待我拿到实验箱了,进行测试。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 138 天

    [LV.7]常住居民III

    0

    主题

    387

    回帖

    499

    积分

    中级会员

    积分
    499
    发表于 2024-3-23 08:51:01 | 显示全部楼层
    学无止境
    靡不有初,鲜克有终
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-23 09:12:15 | 显示全部楼层
    本帖最后由 haishi28 于 2024-3-23 13:52 编辑

    第十三集 简单多任务
    为啥我的template是空的?
    截图202403230608171234.jpg 但配置界面里可以看到默认的template 截图202403230626545880.jpg
    另一个工程就可以正常显示。
    截图202403230630364425.jpg

    bdata,这个以前没用过(也可能是用了,忘干净了)。
    截图202403230616593140.jpg


    这集是把前面的几种外设控制放到一起,模块化编程,形成简单系统的过程。有利于将项目由小变大,使得功能移植也变得更加容易。

    提个问题,大家一起思考一下:
    如果长按和短按想分开,具体点说,如果我按下后不松开,直到3s后再松开,只想触发长按,怎么办?
    截图202403230909485921.jpg
    上面的代码,一次长按会触发一次短按+一次长按。
    是不是这样呢?


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    6

    主题

    84

    回帖

    212

    积分

    中级会员

    积分
    212
     楼主| 发表于 2024-3-24 18:04:54 | 显示全部楼层
    本帖最后由 haishi28 于 2024-3-27 07:06 编辑

    第十四集 矩阵按键

    截图202403241656045065.jpg

    记得当年通过软件实现矩阵按键时,是分时扫描,比如P0.6作为检测管脚,对P0.0, P0.1, P0.2, P0.3进行分别置零,当某一个管脚置零后,如果P0.6为低电平,则当前管脚和P0.6相交的那个按键被判定按下。然后再对P0.7进行同样的扫描操作。
    现在是因为准双向口的原因吗?可以不需要扫描了?但基本思路是一样的。
    课后作业,拿到开发板就可以测试了。
    截图202403241807207544.jpg




    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 22:15 , Processed in 0.069599 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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