找回密码
 立即注册
楼主: admin

视频教学:《32位8051单片机原理及应用》,一等奖2万, 送实验箱; 冲哥版

   火... [复制链接]

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 12:25:19 | 显示全部楼层
第五集
C语言基础知识,关于Printf函数的使用,数制之间转换
第六集
控制LED灯闪烁,需P60先给低电平,延时后再给高电平。延时用到了delay_ms函数,函数里用到了while和do.…while循环。利用指令的空转来实现延迟的功能,但是具体延时时间不是太准确,这是一个大致的延迟时间。学习了#define用法,a--和-while和do..while区别,函数使用,以及模块化编程的思想。
void delay_ms(u16 ms)//延迟毫秒
{
        u16 i;
        do{
                i=MAIN_Fosc/6000;
                while(--i);
        }while(--ms);
}
int Add(int num1,int num2)
{
        return num1+num2;
}
......
函数的使用:
返回值 函数名称(入口参数)
{
函数功能
}
函数声明:
返回值 函数名(参数);
函数调用:
函数名(入口参数);
模块化编程:
xxx.h
#ifndef __XXX_H
#define __XXX_H
头文件
函数声明
#endif
添加文件一定要记得引用路径和添加到工程里
1、加强类型检查,提高代码得类型安全性。 在C++中使用头文件,对自定义类型的安全也是非常重要的。虽然,在语法上,同一个数据类型(如一个class)在不同的源文件中书写多次是允许的,程序员认为他们是同一个自定义类型。

2、减少代码的重复书写,提高编写和修改程序的效率。 在程序开发的过程中,对某些数据类型或者接口进行修改是难免的,使用头文件,只需要修改头文件中的内容,就可以保证修改在所有源文件中生肖,从而避免了繁琐易错的重复修改。

3、提供保密和代码重用的手段。  头文件也是C++代码虫蛹即只中不可缺少的一种手段,在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件的接口声明来调用库功能,而不必关心接口是怎么实现的,编译器会从库中提取相应的代码。

4、设立头文件的目的主要是:提供全局变量、全局函数的声明或提供公用数据类型的定义,从而实现分离变异或代码复用。

5、头文件一般由四部分内容组成:

​        (1)头文件开头处的版权和版本声明。

​        (2)预处理块。

​        (3)inline函数的定义。

​        (4)函数和类结构声明。
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:37:46 | 显示全部楼层
按键点灯
上节课作业:作业大致思路,先快速闪三下,之后慢慢闪三下,最后在快速闪三下。
按键分成两类:一类按下电路闭合,一类按下电路断开
机械抖动:
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
代码实现
    if(key == 0)
    {
        Delay_ms(10);
        if(key == 0)
        {
         执行功能   
        }
        
    }
因为开关是机械开关,所以按下松开时需要进行按键消抖。正常LED不亮,按下按键,LED从左往右流水
对于点灯的控制可以使用数组的形式对寄存器进行控制
数组的使用:
定义:
类型 名称[长度]={数值}
使用:名称[下标] = 值
下标范围0-n-1
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:41:29 | 显示全部楼层
第八集蜂鸣器的应用
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“ZZG”、“LB”、“JD”等)表示。
区别
1、有源蜂鸣器内部带震荡源,所以只要一通电就会叫而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
2、价格不同,有源蜂鸣器要比无源蜂鸣器贵,贵在里面多了震荡源
it( KEY1==0)
{
delay_ns(10);
if(KEY1==0)
while( KEY1 == 0);
BEEP = !BEEP
}
需求分析按键*2,LED*8,蜂鸣器*11、按键1按下,蜂鸣10msLED1-8全部点亮200ms在熄灭,表示开机。2.开机后,按键2按下,蜂鸣10ms,LED1-8轮流点亮,表示切换煲汤、烧水等功能。
3.开机后按键1再次按下,蜂鸣10ms,LED全部熄灭,表示关机。具体代码参考视频
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:44:03 | 显示全部楼层
第九集数码管的静态使用
课程摘要:
- 认识数码管
- 控制原理
- 数码管显示0-9
数码管也叫LED数码管,内部是由多个发光二极管封装在一起组成,他们可以有很多种颜色,很多种外形,很多种样式,但是本质来说他们都是通过点亮内部的LED来显示的,只要面板做好了,理论可以显
示任意的字符或者图案
1.认识数码管
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管,尾缀A表示共阳,K表示共阴
P70 = 0;
P6 = SEG_Tab[0];
一个数码管显示0
总结:
1.了解数码管的数字内码的由来
2.学会数码管通过数组的方式获取数值
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:47:27 | 显示全部楼层
第十集数码管动态显示
- 数码管刷新原理

