找回密码
 立即注册
查看: 370|回复: 2

STC界的新菜鸟,一起学习一起飞!哈哈哈

[复制链接]
  • TA的每日心情
    开心
    昨天 08:56
  • 签到天数: 147 天

    [LV.7]常住居民III

    1

    主题

    14

    回帖

    227

    积分

    中级会员

    积分
    227
    发表于 2023-8-11 12:39:43 | 显示全部楼层 |阅读模式
    本帖最后由 takalama 于 2023-12-19 15:20 编辑

    STC的新菜鸟来了,希望多多关照,一起来学飞
    序:
        STC32G12K128-实验箱-V9.6我来了!
    Day1:
        番外篇:冲哥(令狐大侠、十年老菜鸟),不用谦虚谁还不是第一次。
        内容:认识单片机
        1、什么是单片机?
            (1) 一种集成电路芯片;
            (2) 外观:看个人需求,这边选择和冲哥一样(STC3212K128-LQFP64);
            (3) 试验箱(买个/白漂),或者有能力的DIY一个(呵呵,菜鸟先就算了);
        2、功能
            (1) 总的来说就是做有规律可循的控制应用;
            (2) 用途:仪器仪表、家电、医用设备、航空航天、汽车电子,基本遍布你所熟悉的方方面面;
                ① 技巧:淘宝也是一个可以快速解决未知之谜的圣地;
        3、冲哥解疑答惑
            (1) 30岁还能学单片机吗?
                ① 年龄不是问题,兴趣最重要,开心就好!
            (2) 新手学STC的51还是STM32那些?
                ① 个人推荐51入门,期待STC33;
            (3) 51单片机淘汰了嘛?
                ① 不可能,绝对不可能;
            (4) 怎么才算入门单片机了?
                ① 跟着冲哥即可(so easy!);
                ② 挑几个竞赛小项目试试;
            (5) 小学生可不可以学习单片机?
                ① 可以(图形化编程,逻辑思维培养)
            (6) 做一个普通项目的单片机都需要掌握什么才能不会感觉有压力?
                ① 方法很重要;
                ② 有压力找官网;        
            (7) 汇编有没有必要?
                ① 新手还是先C,遇到需要汇编再用;
            (8) 单片机用库函数好还是寄存器好?
                ① 通用性,寄存器方便修改;个人推荐寄存器;
            (9) STC单片机到底好不好?
                ① 好,非常好(不用谦虚);
                ② 官网技术总工坐阵;
                ③ 合适就是最好;
            (10) 以前从来没有学过单片机,目前还在上班,还能学吗?
                ① 能;
    4、冲哥建议
            (1) 静心、沉气;
            (2) 多动手;
            (3) 举一反三,发散思维;
            (4) 多看(资料、别人问题、自己问题);
            (5) 逛论坛(新鸟、老鸟各有所长);
            (6) 动手做项目(没项目找竞赛题);

    Day2
        硬件:STC大学计划实验箱-V9.4
        内容:了解硬件
         1、开发板介绍
            (1) 蜂鸣器、调试接口、RS232电路、Flash扩展、RS232接口、USB、LED、LCD、
                 独立按键、矩形键盘、24C02、PWM模拟DAC、基准电压、ADC按键、NTC测温18B20、万能板、LED指示灯、数码管、电压比较、红外接收、红外发射;
         2、举例说明了18B20应用、按键、ADC按键、PWM模拟DAC(了解大概意思即可);
              (1) 模数/数模;
              (2) 定时器炸弹、128*64可以模拟;
         3、做了一些芯片的基本讲解(对试验箱有个大体概念);
         4、课后作业
              (1) 想一个项目,作为自己的第一个产品;

    Day3
        工欲善其事,必先利其器
        内容:开发环境搭建和程序下载
        1、STC-ISP:所有STC的单片机下载工具(官网下载最新版即可);
        2、STC32手册:工具书;
        3、PDF阅读器:WPS、福昕(自己选用起来舒服的);
        4、C251:还是keil,正常安装就行;
        讲解工具的安装和使用技巧,适合自己的就是最棒的;
        建议:程序包流水灯动手下载一个程序,依次解决遇到的各种设置问题,加深印象;

    Day4
    开土动工
        内容:建立工程点亮一颗LED上
        1、LED点亮原理
                ① 了解基本硬件电路,GPIO的概念(传统单片机的IO口);
        2、新建工程
                ① 跟着手册创建工程,敲完这个工程,你会发现各种意想不到的状况(标点符号、大小写、单词),没有试验箱一样收获多多;   
        3、 点亮第一个LED
                ① 举一反三,拓展思维(其实宏定义是个好东西);
                ② SFR寄存器的引入(操作内容后期慢慢分解);
        例:
        /*Demo:点灯*/
        //------------------------------------------------------------------------------------------------
        sfr P0        =        0x80;        //P0口设置
        sfr P0M1   =        0x93;      
        sfr P0M0    =        0x94;

        sfr P4        =        0xC0;      //P4口设置
        sfr P4M1   =        0xB3;      
        sfr P4M0    =        0xB4;

        sfr P6        =        0xE8;       //P6口设置
        sfr P6M1   =        0xC8;      
        sfr P6M0    =        0xCC;

        sbit P40     =        P4^0;     //三极管控制引脚
        sbit P60     =        P6^0;     //LED控制引脚

        void main()
        {
            P0M0 = 0x00;                //准双向模式
            P0M1 = 0x00;

            P4M0 = 0x00;
            P4M1 = 0x00;

            P6M0 = 0x00;
            P6M1 = 0x00;

            while(1)                         //大循环
            {
                //P0++;
               P40 = 0;
               P60 = 0;
            }
        }         
        //------------------------------------------------------------------------------------------------

    Day5
    开土动工
        硬件:STC大学计划实验箱-V9.4
        内容:建立工程点亮一颗LED下  
        4、实现自动下载工程;
                ① 优点:不需要每次断电(手册5.15有详解,照本宣科即可,此处不需要发挥你的想象);  
                ② 了解头文件:COMM/STC.h 和 COMM/usb.h;
                ③ 拿来主义(复制过来直接用);     
       
    Day6:
        内容:C语言运算符和进制数入门上
        1、C语言printf函数的实现;                         //常规用法,不懂补充C基础知识
                ① printf("Hello World!");
                ② printf("室内温度:%2f\r\n",11.2);      
        2、数的进制:2/10/16进制;
                ① 0、1;
                ② 0、1、2、3、4、5、6、7、8、9;
                ③ 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;
                提示PC端的计算器是个好东西;

    Day7:
        内容:C语言运算符和进制数入门下
        2、数的进制:2/10/16进制;
                实际用途举例:
                        P4端口                          P4^7      P4^6      P4^5      P4^4      P4^3      P4^2      P4^1      P4^0
                        P4 = 0x00                        0            0            0             0            0             0            0             0
                        P4 = 0xEE                        1            1            1             0            1             1            1             0          
                        0xEE 和 11101110 和 238  
        3、C语言常用运算符;
                ① +,-,*,/、模(余);
                ② ++i,--i,i++,i--(注意先后顺序,先计算后加减/先加减后计算)
                ③ >>、<<、&、|、^、~(实操一下很容易理解);
                ④ 其他+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=(同上);
        4、数据的基本类型;  
            
         
    Day8:
        内容:LED闪烁和花式点灯上
        硬件:STC大学计划实验箱-V9.6(多了一个示波器试验)、软件和手册官网都更新了
        #define MAIN_Fosc 24000000UL          //IRC系统时钟,方便后期修改(宏定义的小技巧)
        1、基于Delay实现的LED闪烁;
                ① void delay_ms(u16 ms)               //延迟多少毫秒,注意使用时的一个小弊端
                    {
                        u16 i;
                        do
                        {
                            i = Main_Fosc/6000;
                            while(--i);
                        }
                        while(--ms);
                    }   
                   拓展:do while、for,都可以做延迟,STC_ISP下载器提供有样例;  
         
    Day9:
        2、函数的使用;
                ① 函数定义
                    返回值    函数名称(入口参数)
                    {
                        函数要执行的功能;
                    }
                    注意格式,按要求办事;
                ② 函数声明
                    返回值  函数名称(入口参数);      //使用前要打招呼(先声明)
               ③ 函数调用      
                     函数名称(入口参数);                  //声明过了,别人就可以呼叫你
        3、新建文件,使用模块化编程;
                 新建xxx.c 和 xxx.h文件,代表一个功能块
                 xxx.h格式:
                 #ifndef __XXX_H
                 #define __XXX_H
                调用头文件
                函数声明
                #endif

                 xxx.c格式
                 #include “xxx.h”
                 函数定义
                 添加文件一定要记得引用路径和添加到工程里;
                 十年老菜鸟得经验所得(建议使用,后期受益多多哦),当然也可以任性不用。

    Day10:
        内容:按键点灯上
        作业分析:
             void SOS_Led(void);  //三长两短LED闪烁
             用延迟函数实现,对P60亮灭200(和500)毫秒得延迟实现,可自行调整参数观察显示效果
        1、按键的原理;
              机械按键:自身特性,导致触电断开、闭合时据不完全统计会有5-10毫秒的接触不良(需要做按键消抖处理);
              思考:机械方面是否能解决呢?
        2、按键的代码实现过程(KEY按需宏定义需要控制的引脚);
              if(KEY == 0)                           if(KEY == 0)
              {                                             {
                  Delay_ms(10);                         Delay_ms(10);
                  if(KEY == 0)                            if(KEY == 0)
                  {                                              {
                      执行功能;                                 while(KEY == 0)
                  }                                                     执行功能;
              }                                                   }
                                                              }
             做好CV工程师;
        3、按键的应用
             按键的各种玩法:
             按下LED点亮,松开熄灭;                      //消抖,判断按键是否按下
             按下LED熄灭,松开点亮;                      //同上,反过来
             按键按下一次,LED状态改变一次;        //消抖,判断按键是否按下,取反

    Day11:
        内容:按键点灯下
             按键按下一次,LED往左边走一个;        //消抖,判断按键是否按下,移位
        4、数组的使用;
             ① 定义:类型 名称[长度] = {数值};
             ② 赋值:名称[索引] = 数值;
             提前把需要设置的值存入数组,然后需要的时候调用;
        提示:多多联系,举一反三;

    Day12:
        内容:蜂鸣器的应用
        1、认识蜂鸣器;
             ① 有源、无源蜂鸣器;
                 有钱能使鬼推磨,有源的给电就响;无源需要给定频率;
        2、控制原理;
             ① 按键改写,按下给电,响(试验箱的蜂鸣器是有源的);
        3、蜂鸣器实战应用;
             ① 电磁炉;
             ② 洗衣机;                 
        4、课后作业(按键3);

    Day13:
        内容:课后作业(按键3)
        敲代码很枯燥,但效果展示让人兴奋,欢迎更多朋友入坑。
        大概思路:
        1、3个输入:开机、模式、运行/停止;
        2、开机给标志位(同时打开蜂鸣器),点亮全部LED,延迟200毫秒;
        3、其他情况:模式在未开机和开机情况下,处理各自内容;
        4、运行/停止:运行状态和未运行状态下,处理各自内容;
        5、调试修补位置情况下的异常处理,不断完善功能;

    Day14:
        内容:数码管的静态使用
        1、认识数码管;
             ① 开发板2个4位共阳数码管;  
              前面的进制、数组、延迟、蜂鸣器有了用武之地;  
        2、控制原理;
             ① SS8550(9012、2N5401和2N2907三极管8550是一种常用的普通三极管。 它是一种低电压,大电流,小信号的PNP型硅三极管;     
        3、数码管实现0-9的显示;
             ① 通过置位,转换出(0-9的编码,此处注意用的数码管是共阴还是共阳);
        4、课后练习(虽然简单,但并不枯燥);
             ① 其他字符的显示;
             ② 0-9的循环(并且蜂鸣器对应响声);

    Day15:
        内容:数码管的动态使用
        1、数码管动态刷新原理;
        2、控制原理;
        3、8位数码管同时点亮;
             ① 视觉差:人眼不容易分辨出50HZ以上的动态刷新(延迟1ms为准,循环不大于20ms);
             技巧:一个数组控制位显,一个控制显示字符,利用时间差可以在8个数码管同时显示字符;
                  挑战十秒:实际应用,可以做个在家自己慢慢玩;
        4、课后练习:简易时钟;
              直接参考资料中的程序(搞明白实现过程);

    Day16:
        内容:定时器的使用
        1、定时器的作用和意义;
             ① 定时器(计数器):本质就是对脉冲进行计数;
             开发板有5个定时器T0-T4;
        2、STC32G单片机定时器使用原理;
             ① 不分频和12分频;
             例子不错:变速自行车轮,不变速(脚踏板1圈,后轮1圈:不分频),变速(脚踏12圈,后轮1圈:分频);
             ② 工作模式;
             16位自动重载(常用);波特率发生器(串口会用到),后面再解;
             其他看手册用到再解;
             ③ 中断
              EA:总中断;        
        3、定时器的简单应用;
             
             ① TMOD、TL0、TH0(知道怎么计算即可,可以通过工具快速生成);
             ② 详细信息查询手册很清晰;
        4、定时器的快速使用方法;
             ① STC-ISP的定时器计算器界面,设置相应参数,生成代码(稍作修改即可);

    Day17:
        内容:计数器的使用
        1、计数器的用途;
             ① 马达后面可以接码盘(不错,还能这样玩);
             ② 转换为数字信号(波形),计算得到计数;
        2、计数器的配置;
             ① T1_C/T、T1_GATE、TL1、TH1;
             ② 手册14.5.11 定时器1的实例;         
        3、计数器的应用;
             ① 上项目了:见2017年全国大学生电子设计竞赛试题-直流电动机测速装置;
             ② M法测速:又叫做频率量法;
        4、课后总结;
             ① T法测速:又叫做周期测量法;

    Day18:
        内容:简易多任务处理上
        1、回顾;
             ① 重点理清程序的逻辑思路。重点理清程序的逻辑思路。重点理清程序的逻辑思路。
             ② 规范化;
        2、应用模块化的编程(.c .h);
             ① led_seg、key、beep、tim;
             ② 修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”;
        3、工程文件编写;
             ① 逐步完善程序的结构更合理完善;
             //========================================================================
             // 函数名称:
             // 函数功能:
             // 入口参数: @
             // 函数返回:
             // 当前版本: VER1.0
             // 修改日期: 2023
             //当前作者:
             // 其他备注:
             //========================================================================

    Day19:
        内容:简易多任务处理中
        1、注意代码格式(小实战);
        2、led.c 和 led.h;
             ① 巧用搜索中的Replace;   

    Day20:
        内容:简易多任务处理下
        1、注意代码格式(小实战);
        2、key.c 和 key.h;
             ① 规范后的代码,很容易看清楚程序的设计思想,更快领会作者的意图;
             KEY_Deal(void);                    //10ms检测一次按键状态:按键扫描
             KEY_ReadState(u8 keynum);  //读取指定按钮的状态

    Day21:
        内容:简易多任务处理终
        1、注意代码格式(小实战);
        2、beep.c 和 beep.h;
             ① 逐步适应模块化编程的概念(后期收益多多);
             ② 打开/关闭/响时间;
                     
    Day22:
        内容:矩阵按键
        1、矩阵按键是什么;
             ① 减少IO的占用,本例用了6个IO控制8个按键;   
        2、矩阵按键的控制原理;
             ① 按键扫描;
             第一步:扫描列输入;
             第二部:扫描行输入;
             第三部:根据行列确定按键位;
        3、矩阵按键程序的编写;
             ① 密码锁(仿写一个,根据自己的需要改版一个);

      Day23:
        内容:外部中断
         1、中断和中断系统;
             ① 爸妈优先级举例(符合大众情况的例子,不赖);
             ② 查手册看各个中断参数;
         2、什么是外部中断;
            ① 有复用中断功能的引脚才能当作外部中断检测;
         3、外部中断的用法;
            ① 优先级(0-3);        
            ② 上升下降沿;
         4、其他中断可以试试;

      Day24:
        内容:IO中断           
         1、什么是IO中断;
            ① 中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程;
                 即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
         2、IO中断的用法;

            ① 中断号大于31号(手册里面有多种解决方案,新手暂时应该还用不到);
         3、中断优先级的设置;

            ①
         4、实战小练;
      

      Day25:
        内容:模数转换器ADC上
         1、模数转换器是什么;
            ① 模拟信号转换为数字信号的电子元器件;
            ② 木板实例(很形象生动,好玩);
                

         2、STC32G单片机ADC使用原理;
          
         3、编写最简单的ADC采集代码(查询&中断);
      

      Day26:
        内容:模数转换器ADC下
         1、代码;
            ① void ADC_Init(void);
            ② u16 ADC_Read(u8 no);
             u16 ADC_CAL_Voltage(u16 num);
          
      Day27:
        内容:ADC采集电源电压和ADC按键上
         1、ADC反推电源电压;
            ① 测试出Vref引脚电压的意义?
                 有了基准电压可以,可以通过电路采集各种电压信号进行对比,然后做出判断;
                 比如按键,1个ADC采集引脚可控制一堆的按键;
            ② 通过对比基准电压,可以精确判断用户按下了一堆按键中的哪一个;

      Day28:

         2、ADC扫描按键(长按循环触发)
             ① 上一节主要实现了扫描获得某个按键按下了,这一届升级后,可实现判断按键按下了多久;
         3、实战小练
              简易时钟:显示、蜂鸣器、按钮综合型试验;


    转站何老师基础课程,更深入了解内核及硬件知识,方便下一步进阶!

                


          


























































    回复 送花

    使用道具 举报

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

    [LV.1]初来乍到

    3

    主题

    339

    回帖

    1669

    积分

    版主

    积分
    1669
    发表于 2023-8-11 17:30:43 | 显示全部楼层
    楼主学习精神可嘉,继续发表比较详细学习感悟
    有机会优先获赠实验箱包邮


    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:56
  • 签到天数: 147 天

    [LV.7]常住居民III

    1

    主题

    14

    回帖

    227

    积分

    中级会员

    积分
    227
     楼主| 发表于 2023-8-15 17:12:08 | 显示全部楼层
    STC爱好者 发表于 2023-8-11 17:30
    楼主学习精神可嘉,继续发表比较详细学习感悟
    有机会优先获赠实验箱包邮

    还以为没有组织关心,
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-21 19:26 , Processed in 0.065219 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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