CC2530寄存器编程学习笔记_按键中断

news2024/10/6 12:28:49

目录

无中断按键

第一步 分析原理图

电路工作原理

第二步 配置寄存器

第一步 配置为通用IO口

        第二步 配置为输入

        第三步 输入模式选择

按键抖动

中断按键

第一步中断寄存器的配置

上升沿

下降沿

第一步 开启总中断使能

第二步 开启端口中断使能

第三步 开启端口引脚中断使能

 第四步 中断触发方式设置为下降沿

第二步 中断服务函数

对应的XXX填入内容及原因

        中断服务函数内部代码讲解

为什么要清除P0IFG

代码的流程图:


下面是我的CC2530的学习笔记之按键中断部分。

首先按键其实和点灯逻辑上都是一样的,先简单来过一下没有中断的按键,光是依靠if判断来进行改变LED灯亮灭的代码逻辑。

无中断按键

第一步 分析原理图

   

通过此图可以得出的信息:

  1. 电源连接

    • 电路中有两个3.3V电源连接点,分别为上方和下方的3.3V标记。
  2. 按键连接

    • 按键S1和S2分别连接到P0_0和P0_1引脚。
    • 按键S1和S2的另一端连接到GND(地),这意味着按键按下时会将相应引脚拉低到地电平(0V)。
  3. 上拉电阻

    • 每个按键都有一个上拉电阻(R10和R13),阻值为10K欧姆。这些电阻连接在3.3V电源和按键之间。
    • 上拉电阻的作用是当按键未按下时,将P0_0和P0_1引脚拉高到3.3V(高电平)。

电路工作原理

  • 未按下按键时:由于上拉电阻的作用,P0_0和P0_1引脚的电平为高电平(3.3V)。
  • 按下按键时:按键将P0_0和P0_1引脚直接连接到地(GND),使得引脚电平变为低电平(0V)。

有关上下拉电阻:

一、上拉电阻如图所示:

1、概念:将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平;

2、上拉是对器件注入电流;灌电流;

3、当一个接有上拉电阻的IO端口设置为输入状态时,它的常态为高电平;

二、下拉电阻如图所示:

1、  概念:将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平;

2、下拉是从器件输出电流;拉电流;

3、当一个接有下拉电阻的IO端口设置为输入状态时,它的常态为低电平;

此处摘自      “上拉电阻与下拉电阻”通俗解读_上拉电阻和下拉电阻-CSDN博客  

第二步 配置寄存器

第一步 配置为通用IO口

对于CC2530单片机的P0_0和P0_1引脚,配置为通用I/O口而不是外设I/O口是因为我们需要直接监测这些引脚的电平状态来判断按键的电频状态。外设I/O口通常用于特定的硬件外设(如UART、SPI、I2C等),而在这种情况下,选择通用I/O口更适合用于简单的引脚电平控制

我们根据上图以及上文可以看到我们需要配置端口功能为通用IO口,就选择PxSEL寄存器因为我们是P0_0和P0_1引脚。 所以我们就选择P0SEL寄存器。

代码

P0SEL &= ~0X03; //第0引脚和第1引脚置为0

        第二步 配置为输入

        在将方向设置为输入的时候,我们要先知道什么是输入输出,不需要多懂,简单了解一下就好了,懂这个为啥设为输入即可。

输入:输入是指检测各个引脚上的电平状态。

电平状态:电平状态分为高电平和低电平。高电平表示有电压,通常用数字符号1表示;低电平表示接地,通常用数字符号0表示。

应用示例:一个常见的输入例子是按钮。当按钮按下时,引脚检测到高电平(1);当按钮松开时,引脚检测到低电平(0)。

输出:输出是指控制引脚电平的高低状态。

电平状态:通过设置引脚的电平状态,可以控制外部设备。例如,高电平(1)可以点亮LED,低电平(0)可以熄灭LED。

应用示例:你提供的图片就是一个输出的例子。P1_0和P1_1引脚通过电阻连接到LED,当引脚输出高电平时,LED亮起;当引脚输出低电平时,LED熄灭。

 

 我们根据图可以看到如果我们需要配置改变方向为输入,就选择PxDIR寄存器因为我们是P0_0和P0_1引脚。 所以我们就选择P0DIR寄存器。

PxDIR寄存器的作用

        PxDIR寄存器就像一个控制面板,用来决定每个引脚是作为输入还是输出。每个引脚都有一个对应的开关(位),你可以通过这个开关来设置引脚的方向是输入还是输出。