- 控制原理

- 8位数码管同时点亮
控制原理
具体的控制的流程如图所示,N表示有几个数码管!
1.在上一课的基础上,新增一个位码选择的数组
2.通过调用数组选择位码
3:新建一个数组选择每个位需要显示的内容!
其中需要注意每个延时不能太短,我们这边程序就以1ms为准,且需要保证总共一个循环结束的时间不能大于20ms,因为人眼的视觉不容易分辨出50HZ以上的动态刷新。
具体代码参考上课
将所有的数码管的段选线并接在一起,用一个IO接口控制,公共端并不是直接接地(共阴极)或者电源(共阳极),而是通过相应的IO接口控制。以阴极为例假设4个数码管工作过程为:每个数码管的公共端与一根IO相连,第一步使最右边一个数码管的公共端为0,其余数码管公共端为1,同时在IO上 发送右边第一个数码管的字段码,这时候只有右边的第一个数码管显示,其余不显示;第二部使右边第二个数码管的公共端为0,其余的公共端为1,同时在上发送右边第二个数码管的字段码,这时候,只有右边第二个数码管显示,其余不显示,以此类推,直到最后一个,这样子4个数码管轮流显示相应的信息,一遍显示完毕,隔一段时间,又这样循环显示。从计算机角度,每个数码管隔一段时间才显示一次,但是由于人的视觉暂留效应,只要隔离时间足够短,循环的周期足够长,每秒达到24次以上,看起来数码管就一直稳定显示了,这就是动态显示原理。
#include<reg51.h>
sbit we1=P2^0;
sbit we2=P2^1;
sbit we3=P2^2;
sbit we4=P2^3;
unsigned char code tabl[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
void delayms(unsigned int xms){
    unsigned int i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--)
            ;
}
void display(){
    we1=0;//给左边第一个数码管公共端一个低电平,使其进行显示
    P0=tabl[1];//送入数字1到数码管中
    delayms(5);//延时5ms
    we1=1;//给第一个数码管的公共端一个高电平,使其关闭显示
    P0=0xff;//消影处理,(这里非常重要,如果不进行消影,会使下一个数码管显示不正确,出现乱码的情况)

    we2=0;//这里是进行第二个数码管显示,原理和第一个显示原理一样
    P0=tabl[2];
    delayms(5);
    we2=1;
    P0=0xff;

    we3=0;
    P0=tabl[3];
    delayms(5);
    we3=1;
    P0=0xff;

    we4=0;
    P0=tabl[4];
    delayms(5);
    we4=1;
    P0=0xff;

}
void main(){

    while(1){

        display();

    }
}
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:49:21 | 显示全部楼层
第十一集定时器的使用
1.定时器的作用和意义
2.STC32G单片机定时器使用原理
3.定时器的简单应用
4.定时器的快速使用方法
定时器是定时器和计数器的统称。1)设置为定时器时,可实现硬件计时,或者使程序每隔一固定时间完成一项操作2)设置为计数器时候能够对脉冲进行计数3)替代长时间的delay,提高CPU的运行效率和处理速度,能及时的响应某个事件
STC32G 系列单片机内部设置了 5 个 24 位定时器/计数器 (8 位预分频+1 位计数)。5个 16 位定时TO、T1、T2、T3 和 T4 都具有计数方式和定时方式两种工作方式。对定时器/计数器 TO 和T1,用它们在特殊功能寄存器 TMOD 中相对应的控制位 CT 来选择T或T1为定时器还是计数器。对定时器/计数器 T2,用特殊功能寄存器 AUXR 中的控制位 T2 C/T 来选择 T 为定时器还是计数器。对定时器/计数器 T3,用特殊功能寄存器 T4T3M 中的控制位 T3 C/T 来选择 T3 为定时器还是计数器。对定时器/计数器T4,用特殊功能寄存器 T4T3M 中的控制位 T4 CT 来选择 T4 为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同: 如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每 12 个时钟或者每 1 个时钟得到一个计数脉冲,计数值加 1!如果计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加 1。
当定时器/计数器 TO、T1及 T2 工作在定时模式时,特殊功能寄存器 AUXR 中的 TOx12、T1x12 和T2x12 分别决定是系统时钟/12 还是系统时钟/1 (不分频) 后让 T0、T1和T2 进行计数。当定时器/计数器 T3和 T4 工作在定时模式时,特殊功能寄存器 T4T3M 中的 T3x12 和 T4x12 分别决定是系统时钟/12还是系统时钟/1(不分频)后让 T3 和T4 进行计数。当定时器/计数器工作在计数模式时,对外部脉冲计数不分频。
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:53:58 | 显示全部楼层
第十二集
定时器要设置为计数功能,需要配置TMOD的C/T为1
计数器根据脉冲来计数,在模式1下,计数最大值为65536,超过65535就会产生中断,设置预装载值TH0/TL0,当计数溢出时,重载为预装载值。
T1_C/T:控制定时器1用作定时器或计数器,清0则用作定时器(对内部系统时钟进行计数),置1用作计数器(对引脚T1/P3.5外部脉冲进行计数)。
TO GATE:控制定时器0,置1时只有在INTO脚为高及TRO控制位置1时才可打开定时器/计数器0。
M法测速:又叫做频率测量法。这种方法是在一个固定的定时时间内 (以秒为单位) ,统计这段时间的编码器脉冲数,计算速度值。设编码器单圈总脉冲数为C,时间TO内,统计到的编码器脉冲数为MO。
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:56:34 | 显示全部楼层
第十三集
学习使用模块化编程,每个外设单独一个.c/.h文件。在写函数时,为函数添加一些注释性内容,方便他人阅读。
使用extern 修饰符用来说明变量和函数在别的地方已经定义,需要在此处引用。extern修饰变量不能赋初值。
学习使用bdata位寻址变量。
修饰符extern用在变量或者函数的声明
定义的,要在此处引用
前,用来说明“此变量/函数是在别处
举例1:如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern intv,然后就可以引用变量v。举例2: 如果文件a.c需要引用b.c中变量int v,就可以在b.h中声明extern intv,然后a.c调用b.h就可以引用变量v。
注意extern修饰的变量不能赋初值。
本节课代码比较多,知识点相对少
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 13:59:44 | 显示全部楼层
第十四集矩阵按键
在按键数量较多时,为了减少I/O口的占用,将按键排列成矩阵排列的形式的按键阵列我们称位矩阵按键。
按键识别原理:端口默认为高电平,实时读取到引脚为低电平是表示按下。
第一步:现将PO.0-P0.3输出低电平,P0.6-P0.7输出高电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。
第二步:现将PO.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。
第三步:组合就可以知道那个按键被按下了
先高四位(四个行)输出高电平,低四位(四个列)输出低电平,假设有按键按下,从P1口的高四位读取键盘状态。判断高四位的四行哪一行变成了低电平,就知道是第几行,再从P1口的低四位(四个列)输出高电平,高四位(四个行)输出低电平,从P1口的低四位读取键盘状态。判断低四位的四列哪一行变成了低电平,就知道是第几列,将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。
具体代码参考视频资料
回复 支持 反对

使用道具 举报 送花

0

主题

11

回帖

40

积分

新手上路

积分
40
发表于 2023-7-21 14:02:01 | 显示全部楼层
第十五集外部中断
在主程序运行过程中,有中断请求时,需要进行响应去执行中断处理程序,执行完后再返回主程序继续执行。
CPU总是先响应优先级最高的中断请求,然后按照优先级高低顺序来依次执行中断服务程序。
外部中断是捕获单片机上引脚电平变化,单片机上只有一些固定引脚才能被用中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在 CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU 总是先响应优先级别最高的中断请求。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。作外部中断的IO口。
外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获这个变化,单片机内部自主运行的程序就会被暂时打断,转而去执行相应的中断处理程序,执行完后又回到原来中断的地方继续执行原来的程序。
其余资料参考官方手册stc32g参考手册
回复 支持 反对

使用道具 举报 送花

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

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

GMT+8, 2025-5-9 20:50 , Processed in 0.124789 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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