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

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

[复制链接]
  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-23 01:19:12 | 显示全部楼层
    【自学】【第五集:C语言运算符和进制数入门上】
    为什么PC机上的printf直接就能输出,而单片机上的printf需要在主循环中加代码。
    答:PC机是多任务系统,printf函数只需要把要显示的内容存到输出缓冲区,接下来操作系统就会自动通过内部的屏幕驱动,
    把缓冲区中的内容输出到屏幕上,其中还有更复杂的比如字体之类,也都由操作系统自动完成了。
    但在单片机中,只有一个CPU,并且这个CPU正在运行的是我们的程序,因此即使printf把内容输出到了缓冲区,
    也没有人帮我们完成PC机上的后续操作。
    而主循环中的这些代码,就是实现printf将内容写入缓存区后的操作,循环会不断检测缓冲区中是否有内容,
    有内容则把这些内容输出到USB中,而PC机上的STC ISP会监视USB过来的输出内容,
    然后把内容显示在STC的窗口中。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9234

    回帖

    1万

    积分

    管理员

    积分
    13942
    发表于 2023-6-23 07:09:13 | 显示全部楼层
    节日快乐 !  学到第13节,简易多任务处理,
    就提前申请个实验箱,帮助提高学习效率
    凡是8051连的兄弟,认真学的,STC就必须当兄弟来认真支持
    1.png
    深圳国芯人工智能有限公司-教学视频 (stcai.com)


    全国大学生智能车竞赛,全国大学生电子设计竞赛,STC 32位8051,最快 1T 8051选型,  全部【免费+包邮送】
    www.STCAI.com,           STC全新官方网站,下载资料 !
    www.STCAIMCU.com,  STC全球32位8051爱好者技术互助交流社区论坛,技术交流,视频学习 !
    【免费+包邮】 送/申样/采购热线:0513-55012928、0513-55012929、0513-55012966
    工作时间:  8:30-12:00  13:00-17:30(周一 到 周五, 法定节假日除外),也可加如下 QQ 或 微信 申请
    加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592  要求 【免费+包邮】 送, 还免费教仿真  
    加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
    加STC华东区客服聂经理QQ:2593903262;微信:18106296598  要求 【免费+包邮】 送, 还免费教仿真
    加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593  要求 【免费+包邮】 送, 还免费教仿真
    加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876  要求 【免费+包邮】 送, 还免费教仿真
    加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
    加STC东北区客服张经理QQ:3141888640 ;微信:19952583265   要求 【免费+包邮】 送, 还免费教仿真
    加STC西南区客服张经理QQ:3141888640 ;微信:19952583265   要求 【免费+包邮】 送, 还免费教仿真


    STC-USB Link1D /【专业仿真器,全自动在线下载器/自动停电上电,脱机烧录器/可限制次数,USB转双串口工具】
    及全套 STC-ISP 下载生态线,通信时间几乎忽略


    1.png
    信号发生器演示视频,STC32G12K128实验箱,老梁示波器 - STC 实验箱/核心功能实验板,原理图,MCU结构讨论区,大学教材 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-24 01:31:20 | 显示全部楼层
    本帖最后由 OstrichFly 于 2023-6-24 01:32 编辑
    神农鼎 发表于 2023-6-23 07:09
    节日快乐 !  学到第13节,简易多任务处理,
    就提前申请个实验箱,帮助提高学习效率
    凡是8051连的兄弟,认真 ...

    谢谢管理员捧场,谢谢冲哥的课程,谢谢STC的活动!
    虽然很想要实验板,也不能为了这个囫囵吞枣,要认真学习。
    今天放假玩耽误了,马上继续。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-24 02:36:16 | 显示全部楼层
    【打卡】【第五集:C语言运算符和进制数入门下】
    1:端口^数字 在程序中表示端口寄存器的第几位,在电路中表示这一组端口针脚中的第几个针脚
       每组端口有8个针脚,对应C语言中的一个char(8位)变量。
       变量的某个bit为0,则对应的端口输出低电平,
       反之,变量的某个bit为0,则对应的端口输出高电平。
    2:也可以通过直接对一组端口的变量赋值,一次性设置这一组针脚的电平,如:
       P6 = 0x00,则会将P6这一组针脚的8个针脚全部设置为低电平。
    3:Keil C支持通用C语言的全部运算符,如加减乘除等。
    4:Keil C支持各种通用C语言的数据类型,除了常用的char,int,long等之外,
       还有bit, sbit, sfr, sfr16
    5:在STC32G中, short int和int都是16位,long int是32位。
    6:long int与CPU的位数相关,STC32G中的long是32位,
       这也说明了STC32G是32位单片机。
    7:在STC32G中, float和double都是32位,这与常规C语言不通,
       常规C语言中double比float要长。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-25 00:49:17 | 显示全部楼层
    本帖最后由 OstrichFly 于 2023-6-25 00:51 编辑

    【第六集:LED闪烁和花式点灯上】【打卡】
    1:9.6实验箱是对9.4实验箱的更新版,区别在9.6实验箱新增对示波器实验的支持。
       不过9.4实验箱目前已经停产和停售了。
    2:STC ISP启动时会自动检测更新,我们需要保持这个软件处于最新版本,
       因为新版本会修复旧版本中发现的问题。
    3:STC ISP的下载包中还人性化的包含了一些第三方的USB转TTL驱动,
       一般最好使用厂家自带的,但如果找不到,这个驱动就能帮上忙。
    4: 很多程序中都会使用到LED闪烁,比如钟表中间的秒点
    5: while是先判断再循环,do while是先循环再判断
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-25 00:49:40 | 显示全部楼层
    本帖最后由 OstrichFly 于 2023-6-25 00:51 编辑

    【第六集:LED闪烁和花式点灯上】【自学1】
    为什么课程中的delay_ms函数中使用双循环?
    猜测有2个原因,一个是内层循环总是延时1毫秒,外层可以按照输入的参数控制循环次数,这样比较清晰。
    另一个原因是避免整数溢出,STC 32G中的整数是16位,即使是无符号,最大也只有65535,很容易溢出,
    但可以使用long型解决,因此这个可能不是主要原因。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-25 00:49:55 | 显示全部楼层
    本帖最后由 OstrichFly 于 2023-6-25 00:51 编辑

    【第六集:LED闪烁和花式点灯上】【自学2】
    循环中为什么除以6000?
    这个是厂家给的经验数据,频率除以6000后,正好能让单片机在循环中耗费1毫秒,
    猜测频率/1000表示每毫秒运行多少次单周期指令,而Keil编译出的循环和变量自减代码,
    在每个循环中需要6个周期,因此是频率/1000/6 = 频率 / 6000。
    但这有个问题,就是如果keil升级导致编译出更优化的代码,比如变成了5个周期的指令了,
    或者单片机的指令周期发生变化,则这个代码就出现偏差了,可能处于兼容性,无论是Keil还是厂家,
    都尽量避免这种修改吧。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-26 00:48:57 | 显示全部楼层
    【第六集:LED闪烁和花式点灯下】【打卡】
    1: #define用于定义内容的别名,通常用于定义常量,比如单片机主时钟
    2: 函数使用,需要函数定义、函数声明、函数调用这三步
    3:函数没有返回值,则写void
    4:模块化编程,每个功能块由.c和.h组成
    5:模块化编程能让代码更清晰,特别是在大型项目中更需要
    6:.h文件中需要使用#ifndef xxx避免头文件重复引用
    7:.c文件需要#include对应的.h文件
    8:函数的声明放在.h中,定义放在.c中
    9:使用模块需要添加引用路径到模块所在目录
       并把.c文件加入工程
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-26 00:49:14 | 显示全部楼层
    【第六集:LED闪烁和花式点灯下】【作业】
    课后作业编程SOS求救灯:
    void blink3(int ms)
    {
        P60 = 0;
        delay_ms(ms);
        P60 = 1;
        delay_ms(ms);
        P60 = 0;
        delay_ms(ms);
        P60 = 1;
        delay_ms(ms);
        P60 = 0;
        delay_ms(ms);
        P60 = 1;
        delay_ms(ms);
    }

    void main()
    {
        sys_init();
        usb_init();
        EA = 1;

        P40 = 0;
        while (1)
        {
            blink3(250);
            blink3(500);
            blink3(250);
        }
    }
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    1

    主题

    59

    回帖

    785

    积分

    高级会员

    积分
    785
     楼主| 发表于 2023-6-27 01:03:36 | 显示全部楼层
    【第七集:按键点灯上】【打卡】
    1: 按键分常开和常闭,通常的按键是常开开关,也就是不按时候开路,按下闭路。
       相反,常闭开关是不按时候闭路,按下开路。
    2:一般的按键设计是,通过一个上拉电阻接VCC,
       上拉电阻与按键之间通过保护电阻接单片机引脚。
       按键没有按下时,由于上拉电阻的作用,单片机引脚呈高电平,
       按键按下后,对地短路,因此单片机引脚呈低电平。
    3:按键的动作并非理想,在按下和弹起的瞬间,由于内部弹片的作用,
       会导致瞬间的时通时断,如果单片机对这个瞬间进行采样,可能触发异常动作。
       因此可以在单片机内部的代码中,设计一个10ms的延时,
       当10ms后的状态与10ms之前相同是,才判断为按键的按下或松开。
       这个动作叫做按键消抖。
    4:经典的按键消抖代码类似:
       if (KEY == 0) {
           delay_ms(10);
           if (KEY == 0) {
               执行动作
           }
       }
    5: 在主循环中可以同时检测多个按键的动作
    6: 通过代码中的逻辑,可以组合出多种按键动作,
       比如用点亮LED来说:
       a. 按下持续点亮LED
       b. 按下点亮LED,松开熄灭LED
       c. 按下点亮LED,再按下熄灭LED
       d. 按下并松开时点亮LED,再按下并松开时熄灭LE
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-28 19:57 , Processed in 0.068423 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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