代码如下:

P0SEL &= ~0x03; /将P1_0和P1_1配置为通用I/O
P0DIR &= 0x03; // 将P1_0和P1_1设置为输入

        第三步 输入模式选择

还是 很简单,为什么我们要进行输入模式的选择上下拉呢,说白点就是保险点 稳定点,当需要确保输入引脚的电平稳定时,如按键输入或传感器输入,就需要去选择。

因为我们是要选择上拉所以代码这么写:

P0SEL &= ~0X03; //通用IO
P0DIR &= ~0X03; // 方向选择  --- 输入模式 
P0INP &= ~0x03; // 输入模式设置  设置上/下拉 

 第四步 上拉模式的选择

   首先我们要知道 CC2530 有3组端口 P0 P1 P2 ---> P0 P1 有8个引脚 P2 有5个引脚。合起来有21个数字输入/输出引脚。P2 少了三个引脚而P2的5 6 7 引脚就可以用来选择具体的端口上拉还是下拉,需要注意的就是这个上拉下拉只能精确到端口!!!不能有P1_1是上拉 P1_2是下拉的这个情况,你要问为啥就是没有为啥 别人就是这么规定的,要么就换芯片 哈哈哈哈。

 代码如下

P0SEL &= ~0X03;//通用功能 
    P0DIR &= ~0X03;// 方向选择  --- 输入模式 
    P0INP &= ~0x03; // 输入模式设置  设置上/下拉 
    P2INP &= ~0X20; //设置上拉  P2INP  第5   6   7  位设置 P0端口 第5位  xx0x xxxx 

 到这里 按键的寄存器配置就搞定了。

需要注意的就是按键会有一个抖动的过程。简单了解一下

按键抖动

按键抖动是一个常见的现象,发生在机械按键或开关的按下和松开过程中。以下是按键抖动的原因及其影响:

按键抖动的原因

  1. 机械结构

    • 按键内部的机械结构在按下或松开的瞬间会发生弹跳。这是因为按键的金属触点在接触或分离时不会立即稳定,而是会在短时间内多次接触和分离。
  2. 弹性材料

    • 按键内部的弹性材料(如弹簧)在按下或松开时会产生振动,导致触点在短时间内多次接触和分离。
  3. 电气噪声

    • 按键的机械抖动会引起电气噪声,使得引脚电平在短时间内快速变化,产生多个高低电平的切换。

按键抖动的影响

  • 误触发:由于抖动,单次按键操作可能会被误认为多次按键,导致系统误触发多次。
  • 不稳定信号:抖动会导致输入信号不稳定,影响系统的可靠性和准确性。

按键抖动的解决方法

  1. 硬件消抖

    • 电容消抖:在按键两端并联一个小电容(如0.1µF),可以滤除高频抖动信号。
    • RC滤波器:使用电阻和电容组成的RC滤波器,可以平滑按键的抖动信号。
  2. 软件消抖

    • 延时法:在检测到按键按下后,延时一段时间(如10ms),再重新检测按键状态。如果按键状态稳定,则认为按键有效。
    • 计数法:连续多次读取按键状态,如果在一定时间内状态一致,则认为按键有效。

比较简单的就是加一个延时 把这个一定程度上给规避掉。

下面我们就可以来编写简单的LED按键开关的代码了,下面是代码的流程图:

代码如下:

#include "ioCC2530.h" 
 
#define LED1 P1_0 
#define LED2 P1_1 
 
#define S1 P0_0 
#define S2 P0_1 
 
void delay(int num) 
{ 
    int i = 0; 
    for(i = 0; i < num; i++) 
    { 
        int j = 0; 
        for(j = 0; j <400; j++) 
          ; 
    } 
} 
 
void LED_Init() 
{ 
    // 通用功能 
    P1SEL &= ~0X03; 
    // 方向选择 
    P1DIR |= 0X03; 
    // 初始化LED灯 
    LED1 = 0; 
    LED2 = 0; 
} 
 
//按键初始化  按键 输入 模式 上拉 
void Key_Init() 
{ 
    //通用功能 
    P0SEL &= ~0X03; 
    // 方向选择  --- 输入模式 
    P0DIR &= ~0X03; 
    // 输入模式设置  设置上/下拉 
    P0INP &= ~0x03; 
    //设置上拉  P2INP  第5   6   7  位设置 P0端口 第5位  xx0x xxxx 
    P2INP &= ~0X20; 
} 
 
