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

冲哥8051实验箱-STC32G12K128

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-03-01 13:29:54

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
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-06-16 10:04:48

15

主题

431

回帖

2067

积分

版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-03-01 13:29:54

16

主题

4

回帖

130

积分

注册会员

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

ok
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 22:25 , Processed in 0.118158 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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