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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-27 10:40:24

11

主题

425

回帖

1971

积分

版主

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

积分
2322
发表于 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);
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

积分
2322
发表于 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:程序中重复递增的动作,比如控制数码管增加,
   用循环比重复代码清晰,并且不容易出错。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

积分
2322
发表于 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中的工具进行,
    使用方便并且不容易出错。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

积分
2322
发表于 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:使用计数器时,可能存在一个溢出问题,这时可以定义计数器中断,
   该中断只会在溢出时被调用,这时候就可以进行溢出处理,
   比如记录溢出的计数。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-05-02 00:02:31

2

主题

66

回帖

2322

积分

金牌会员

积分
2322
发表于 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, 2025-5-2 06:57 , Processed in 0.119895 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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