void main() 
{ 
    LED_Init(); 
    Key_Init(); 
    while(1) 
    {

        // 输入模式可以直接判断引脚状态 
        if(S1 == 0)  // 按下按键 
        { 
            //消抖 
            delay(10); 
            if(S1 == 0)  // 确认按键是否真的按下 
            { 
                LED1 = ~LED1; 
                LED2 = ~LED2;

                // 等待按键松开 
                while(S1 == 0); 
            } 
        } 
    } 
    
}

当当当 就搞定了 你就可以通过按键去控制LED灯的亮灭了。

当然 一般都不这么写,一般都会写一个中断程序,按键来触发,所以接下来我们就进入中断按键喽


中断按键

什么是中断?

中断是一种机制,当某个事件发生时,单片机可以暂停当前正在执行的任务,转而去处理这个事件。处理完事件后,单片机可以继续执行之前的任务。

中断的类型

  1. 外部中断:由外部硬件事件触发,例如按键按下、传感器信号等。
  2. 内部中断:由单片机内部事件触发,例如定时器溢出、ADC转换完成等。

中断的优先级

不同的中断源可以有不同的优先级。当多个中断同时发生时,优先级高的中断会优先得到处理。

中断向量表

中断向量表是一个存储中断服务程序(ISR)地址的表。当中断发生时,单片机会根据中断向量表跳转到相应的ISR。

中断服务程序(ISR)

中断服务程序是处理中断事件的函数。当中断发生时,单片机会自动跳转到相应的ISR执行。ISR通常需要尽快执行完毕,以便让单片机返回主程序。

中断的使能和屏蔽

单片机可以通过设置寄存器来使能或屏蔽某个中断。使能中断后,当相应事件发生时,中断会被触发;屏蔽中断后,即使事件发生,中断也不会被触发。

中断的处理流程

  1. 中断事件发生:例如按键按下。
  2. 中断请求:中断控制器检测到中断事件,向CPU发出中断请求。
  3. 中断响应:CPU完成当前指令后,保存当前程序计数器和状态寄存器,跳转到ISR。
  4. 执行ISR:处理中断事件。
  5. 恢复现场:ISR执行完毕后,恢复之前保存的程序计数器和状态寄存器,返回主程序。

第一步中断寄存器的配置

首先我们要知道,只有通用I/O口设置成输入后,才可以用于产生中断。中断可以设置在外部信号的上升或下降沿触发。这个上下沿先看一下 下文有介绍。

这里简单讲解一下什么是上升沿和下降沿。

上升沿

上升沿是指信号从低电平(通常是0V)跃升到高电平(通常是3.3V或5V)的瞬间。这个瞬间的变化称为上升沿。

下降沿

下降沿是指信号从高电平(通常是3.3V或5V)下降到低电平(通常是0V)的瞬间。这个瞬间的变化称为下降沿。

在已经设置为通用I/O并且已经设置成输入后。 我们就开始配置中断寄存器了。

第一步 开启总中断使能

 这里可以看到EA是总中断使能位。当EA被设置为1时,单片机允许所有中断请求被响应。

这是为了确保单片机能够响应任何中断请求。如果EA不被使能,即使有中断请求发生,单片机也不会响应。

 这个是在ioCC250的头文件里面找到的,对其进行了位定义

代码如下:

    //P0端口的中断使能
    //P0端口中断源 开关在  IEN1 寄存器中定义  第5位
    IEN1 |= 0X20; // 0010 0000
    P0IE = 1;   // iocc2530 头文件  给IEN1 寄存器做了位定义!!

第二步 开启端口中断使能

配置端口中断使能的原因是:为了使能P0_0和P0_1引脚的中断功能,使得这两个引脚可以独立触发中断。

 代码如下:

    //P0端口的中断使能
    //P0端口中断源 开关在  IEN1 寄存器中定义  第5位
    IEN1 |= 0X20; // 0010 0000
    P0IE = 1;   // iocc2530 头文件  给IEN1 寄存器做了位定义!!

第三步 开启端口引脚中断使能

 

配置端口引脚中断使能的原因:为了使能P0_0和P0_1引脚的中断功能,使得这两个引脚可以独立触发中断。 

代码如下:

    //P0的引脚的 中断使能
    //开启P0端口 P0_0  P0_1
    P0IEN |= 0X03;  // 0000 0011

 第四步 中断触发方式设置为下降沿

 这里可以看到 PICTL寄存器可以设置P0、P1、P2的触发沿设置。

