sun5304 发表于 2023-8-19 16:20:58

学习冲哥的视频课程观后感

8月19日 冲哥 STC MCU研讨会—USB 观后感及自己实验记录:

1.USB-CDC虚拟串口应用

① USB库文件下载和工程搭建

      1.库文件下载(下载官网:https://stcai.com/khs)

         

      2.将解压出来的库文件复制过来

         

      3.KEIL新建工程并选择STC的单片机,并在工程目录保存头文件

         

      4.新建main.c文件,增加USB初始化代码

         

         5.添加文件到工程里

         

      6.设置工程选项(Target,Output,L251 Misc)

         

       7.使用最新的STC-ISP软件下载程序

         

      8.下载完成后就会出现一个CDC串口 ---- 确实在Keil窗口出现了一个CDC串口 COM6

         

      9.链接串口后即可实现串口数据发送和接受测试

         
            我自己在开发板试验 CDC串口发送接收 正常

      10.使用串口不停电下载!

        1)打开 "收到用户命令后复位到ISP监控程序区"的选项卡

        2)勾选 "使用默认的内部自定义命令“STCISP#”"

        3)勾选 "下次使用STC-HID接口进行ISP下载"

        4)勾选 "每次下载前都先发送自定义命令"

        5)点击下载

         
      按照老师讲的 一步一步 操作下来,果然可以做到 不停电下载,比较方便调试。

------------ 后边 跟着冲哥的课继续学习-----



下载



sun5304 发表于 2023-8-20 15:47:01

本帖最后由 sun5304 于 2023-8-21 10:59 编辑

8月20日继续跟着冲哥的视频课 学习----LED闪烁:

1.基于 Delay函数 实现LED的闪烁

在工程中添加如下语句
      #define MAIN_Fose    24000000UL

      void delay_ms(u16 ms)
    {
       u16 i;
       do
    {

         
      根据 屠龙刀开发板 原理图,LED 接 P20~P27,没有晶体管,P40口暂时不用。


         
      板子上P20和P27连接的LED闪烁正常(图片看不出 闪烁效果)


2. while 与 do while 的区别

         
      通过这一段的学习,明白了 while 与 do while 的区别


3.分析 屠龙刀 的原理图 ,看到设计人员做的这个断电装置挺有意思:

         
利用一支轻触开关和一个PNP晶体管,通过开关控制晶体管基极的高低电平,来达到晶体管的导通/截至,从而使集电极
输出或不输出,实现了正常供电和断电的作用。虽然是一个简单的装置,体现了设计人员的巧妙构思。值得学习和借鉴。



sun5304 发表于 2023-8-21 10:57:13

本帖最后由 sun5304 于 2023-8-21 11:08 编辑

8月21日 继续跟着冲哥的视频课 学习----按键点灯:


1.按键的代码实现过程

       if(KEY == 0)
       {
         Delay_ms(10);            //利用延时函数 检测按键按下 10ms ,可以消除抖动
         if(KEY == 0)               //延时结束后 如果按键 仍然 等于 1,再执行以下的功能
         {
         执行功能
         }
       }

2.在屠龙刀板子上实验,需要将LED改在P20\P27端口
    //----------------------按下点亮,松开熄灭      ---------------------------------------
               
                if( KEY1 == 0)                                 //判断按键有没有按下
                {
                        delay_ms(10);
                        if( KEY1 == 0 )
                        {
                              printf("按键P32已经按下\r\n");
                              P20 = 0;                        //LED0点亮
                        }
                }
                else                                                //如果没有按下
                {
                        P20 = 1;                              //LED0 熄灭
                }
               
//--------------------------按下熄灭,松开点亮      --------------------------------
               
                if( KEY2 == 0)                  //判断按键有没有按下
                {
                        delay_ms(10);
                        if( KEY2 == 0 )
                        {
                              printf("按键P33已经按下\r\n");
                              P27 = 1;         //LED熄灭
                        }
                }
                else
                {
                        P27 = 0;                //LED点亮
                }


3. 下载到板子上,实验证明程序正常,在 USB-CDC 串口助手窗口观察 也是正常。


          




sun5304 发表于 2023-8-22 09:09:07

8月22日 继续跟着冲哥的视频课 学习 ---- 蜂鸣器:


1. 蜂鸣器控制原理


         
      分析该电路原理图 可知 驱动采用一支PNP晶体管,当给晶体管基极输入高电平时,晶体管截止;给晶体管基极输入低电平时,晶体管导通。晶体管基极连接CPU的P5.4端口。

      P5.4引脚输出高电平 关闭 ; P5.4引脚输出低电平 打开。

      
         
      因为没有蜂鸣器,用P21引脚的LED灯 亮灭来代替,模拟蜂鸣器。
      下载到屠龙刀板子上,实验结果:按一下P3.2按键,P2.1的LED亮;再按一下P3.2按键,LED熄灭。

         
      LED 亮灭状况对比,模拟蜂鸣器的打开与关闭。


sun5304 发表于 2023-8-22 17:08:39

0822下学习   #define 和 typedef 用法和区别:

1.表示方法#define[标识符][被标识符表示的字符串]    可以理解为文本替换

表示实例#deline   ON1                   //共阴LED,高电平点亮
               #defineOFF 0                   //共阴LED,低电平熄灭

等同于   LED=ON;---> LED = 1;
               LED =OFF; ---> LED = 0;


2.表示方法typedef [数据类型][字符串]

表示实例typedefunsigned char u8;       //unsigned char   类型 用 u8   表示
               typedefunsigned int u16;       //unsigned int      类型 用 u16 表示
               typedefunsigned long int u32;//unsigned long int 类型 用 u32 表示

   等同于   u8 i;      //unsigned char 类型变量i
               u16 j;       //unsigned int   类型变量j
               u32 k;       //unsigned long int 类型变量 k

         
          点亮 P2.0~P2.7 的LED,下载到板子上实验 正常。


sun5304 发表于 2023-8-23 16:23:29

8月23日 学习冲哥课 定时器的作用和意义:


1.定时器是定时器和计数器的统称。
1)设置为定时器时,可以实现硬件计时,或者使程序每隔一固定时间完成一项操作
2)设置为计数器时候能够对脉冲进行计数
3)替代长时间的delay,提高CPU的运行效率和处理速度,能及时的响应某个事件



