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

【实验箱已送】【跟着冲哥学32位8051】学习日记

[复制链接]
  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-6-27 01:03:55 | 显示全部楼层
    【第七集:按键点灯上】【自学】
    课程的程序中,只对按键的按下动作进行消抖处理,没有对按键的松开进行消抖处理?
    在按键松开时,也会抖动,但程序在第一次检测到松开时,已经执行完松开处理,
    因此接下来的抖动,将触发按键的按下流程,但由于按键的按下流程已经有了消抖处理,
    所以不会造成误触发。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-6-28 00:26:52 | 显示全部楼层
    【第七集:按键点灯下】【打卡】
    1:通过移位操作,可以控制类似流水灯的效果
    2:移位操作移进来的数字是0,如果希望移动进1,需要通过代码给补上去
    3:如果只进行移位操作,则按完一圈就不会再有灯亮了,
       如果希望灯循环点亮,可以通过代码在一圈转完后,重新设置初始的第一个灯。
       也就是将寄存器重新赋值为0xFE。
       if (P6 == 0xFF)
       {
           P6 = 0xFE;
       }
    4: 使用数组可以存储相互关联的一组数字,
       合理的使用数组可以是代码简化。
    5: 使用索引访问数组时,要注意索引不能超过数组的长度
       可以在增加索引变量时进行检查。
    6:改变数组中的元素,就能影响使用数组的代码的动作,
       这比直接改代码要简单,因此尽可能的使用数组而不是固定代码来实现功能。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-6-29 01:27:19 | 显示全部楼层
    【第八集:蜂鸣器的应用】【打卡】
    1:蜂鸣器分有源蜂鸣器和无源蜂鸣器
    2:有源蜂鸣器内部带震荡源,通电就能响声音
    3:无源蜂鸣器内部不带震荡源,直流电无法让它响。
    4:有源蜂鸣器由于多了震荡源,因此价格一般会比无源蜂鸣器贵一些
    5:一般可以通过蜂鸣器背面去判断,如果背面裸露了电路板,则为无源蜂鸣器,
       但过来,如果背面是黑胶,则是有源蜂鸣器。
    6: 实验板上带的是有源蜂鸣器,这个蜂鸣器控制比较方便
    7:电路中,蜂鸣器一般要使用三极管如SS8550进行扩流
       并且还要接个电容进行滤波
    8:代码中,控制蜂鸣器与控制LED灯的方法是类似的。
    9:实现流水灯,除了上节课使用的数组以外,还能用1左移取反的方法实现。
    10:结合LED、蜂鸣器,可以实现很多家电的控制,比如电磁炉的开关机,
       和模式设置。
    11:编写程序要细心,比如原先的程序中关机再开机,模式是关机之前的状态,
       原因就是开机时没有重新设置模式变量,即使硬件完全正确,
       错误的代码也会生产出有问题的产品。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    335

    回帖

    1629

    积分

    版主

    积分
    1629
    发表于 2023-6-29 08:58:29 | 显示全部楼层
    本帖最后由 STC爱好者 于 2023-6-29 08:59 编辑

    楼主学习精神可嘉,学到第13节,简易多任务处理
    提前送您实验箱,帮助提高学习效率
    凡是8051连的兄弟,认真学的,STC就必须当兄弟来认真支持

    点评

    谢谢版主支持  发表于 2023-6-30 00:06
    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-6-30 00:07:45 | 显示全部楼层
    【第八集作业】【打卡】
    1: 程序中常见的错误是把==写成=,因为这个错误不会被机器检查出来,
       因此要格外小心。
    2: 程序中,不一定要在按键检测中执行动作,而是可以在按键检测中设定模式等变量,
       在主循环中执行根据变量的值去执行动作
    3: 用户的习惯一般是按下时产生工作,因此一般需要把动作代码放在等待按键松开之前。
    4:对于一些设备,关机时重置变量很重要,
       否则上一次开机时的状态会带入下一次开机时,导致动作异常,
       课程中第二次演示了这个问题,足见这个问题很容易出现,并且隐藏的比较深。
    5: 编程重点在于对功能的灵活应用,把简单的单点知识串联起来,
       联合起来发挥作用,是编程中最需要的部分。

    对课程中程序的改善:
    在按键3按下时如果没有选择模式,课程中的处理是什么都不做,
    其实可以通过蜂鸣器响3声提醒用户设定错误,比如这个代码:
    if (RunMode > 1)
    {
        原来的程序
    }
    else
    {
        BEEP = 0;
        delay_ms(10);
        BEEP = 1;
        delay_ms(10);
        BEEP = 0;
        delay_ms(10);
        BEEP = 1;
        delay_ms(10);
        BEEP = 0;
        delay_ms(10);
        BEEP = 1;
        delay_ms(10);
    }
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-6-30 21:23:51 | 显示全部楼层
    【第九集:数码管的静态使用】【打卡】
    1: 数码管有多种类型,除了常见的计算器上的数字数码管,
       还有进度条数码管,以及其他类型的数码管。
    2:数码管其实就是8个灯的组合,包含7个数字灯和一个标点灯。
    3:数码管分为共阴和共阳,他们通过尾缀区分,尾缀为A表示共阳,尾缀为K表示共阴。
    4:共阴数码管是负极接在一起,共阳数码管是正极接在一起。
    5:多位数码管其实是共阳级或共阴级有多个,其他脚全部并联,
       这意味着这些数码管如果一起点亮,则只能显示同样的数字。
    6:实验箱中包含了8个数码管,并联成共阳接法,每路的阳极使用三极管扩流,
       8个三极管分别有P7.0~P7.7控制。
    7:数码管的不同数字,其实就是程序中不同位的组合,也就是说,
       我们甚至可以控制数码管显示数字以外的图像,
       这需要使用excel去计算相应的位图。
    8:教程中已经使用Excel算出了数码管每一个数字的显示数组,
       今后编程时直接使用这个数组就可以了。
    9:程序中重复递增的动作,比如控制数码管增加,
       用循环比重复代码清晰,并且不容易出错。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-7-2 01:06:40 | 显示全部楼层
    【第十集:数码管的动态显示】【打卡】
    1:多位数码管的显示,是由轮流显示数码管的每一位实现的。
       也就是说,其实在同一时间,只有一个数码管在显示,
       但是它们以极快的速度循环,就会让眼睛看不出它们的亮灭,而认为是同时显示。
    2: 每个数码管的显示时间,一般需要大于1ms,但又考虑到速度需要快于眼睛的分辨能力,
       因此需要小于20ms。
    3:程序中,数码管的位码、和要显示的数字,同样可以通过数组来控制。
    4: 可以通过创建20个元素的数组,来让数码管显示带小数点的数字
    5:可以使用类似/10 % 10的方法,去去数字的十分位、百分位、千分位等。
    6:对于相同的代码,可以使用函数让程序简洁。
    7:数码管循环显示相当于减少了每个数码管的亮度,
       事实确实如此,除非单独控制每个数码管,否则无法做到让所有数码管持续显示。
       但一般情况下,我们没有必要一直让数码管显示在最高亮度,
       因此循环显示会虽然会降低亮度,但仍然处于眼睛的分辨范围。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-7-2 22:13:02 | 显示全部楼层
    【第十一集:定时器的使用】【打卡】
    1: 定时器是硬件实现的,可以实现硬件计时,
       也可以让程序每隔一定时间完成一个任务
    2: 中断指的是在主程序运行时,如果发生中断,则会执行中断代码,
       执行完会跳回主程序。
    3:定时器与中断结合,可以实现定时一段时间产生一个中断的效果。
    4:STC32G内部包含5个定时器/计数器。
    5:要操作定时器,需要初始化定时器状态,牵涉到分频、自动重载、允许计数等一系列寄存器。
    6:系统中5个定时器,对模式的支持不同,T0支持的模式最多。
    7:使用定时器时,需要算准THx和TLx的值。
    8: 中断函数必须使用interrupt关键字
    9:不同的定时器,对应不同的中断号。
    10:将数码管刷新函数写入定时器,则数码管刷新总是会执行,
        不再受到主程序的忙循环影响。
    11:定时器计算可以使用STC ISP中的工具进行,
        使用方便并且不容易出错。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-7-4 01:32:10 | 显示全部楼层
    【打卡】【第十二集:计数器的使用】
    1: 定时器本质上是一个计数器,当它的输入接到系统时钟(或系统时钟/12)上时,
       表现为定时器。
    2: 可以使用TxC/T控制定时器是作为定时器还是计数器使用,
       本质上是连接定时器的输入到哪边。
    3: 定时器/计数器的启停,不仅受到TR的影响,如果GATE为1时,
       还受到INTx的影响。
    4:Keil有个著名的0xfd问题,导致字符串中不能包含指定汉字,
       常用的有:除、过、积、三、升、数、听等。
       可以通过手工插入\xfd解决,网上的补丁可能导致其他问题,因此推荐Keil官方的方法。
       该问题不仅影响程序,还影响项目目录名等。
    5:使用计数器,除了进行简单的案件计数,还能用来做其他功能,
       比如电动机转速测量。
    6:作为计数器使用时,不一定必须触发中断,
       也可以直接读取寄存器中的计数值。
    7:定时器除了可以进行周期性动作,它本身也是一个精确的时钟源,
       可以在准确的时间执行某个动作。
    8:教程中使用按键模拟电动机上的光电传感器或电流变化传感器,
       但原理相同。
    9:使用计数器时,可能存在一个溢出问题,这时可以定义计数器中断,
       该中断只会在溢出时被调用,这时候就可以进行溢出处理,
       比如记录溢出的计数。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    22 分钟前
  • 签到天数: 136 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    789

    积分

    高级会员

    积分
    789
     楼主| 发表于 2023-7-5 01:26:46 | 显示全部楼层
    【打卡】【第十三集:简易多任务处理上】
    1:模块化编程可以时程序结构更清晰
    2:前面12节课的内容,可以总结为LED数码管控制/按键/蜂鸣器/定时器这几部分
       因此可以把上述的每部分放入单独的模块里完成
       每个模块由C文件和H文件组成。
    3:在函数前添加函数头是一个好习惯,函数头里面可以包含:
       名称、功能、参数、版本、作者、修改日期等。
    4:通过Keil的模板功能,可以自动添加函数头。
    5:extern关键字用于说明该函数是在其他的C文件中定义的
    6:函数中的static指的是静态变量,该变量的值在函数退出后也会保留,
       到再次进入函数时仍然会是原来的值。
    7:引脚定义一般使用define定义,这样在改变电路设计时,
       只要改变define的值,而不用改变程序。
    8:LED的8个灯,其实可以看作一个数码管,因此在程序刷新中,
       可以使用统一的方法控制。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 02:14 , Processed in 0.078650 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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