为什么设置下降沿而不是上升沿呢:这是为了在按键按下(通常会导致引脚电平从高变低)时触发中断。下降沿触发可以确保在按键按下时立即响应中断。

第二步 中断服务函数

红框标注的是中断向量 我个人认为需要结合代码来理解这个中断服务函数。示例代码如下:

#pragma vector = XXX_VECTOR
__interrupt void XXX_ISR() 
{
    // 处理中断函数的步骤
}

对应的XXX填入内容及原因

  1. XXX_VECTOR

    • 解释XXX_VECTOR是中断向量的名称,用于指定哪个中断源触发这个中断服务函数。
    • 填入内容:根据具体的中断源,填入相应的中断向量名称。例如:
      • P0INT_VECTOR:用于P0端口的中断。
      • T1_VECTOR:用于定时器1的中断。
      • ADC_VECTOR:用于ADC转换完成的中断。
    • 原因:填入具体的中断向量名称是为了告诉编译器,当对应的中断源触发中断时,应该跳转到这个中断服务函数执行。
  2. XXX_ISR

    • 解释XXX_ISR是中断服务函数的名称(可以随意填 最后最好跟一个_ISR),用于处理特定中断源的中断事件。
    • 填入内容:根据具体的中断源,填入相应的中断服务函数名称。例如:
      • P0_ISR:用于处理P0端口的中断。
      • T1_ISR:用于处理定时器1的中断。
      • ADC_ISR:用于处理ADC转换完成的中断。
    • 原因:填入具体的中断服务函数名称是为了定义一个函数,用于处理特定中断源的中断事件。在中断发生时,单片机会跳转到这个函数执行相应的中断处理步骤。

        通过填入具体的中断向量名称和中断服务函数名称,我们可以定义和配置中断服务函数,使得单片机在中断发生时能够正确跳转到相应的函数执行中断处理步骤。

        中断服务函数内部代码讲解

接下来我们结合案例代码来讲解一下中断服务函数中处理中断函数的步骤在写的时候应该注意什么

#pragma vector = P0INT_VECTOR 
__interrupt void Key_ISR() 
{ 
    if(P0IFG & 0X01)  //S1 
    { 
        LED2 = !LED2;  // 中断操作 
        P0IFG &= ~0X01; 
    } 
    if(P0IFG & 0X02)  //S2 
    { 
        LED2 = !LED2;  // 中断操作 
        P0IFG &= ~0X02; 
    } 
    //清除端口中断标志  IRCON 寄存器第5位  但是头文件做了位定义 
    P0IF = 0; 
}

 进入中断服务函数我们可以看到:有个P0IFG,那么这个寄存器的含义是什么呢?

儿豁 看到这个麻了,有点没懂。

        第一个图意思就是  P0IFG 是P0端口的中断标志寄存器。当P0端口的某个引脚发生中断条件(例如电平变化)时,相应的中断标志位会被置为1。即使该引脚的中断使能位没有被设置,中断标志位也会被置位。然后置为一了。

        第二个图的未决信号:未决信号意味着中断事件已经发生,但尚未被处理。当中断请求发生时,相应的中断标志位会被设置为1。这个标志位的状态(通常是位于特定的寄存器中)告诉CPU有一个中断请求需要处理。CPU或中断控制器会检查这些标志位,确定哪个中断请求是活跃的,并执行相应的中断服务程序(ISR)来处理该事件。

清除中断标志位的步骤如下:

  1. 检测中断标志:首先检测哪个引脚触发了中断。
  2. 执行中断操作:根据触发中断的引脚执行相应的操作。
  3. 清除中断标志:清除相应的中断标志位,防止重复触发中断。
  4. 清除端口中断标志:最后清除整个端口的中断标志。

为什么要清除P0IFG

        当中断已经执行完毕后,需要清除相应的中断标志位,以防止重复触发中断。


 

这个P0IF是经过了位定义的。

 

 可以看到IRCON的第五位是控制着端口0 的中断标志的,把它置零的原因就是确保所有P0端口的中断标志都被清除,防止重复触发中断。

代码的流程图:

下面我们就可以来编写简单的中断按键控制LED的代码了,下面是代码的流程图:

咋样 是不是很简单。

完整代码附上:

#include "ioCC2530.h" 
 
#define LED1 P1_0 
#define LED2 P1_1 
 
#define S1 P0_0 
#define S2 P0_1 
 
void delay(int num) 
{ 
    int i = 0; 
    for(i = 0; i < num; i++) 
    { 
        int j = 0; 
        for(j = 0; j <400; j++) 
          ; 
    } 
} 
 