2.STC32G单片机定时器使用原理
2.1、先设置功能为定时器/计数器(本质都是加法计数器)
      STC32G 系列单片机内部设置了5个24位定时器/计数器(8位预分频+16位计数)。5个16位定时器T0、T1、T2、T3和T4都具有计数方式和定时方式两种工作方式。
      定时器\计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加1。

         

2.2、 如何在定时器/计数器模式下,设置不分频或者12分频
      当定时器/计数器T0、T1及T2工作在定时模式时,特色功能寄存器AUXR中的T0x12、T1x12和T2x12分别决定是系统时钟/12还是系统时钟/1(不分频)后让T0、T1和T2进行计数。
      当定时器/计数器T3及T4工作在定时模式时,特色功能寄存器T4T3M中的T4x12和T2x12分别决定是系统时钟/12还是系统时钟/1(不分频)后让T3和T4进行计数。
      当定时器/计数器工作在计数模式时,对外部脉冲计数不分频。


      定时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计算值加1.


         

2.3、定时器的工作模式


         


2.4、定时器设置


         


2.5、中断



      EA: 总中断允许控制位。EA的作用是使中断允许形成多级控制,即各中断源首先受EA控制,其次受各中断源自己的中断允许控制位控制。
      ET0:定时器/计数器T0的溢出中断允许位。
               0:禁止T0中断
               1:允许TO中断




3.定时器的简单应用      


         

4.定时器的快速使用方法



         
      通过实践,STC-ISP 自带的这个定时器计算器比较方便





sun5304 发表于 2023-8-24 10:48:24

8月24日 数码管

1.认识数码管

      每一支数码管都是由七段LED组成,通过控制不同段的显示,达到显示数字和字母。(A、B、C、D、E、F、G;如果有小数点,增加DP)
      多支数码管组合起来,就需要有位控制,通过控制位的高低电平,即可实现只显示需要位的数码管亮起。
   
         
2.控制原理

      由原理图得知:位的控制电流比较大,所以在每一位控制端需要增加一支PNP晶体管做驱动,这样MCU的PIO端口输出的控制信号(高低电平),接到晶体管基极,再由集电极输出到各个位控制端(COM)。
   
         

