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

冲哥8051实验箱-STC32G12K128

[复制链接]
  • TA的每日心情
    开心
    2024-3-1 13:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    16

    主题

    4

    回帖

    130

    积分

    注册会员

    积分
    130
    发表于 2023-5-24 22:22:22 | 显示全部楼层 |阅读模式
    本帖最后由 15614423926 于 2023-6-26 08:59 编辑

    第八集作业:

    程序不复杂,但是也调了好久,主要还得是仔细,细心,静下心来,切要浮躁!


    void Test(void)                //电磁炉的功能
    {
    /*----------------------------------------------------------------------------*/
            if(KEY1 == 0)        //开关按键
            {
                    delay_ms(10);
                    if(KEY1 == 0)
                    {
                            while(KEY1 == 0);                //按钮按下,并等待按钮松开
                            
    /*-------------------------------还没有开机时,执行开机功能--------------------*/
                            if(Run_Flag == 0)                //如果还没开机
                            {
                                    Run_Flag = 1;                //开机变量改为1,表示已经开机
                                    BEEP = 0;                        //打开蜂鸣器
                                    delay_ms(2000);
                                    BEEP = 1;                        //关闭蜂鸣器
                                    P2 = 0;                                //LED全部点亮
                                    delay_ms(500);
                                    P2 = 0xFF;                                //LED全部关闭
                            }
                            
    /*-------------------------------已经开机时,执行关机功能--------------------*/
                            else
                            {
                                    Run_Flag = 0;
                                    BEEP = 0;                        //打开蜂鸣器
                                    delay_ms(2000);
                                    BEEP = 1;                        //关闭蜂鸣器
                                    P2 = 0;                                //LED全部点亮
                                    delay_ms(500);
                                    P2 = 0xFF;                        //LED全部关闭
                                    Run_Mode = 0;                //模式清0
                                    Run_Now = 0;                //工作状态清0
                            }
                    }
            }
    /*----------------------------------------------------------------------------*/
            if(KEY2 == 0)        //功能按键
            {
                    delay_ms(10);
                    if(KEY2 == 0)
                    {
                            while(KEY2 == 0);                //按钮按下,并等待按钮松开
                            
    /*-------------------------------已经开机时,执行功能跳变--------------------*/
                            if(Run_Now == 0)
                            {
                                    BEEP = 0;                        //打开蜂鸣器
                                    delay_ms(100);
                                    BEEP = 1;                        //关闭蜂鸣器
                                    Run_Mode++;                        //模式选择
                                    
                                    if(Run_Mode > 8)        //如果模式大于8
                                    Run_Mode = 1;                //回到模式1
                                    
                                    P2 =~(1 << (Run_Mode-1));        //  1<<1  0000 0001 -> 1111 1110
                            }
                    }
            }
            
    /*--------------------------------功能开始停止执行------------------------*/        
            if(KEY3 == 0)        //功能开始暂停按键
            {
                    delay_ms(10);
                    if(KEY3 == 0)
                    {
                            
                            if(Run_Mode > 0)                                //已经选择了模式
                            {
                                    BEEP = 0;                                //打开蜂鸣器
                                    delay_ms(100);
                                    BEEP = 1;                                //关闭蜂鸣器
                                    
                                    Run_Now = !Run_Now;         //运行停止间切换
                            }
                            while(KEY3 == 0);
                    }
                    delay_ms(10);
            }
    /*
      模式                        Run_Mode-1                         1 << (Run_Mode-1)           ~(1 << (Run_Mode-1))
            1                        0                                0000 0001                        1111 1110                        FE
            2                        1                                0000 0010                        1111 1101                        FD
            3                        2                                0000 0100                        1111 1011                        FB
            4                        3                                0000 1000                        1111 0111                        F7
            5                        4                                0001 0000                        1110 1111                        EF
            6                        5                                0010 0000                        1101 1111                        DF
            7                        6                                0100 0000                        1011 1111                        BF
            8                        7                                1000 0000                        0111 1111                        7F
    */

            if(Run_Now == 1)        //正在运行
            {
                    P2 = 0xFF;
                    delay_ms(300);
                    P2 =~(1 << (Run_Mode-1));
                    delay_ms(300);
            }
            else                                //停止运行
            {
                    P2 =~(1 << (Run_Mode-1));
            }
            
    }
    第九集数码管的静态使用:
    主要掌握数字0-9,“.”的表示方法,以及共阴极和共阳极的区别,一般来说,数码管不会用单片机自己的io口去驱动,驱动能力有限,需要三极管的帮助,共阴极用P型三极管,共阳极用N型三极管来驱动。

    P67P66P65P64P63P62P61P60十进制16进制
    dpgfedcba
    0
    1
    1
    0
    0
    0
    0
    0
    0
    192
    C0
    1
    1
    1
    1
    1
    1
    0
    0
    1
    249
    F9
    2
    1
    0
    1
    0
    0
    1
    0
    0
    164
    A4
    3
    1
    0
    1
    1
    0
    0
    0
    0
    176
    B0
    4
    1
    0
    0
    1
    1
    0
    0
    1
    153
    99
    5
    1
    0
    0
    1
    0
    0
    1
    0
    146
    92
    6
    1
    0
    0
    0
    0
    0
    1
    0
    130
    82
    7
    1
    1
    1
    1
    1
    0
    0
    0
    248
    F8
    8
    1
    0
    0
    0
    0
    0
    0
    0
    128
    80
    9
    1
    0
    0
    1
    0
    0
    0
    0
    144
    90
    冲哥8051实验箱-STC32G12K128-1.png

    第十集数码管的动态显示:
    冲哥8051实验箱-STC32G12K128-1.png

    冲哥8051实验箱-STC32G12K128-2.png
    冲哥8051实验箱-STC32G12K128-3.png
    需要注意每个延时不能太短,我们这边程序就以1ms为准,且需要保证总共一个循环结束的时间不能大于20ms,因为人眼的视觉不容易分辨出50HZ以上的动态刷新

    第十一集定时器的使用:
    辅助寄存器:
    冲哥8051实验箱-STC32G12K128-1.png
    默认是/12,12分频:
    冲哥8051实验箱-STC32G12K128-2.png
    冲哥8051实验箱-STC32G12K128-3.png
    冲哥8051实验箱-STC32G12K128-1.png

    定时器所对应的模式关系:

      
      
      
    定时器0
      
      
    定时器1
      
      
    定时器2
      
      
    定时器3
      
      
    定时器4
      
      
    模式0
      
      
    16位自动重载
      
      
    16位自动重载
      
      
    16位自动重载
      
      
    16位自动重载
      
      
    16位自动重载
      
      
    模式1
      
      
    16位不可重载
      
      
    16位不可重载
      
      
      
      
      
      
      
      
    模式2
      
      
    8位自动重载
      
      
    8位自动重载
      
      
      
      
      
      
      
      
    模式3
      
      
    16位自动重载
      
    (不可屏蔽)
      
      
      
      
      
      
      
      
      
      
    波特率发生器
      
      
      
      
      
      
      
      
      
      
      
    模式选择:
    冲哥8051实验箱-STC32G12K128-1.png
    冲哥8051实验箱-STC32G12K128-5.png

    冲哥8051实验箱-STC32G12K128-6.png

    开启中断:
    冲哥8051实验箱-STC32G12K128-7.png

    允许T0中断:
    冲哥8051实验箱-STC32G12K128-8.png
    定时器的计算公式:
    其中Sysclk为系统时钟,TMOPS默认为0,[TH0,TL0]为写入的数值,T为分频值,默认为12。

    冲哥8051实验箱-STC32G12K128-2.png

    其中,TM0PS,定时器0时钟预分频寄存器默认值为0

    冲哥8051实验箱-STC32G12K128-3.png
    经计算,14.5.1的定时器0是0.001s,即1ms


    定时器和延时没有关系,在初始化定时器后,会在设定好的时间进入中断函数;
    中断频率越低越好;
    也可以用STC软件直接生成相关代码。
    定时器0中断初始化函数:

    冲哥8051实验箱-STC32G12K128-1.png
    中断执行函数:
    冲哥8051实验箱-STC32G12K128-2.png
    第十二集计数器的使用:
    设置中断为计数模式:
    冲哥8051实验箱-STC32G12K128-1.png
    定时器1中断初始化:

    做外部计数试验,需要打开内部上拉电阻
    冲哥8051实验箱-STC32G12K128-2.png
    冲哥8051实验箱-STC32G12K128-3.png
    若要显示4位十进制,可定义u16类型

    M法测速:
    冲哥8051实验箱-STC32G12K128-4.png

    M法测速:又叫做频率测量法。
    这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。
    设编码器单圈总脉冲数为C, 时间T0内,统计到的编码器脉冲数为M0,则转速n的计算公式为:
    冲哥8051实验箱-STC32G12K128-5.png

    T法测速:又叫做周期测量法。
    这种方法是建立一个已知频率的高频脉冲并对其计数,计数时间由捕获到的编码器相邻两个脉冲的间隔时间TE决定, 计数值为M1。
    设编码器单圈总脉冲数为C,高频脉冲的频率为F0,则转速n的计算公式为:


    冲哥8051实验箱-STC32G12K128-6.png
    现存问题,外部中断,如何配置IO参数信息!
    其中,外部中断引脚已经指定好,不可指定和随意配置
    P3.4为T0中断引脚
    P3.5为T1中断引脚

    冲哥8051实验箱-STC32G12K128-1.png

    第十三集简易多任务处理:
    keil5添加预设函数头
    templates右键进行添加,增加完成后,需要重新打开程序才会生效
    static :
    即静态变量。static指修饰符,可以用来修饰变量,也可以用来修饰函数。
    如果是在函数外面定义的,那么static说明的变量可以在当前c程序文件中使用。
    如果是在函数内部定义的,那么这个变量只初始化一次,即使再次调用这个函数,这个static变量也不会再次被初始化。
    bdata:
    c51中"bdata"是片内RAM,位寻址方式;存储器类型说明的意思

    c51中"bdata"的用法:

    C51中的两种位变量,除了特殊功能寄存器中的可位寻址的位外,还有位于单片机内部RAM字节。

    地址0x20~0x2F的16个字节的128个可寻址位,位地址从0x00~0x7F。

    比如我有一个变量:uchar(unsigned char) BData;

    这是一个字节,我可以用:bdata BData=0x00;

    然后用:sbit BData_0=BData^0;

    sbit BData_1=BData^1;

    sbit BData_2=BData^2;

    ……

    就是把字节拆成8个位


    冲哥8051实验箱-STC32G12K128-1.png




    冲哥8051实验箱-STC32G12K128-4.png
    冲哥8051实验箱-STC32G12K128-1.png
    回复 送花

    使用道具 举报

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

    [LV.1]初来乍到

    3

    主题

    337

    回帖

    1647

    积分

    版主

    积分
    1647
    发表于 2023-5-26 09:33:19 | 显示全部楼层
    楼主,后续学习经验可在此贴跟帖,加油,争取提前送您实验箱
    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-1 13:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    16

    主题

    4

    回帖

    130

    积分

    注册会员

    积分
    130
     楼主| 发表于 2023-5-27 17:25:49 | 显示全部楼层
    STC爱好者 发表于 2023-5-26 09:33
    楼主,后续学习经验可在此贴跟帖,加油,争取提前送您实验箱

    ok
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-10 22:17 , Processed in 0.062386 second(s), 39 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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