void LED_Init() 
{ 
    // 通用功能 
    P1SEL &= ~0X03; 
    // 方向选择 
    P1DIR |= 0X03; 
    // 初始化LED灯 
    LED1 = 0; 
    LED2 = 0; 
} 
 
//按键初始化  按键 输入 模式 上拉 
void Key_Init() 
{ 
    //通用功能 
    P0SEL &= ~0X03; 
    // 方向选择  --- 输入模式 
    P0DIR &= ~0X03; 
    // 输入模式设置  设置上/下拉 
    P0INP &= ~0x03; 
    //设置上拉  P2INP  第5   6   7  位设置 P0端口 第5位  xx0x xxxx 
    P2INP &= ~0X20; 
} 
// 按键中断 初始化 
void Key_ISR_Init() 
{ 
    // 总中断使能 
    EA = 1; 
    //P0端口的中断 
    P0IE = 1; 
    // P0具体引脚中断 
    P0IEN |= 0X03; 
    //中断触发方式  下降沿 
    PICTL |= 0X01; 
} 
 
void main() 
{ 
    LED_Init(); 
    Key_Init(); 
    Key_ISR_Init(); 
    while(1) 
    { 
        LED1 = !LED1; 
        delay(1000); 
    } 
} 
 
// 当按键中断来临需要处理的特殊操作 
#pragma vector = P0INT_VECTOR 
__interrupt void Key_ISR() 
{ 
    if(P0IFG & 0X01)  //S1 
    { 
        LED2 = !LED2;  // 中断操作 
        P0IFG &= ~0X01; 
    } 
    if(P0IFG & 0X02)  //S2 
    { 
        LED2 = !LED2;  // 中断操作 
        P0IFG &= ~0X02; 
    } 
    //清除端口中断标志  IRCON 寄存器第5位  但是头文件做了位定义 
    P0IF = 0; 
}

 芜湖 完结 撒花

附上原理图        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1903411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VSCode推荐插件:Copy Class Name快速复制html中的类名

插件地址&#xff1a;https://marketplace.visualstudio.com/items?itemNamemouday.copy-class-name 复制Vue和React中HTML代码的类名&#xff0c;实现快速复制 使用方式&#xff1a; 选中代码&#xff0c;右键复制类名&#xff0c;再粘贴到文件中即可 示例 <div clas…

苹果电脑能玩赛博朋克2077吗 如何在mac上运行赛博朋克2077 crossover能玩什么游戏

各位喜欢赛博朋克风的一定不能错过《赛博朋克2077》。那么《赛博朋克2077》是一款什么样的游戏&#xff1f;《赛博朋克2077》在苹果电脑上可以运行吗&#xff1f;一起来看看介绍吧。 一、《赛博朋克2077》是一款什么样的游戏&#xff1f; 《赛博朋克2077》是一款由CD Projekt …

NVIDIA RTX Remix开源 让AI驱动的经典游戏重制复兴

游戏开发商往往会让激动的粉丝们在游戏发布后等待数年&#xff0c;以获得他们喜爱的游戏的重制版。不过&#xff0c;这个问题可能很快就会成为过去。NVIDIA 宣布其 RTX Remix 工具包将开放源代码&#xff0c;这将为钟情于经典游戏的玩家带来惊喜。 RTX Remix 是 NVIDIA 的修改套…

计算机组成原理学习笔记(一)