3.数码管的动态显示

      要实现多位数码管的同时显示,就需要采用动态显示。实际上是利用人眼的延迟,设置数码管的延迟时间不能太短也不能太长。
      具体的控制流程如图所示:


         

      其中需要注意,我们这边程序就以1ms为准,且需要保证总共一个循环结束的时间不能大于20ms,因为人眼的视觉不容易分辨出50HZ以上的动态刷新。




sun5304 发表于 2023-8-24 15:54:45

8月24日下简易多任务处理


1)重点理清程序的逻辑思路,之前的课主要是熟悉写程序的方法、分析逻辑,实现我们所要的功能。
2)这一节课开始,我们要规范程序,符合我们工程师级别的代码规范。
3)应用模块化的编程(.c+.h)
       一、LED&数码管      --led_seg.c , led_seg.h
      二、按键                      --key.c , key.h
      三、蜂鸣器                --beep.c , beep.h
      四、定时器                --tim.c , tim.h



      修饰符 extern 用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
      注意:extern 修饰的变量不能赋初值。


4)创建程序文件三步:
             新建文件并保存
             添加到工程
             添加引用路径

5)引脚定义都在 .h文件:
             sbit 名称 = P10;
            #define 名称 P10

6)函数定义三步:
             定义
             声明
             调用



7)bdata 位寻址变量的使用:

             a.c                                a.h
u8 bdata LED = 0x00;                extern u8 bdata LED;
sbit LED0 = LED^0;                extern bit LED0;
sbit LED1 = LED^1;                 extern bit LED1;
          ....                                       ....


8)新建工程目录并创建4个目录:



         
9)分别在4个目录下创建 各自的 .c 和 .h 文件:



         



sun5304 发表于 2023-8-25 11:17:37

8月25日矩阵按键

    1.在按键数量较多时,为了减少I/O口的占用,将按键排列成矩阵排列的形式,我们称为矩阵按键。
    2.矩阵按键的控制原理如图:
         

      第一步:现将P0.0~P0.3输出低电平,P0.6~P0.7输出高电平,如果有按键按下,按下的那一列的I/O就会变成低电平,就可以判断出哪一列按下了。
      第二步:现将P0.0~P0.3输出高电平,P0.6~P0.7输出低电平,如果有按键按下,按下的那一行的I/O就会变成低电平,就可以判断出哪一行按下了。
      第三步:行列组合一下就可以判断出是哪个按键按下了。

         
               按照老师讲的,写入程序中,编译通过。



         

sun5304 发表于 2023-8-25 15:31:08

8月25日 下学习冲哥视频课 观后感

1、中断和中断系统


1.1什么是中断
      中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。
      当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完后,再回到原来被中断的地方,继续原来的工作。这样的过程称为中断。



1.2什么是中断系统
      实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求,即规定中断源有一个优先级别。




1.3中断系统的优点
      CPU总是先响应优先级别最高的中断请求。当CPU正在处理一个中断源请求的时候,发生了另外一个优先级别比它还高的中断源请求,CPU能够暂停对原理中断源的服务程序,转而去处理优先级别更高的中断请求源,处理完后,再回到原低级中断服务程序,这样的过程称为中断嵌套。
      每一个中断源可以用软件独立地控制为开中断或关中断状态。
      部分中断的优先级别均可用软件设置。

         


1.4中断次序

         


2、什么是外部中断




      外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获这个变化,单片机内部运行的程序就会被暂时打断,转而去执行相应的中断处理程序,执行完又回到原来中断的地方继续执行原来的程序。

      
      哪些引脚能作为外部中断口?


      引脚带有INTX标识的 如:INT0,INT1,INT2,INT3,INT4


3、外部中断的用法
    外部中断0:
    IT0
    IE0
    EX0
    EA

    外部中断1:
    IT0
    IE0
    EX0
    EA

    外部中断X: X=2~4
    INTxIF
    EXn
    EA

4、外部中断的程序



         
            经过修改,纠正了几处错误,现在编译通过。






页: [1] 2
查看完整版本: 学习冲哥的视频课程观后感