计算机组成原理 [类型:: [[计算机基础课程]] ] [来源:: [[B站]] ] [主讲人:: [[咸鱼学长]] ] [评价:: ] [知识点:: [[系统软件]] & [[应用软件]] ] [简单解释:: 管理计算机系统的软件&#xff1b; 按照任务需要编写的程序 ] [问题:: ] [知识点:: [[机器字长]] ] [简单…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——4.预后相关外泌体基因确定之森林图(3)

内容如下&#xff1a; 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

IT之家最新科技热点 | 小米 AI 研究院开创多模态通用模型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Sentinel-1 Level 1数据处理的详细算法定义(一)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程&#xff0c;以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

运维系列.Nginx配置文件结构功能总结

运维系列 Nginx配置文件结构功能总结 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_285…

2024年6月总结 | 软件开发技术月度回顾(第一期)

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ Hello&#xff0c;大家好啊&#xff01;随着欧洲杯和奥运会的临近&#xff0c;2024 年下半年的序幕也随之拉开。回顾 2024 年上半年的技术圈&#xff0c;我们看到了一系列令人振奋的进展…

快手大模型首次集体亮相 获《焦点访谈》报道关注

7月6日,2024世界人工智能大会暨人工智能全球治理高级别会议在上海闭幕。 据央视《焦点访谈》报道,今年的大会展览持续扩容升级,展览规模、参展企业数、亮点展品数、首发新品数均创历史新高。大会聚焦大模型、算力、机器人、自动驾驶等重点领域,集中展示了一批“人工智能”创新…

(南京观海微电子)——电阻应用及选取

什么是电阻&#xff1f; 电阻是描述导体导电性能的物理量&#xff0c;用R表示。 电阻由导体两端的电压U与通过导体的电流I的比值来定义&#xff0c;即&#xff1a; 所以&#xff0c;当导体两端的电压一定时&#xff0c;电阻愈大&#xff0c;通过的电流就愈小&#xff1b;反之&…

从零开始学习网络安全渗透测试之Linux基础篇——(二)Linux的安装

从零开始学习网络安全渗透测试之Linux基础篇——&#xff08;二&#xff09;Linux的安装 一、 VMWare安装 首先&#xff0c;我们需要下载vmware的安装包。 下载 一般我们推荐15或者16的版本&#xff0c;太低的版本可能跟一些新的操作系统镜像不兼容。 vmware16注册.zip 链接&…

Angular基础保姆级教程 - 1

Angular 基础总结&#xff08;完结版&#xff09; 1. 概述 Angular 是一个使用 HTML、CSS、TypeScript 构建客户端应用的框架&#xff0c;用来构建单页应用程序。 Angular 是一个重量级的框架&#xff0c;内部集成了大量开箱即用的功能模块。 Angular 为大型应用开发而设计…

第3章.中央服务器的物联网模式--企业系统集成

为了从物联网实施中获得最大价值&#xff0c;物联网系统需要与企业中的现有软件系统集成。事实上&#xff0c;与外部系统的集成允许网络世界和物理世界之间的交互——代表物理世界的物联网系统和驻留在网络/虚拟世界中的外部系统。用于此模式的符号如下图所示&#xff1a; 图3.…

【高录用、快检索、过往5届均已检索、SPIE 出版】第六届无线通信与智能电网国际会议(ICWCSG 2024)

随着科技的飞速发展和能源需求的日益增长&#xff0c;智能电网技术逐渐成为电力行业的重要发展方向。与此同时&#xff0c;无线通信技术在近年来也取得了显著的进步&#xff0c;为智能电网的发展提供了强有力的支持。为了进一步推动无线通信与智能电网的结合与发展&#xff0c;…

微软拼音输入法不显示选字框问题

问题展示&#xff1a;不显示选字框 解决方式 打开兼容性即可&#xff08;估计是升级带来的bug&#xff09;

Oracle RAC 19c 打补丁至最新版本-19.23.0.0.0

实验环境-我是从19.0.0.0直接打到19.23.0.0.0&#xff0c;适合刚部署好的集群打补丁直接到最新版本。 查看当前环境 查询集群中运行的 Oracle Clusterware 软件的 activex 版 查询本地节点上二进制文件中存储的 Oracle Clusterware 软件的版本 查询本地服务器上 OHAS 和 Oracle…

Redis数据结构解析-RedisObject

文章目录 ☃️概述☃️源码 ☃️概述 RedisObject 是 Redis 中表示数据对象的结构体&#xff0c;它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中&#xff0c;所有的数据都被存储为 RedisObject 类型的对象。 RedisObject 结构体定义如下&#xff08;简化版本&#xf…

七大排序-冒泡排序,插入排序,希尔排序(一)

目录 排序冒泡排序插入排序冒泡排序和插入排序的对比希尔排序 排序 先写单趟&#xff0c;再写多趟&#xff0c;这样比较好写 排序可以理解为对商品价格的排序&#xff0c;对数字大小的排序&#xff0c;排序再生活中随处可见 冒泡排序 冒泡排序就是两个相邻的数交换&#xff…

Java+MySQL8.0.36+ElementUI数字化产科信息管理系统之”五色管理”

JavaMySQL8.0.36ElementUI数字化产科信息管理系统之”五色管理” 一、数字化产科信息管理系统概述 数字化产科信息管理五色管理是一种基于孕产妇妊娠风险的分类管理方法&#xff0c;通过数字化手段实现孕产妇全周期的健康风险评估与管理。该方法将孕产妇按照风险等级分为绿色、…