【51单片机仿真】基于51单片机设计的钟表定时闹钟系统仿真源码设计文档演示视频——完整资料下载

演示视频

设计内容
(1)使用 DS1302 结合字符型 LCD12864 显示器设计一个简易的定时闹钟 LCD 时钟。程序执行后 LCD 显示“00:00:00” 
(2)K1—设置现在的时间,年闪烁,再按 K1 键月闪烁,依次日,星期,时,分, 秒。 
(3)K2—正常显示时间模式下按下 K2 键显示闹钟设置的时间,再按 K1 键依次 年,月,日,时,分,秒闪烁。 
(4)K3—在设置现在时间或闹铃时间模式下,K3 负责增加功能,例如日闪烁时, 每按一次 K3 键日期加 1,加到 31 再从 1 开始。 
(5)K4—在正常时间显示模式下,K4 为闹铃 ON/OFF 的状态切换,设置为 ON 时 连续三次发出“哗”的一声,并在屏幕上显示闹铃图案,设置为 OFF 发出“哗” 的一声,闹铃图案消失。在设置时间或闹铃模式下按下 K4 键设置完成,恢复 到正常显示时间模式。闹铃时间到时,发出一阵声响,按下本键可以停止声响。

摘要

在现代生活中,时钟和闹钟是必不可少的工具。本文介绍了一种基于DS1302实时时钟芯片和LCD12864显示模块的简易定时闹钟设计。通过对DS1302的时间读取和LCD12864的字符显示技术,结合按键控制,本文实现了一种可以显示时间、设置时间、设置闹钟并控制闹钟开关的系统。本文详细阐述了系统的硬件设计、软件设计以及具体的实现过程,并通过调试与测试验证了系统的功能。此设计不仅适用于个人学习和项目开发,也为嵌入式系统应用提供了重要的参考。

目录

摘要

1. 引言

2. 系统设计原理

2.1 硬件设计

2.1.1 DS1302实时时钟芯片

DS1302的引脚功能

DS1302的连接方式

DS1302的基本操作

2.1.2 LCD12864字符显示模块

LCD12864的引脚功能

LCD12864的连接方式

LCD12864的基本操作

2.1.3 按键模块

按键连接方式

按键功能描述

2.1.4 蜂鸣器模块

蜂鸣器连接方式

蜂鸣器工作原理

2.1.5 电源管理

2.2 软件设计

2.2.1 系统初始化

2.2.2 时间读取与显示

2.2.3 时间设置功能

2.2.4 闹钟设置功能

2.2.5 闹钟开关控制

2.2.6 按键处理及消抖

3. 关键技术实现

3.1 DS1302的接口与通信

DS1302通信过程

3.2 LCD12864的显示控制

LCD12864初始化

LCD12864字符显示

3.3 按键多功能实现

按键功能切换

3.4 闹钟响铃与停止

4. 系统调试与测试

4.1 硬件电路调试

4.2 软件功能测试

4.3 综合性能验证

5. 结论

系统源码仿真演示视频等资料下载链接


1. 引言

随着嵌入式技术的快速发展,越来越多的电子设备被应用于日常生活中。时钟和闹钟是人们生活中必不可少的工具,它们帮助人们合理安排时间,提高生活和工作的效率。虽然市场上已有多种形式的时钟和闹钟,但为了更好地理解嵌入式系统的设计原理和实现方法,设计并实现一个简易的定时闹钟具有重要的实践意义。

本文设计了一种基于DS1302实时时钟芯片和LCD12864显示模块的简易定时闹钟系统。DS1302芯片是一种低功耗的实时时钟芯片,能够提供年、月、日、时、分、秒的时间信息,并支持电池备份功能。LCD12864是一个常用的字符显示模块,具有良好的显示效果和较低的功耗。通过使用这些模块,结合按键控制,实现了一种功能丰富、使用便捷的定时闹钟系统。

本文的设计不仅适用于个人学习和项目开发,还可以为嵌入式系统的应用提供有益的参考。

2. 系统设计原理

2.1 硬件设计

硬件设计是实现系统功能的基础。本设计的硬件部分包括DS1302实时时钟芯片、LCD12864显示模块、按键模块、蜂鸣器模块和电源管理模块。以下是各个模块的详细介绍。

2.1.1 DS1302实时时钟芯片

DS1302是美国达拉斯半导体公司推出的一款低功耗实时时钟芯片,广泛应用于各种需要计时功能的设备中。其主要特点包括:

  • 低功耗:工作电流小于1µA,非常适合电池供电设备。
  • 电池备份:支持外接电池,在掉电情况下仍能维持计时。
  • 串行接口:采用简单的三线串行接口,便于与单片机连接。
  • 支持BCD码:时间数据以BCD码格式存储,便于处理和显示。
  • 计时功能:支持年、月、日、星期、时、分、秒的计时。
DS1302的引脚功能
  • VCC1/VCC2:主电源和备用电源引脚。
  • GND:接地。
  • RST:复位信号输入,用于启动和结束数据传输。
  • SCLK:串行时钟信号输入,控制数据传输速度。
  • DSIO:串行数据输入/输出,用于传输时间和控制信息。
DS1302的连接方式

DS1302与单片机之间通过三根线连接:RST、SCLK和DSIO。如下图所示:

单片机端口   DS1302引脚
-----------  ---------
P1.0        -> RST
P1.1        -> SCLK
P1.2        -> DSIO
DS1302的基本操作
  • 读取时间:通过发送读命令,从DS1302的寄存器中读取当前时间信息。
  • 设置时间:通过发送写命令,将新的时间信息写入DS1302的寄存器中。
  • 启动/停止时钟:通过控制寄存器中的特定位,启动或停止时钟的计时功能。

2.1.2 LCD12864字符显示模块

LCD12864是一个128x64分辨率的液晶显示模块,支持字符和简单图形的显示。其特点包括:

  • 高分辨率:支持128x64像素的显示,适合显示多行字符和简单图形。
  • 低功耗:在显示状态下功耗较低,适合电池供电的设备。
  • 多种接口:支持并行和串行接口,便于与各种微控制器连接。
  • 灵活显示:支持多种显示模式和字符字体,可根据需要进行配置。
LCD12864的引脚功能
  • VCC/GND:电源和接地引脚。
  • RS:寄存器选择引脚,控制命令或数据输入。
  • RW:读/写选择引脚,控制数据读入或写出。
  • E:使能信号引脚,控制数据传输时序。
  • DB0-DB7:数据总线引脚,用于数据传输。
LCD12864的连接方式

LCD12864通过8位并行数据总线与单片机连接,具体连接如下:

单片机端口   LCD12864引脚
-----------  ----------
P2.0-P2.7   -> DB0-DB7
P3.0        -> RS
P3.1        -> RW
P3.2        -> E
LCD12864的基本操作
  • 初始化:配置显示模式、光标位置、字符大小等。
  • 显示字符:通过指定地址和数据,显示字符信息。
  • 清屏:清除屏幕上的所有显示内容。
  • 设定光标:设置光标位置,便于字符的显示和更新。

2.1.3 按键模块

按键模块用于接收用户输入,实现对时间和闹钟的设置。设计中使用四个按键:

  • K1:时间设置/切换键。
  • K2:闹钟设置/切换键。
  • K3:增加功能键。
  • K4:闹钟开关/确认键。
按键连接方式

按键通过电阻阵列连接到单片机I/O口,实现对按键状态的检测。具体连接如下:

单片机端口   按键
-----------  -----
P0.0        -> K1
P0.1        -> K2
P0.2        -> K3
P0.3        -> K4
按键功能描述
  • K1按键:在正常显示模式下,按下K1进入时间设置模式,切换需要设置的时间部分。
  • K2按键:在正常显示模式下,按下K2进入闹钟设置模式,切换需要设置的闹钟部分。
  • K3按键:在设置模式下,按下K3增加选定时间部分的数值。
  • K4按键:在正常显示模式下,按下K4切换闹钟开关状态。在设置模式下,按下K4确认设置并返回正常模式。

2.1.4 蜂鸣器模块

蜂鸣器用于闹钟响铃提示,提醒用户设定的闹钟时间已到。

蜂鸣器连接方式

蜂鸣器通过三极管驱动,连接到单片机的I/O口。具体连接如下:

单片机端口   蜂鸣器
-----------  -----
P0.4        -> BUZ1
蜂鸣器工作原理
  • 响铃控制:单片机通过输出高低电平,控制三极管导通与否,从而控制蜂鸣器响铃。
  • 停止响铃:按下K4按键,单片机停止输出控制信号,关闭蜂鸣器。

2.1.5 电源管理

系统需要稳定的电源供应以确保正常工作。

  • 电源输入:系统可以使用5V直流电源输入。
  • 稳压模块:使用LM7805稳压芯片,将输入电压稳定在5V。
  • 电池备份:DS1302支持电池备份功能,在主电源掉电时仍能维持时间计时。

2.2 软件设计

软件设计是实现系统功能的核心。本文采用C语言进行编程,利用单片机的I/O端口实现对DS1302、LCD12864和按键的控制。软件设计包括系统初始化、时间读取与显示、时间设置、闹钟设置、按键处理及消抖等模块。

2.2.1 系统初始化

系统初始化包括对DS1302、LCD12864和I/O端口的配置。通过初始化,设置系统的初始状态和参数,确保各模块正常工作。

void SystemInit()
{// 初始化DS1302Ds1302Init();// 初始化LCD12864LCDInit();// 初始化按键KeyInit();
}

2.2.2 时间读取与显示

通过DS1302的读命令,获取当前的时间信息,并在LCD12864上显示。

void DisplayTime()
{uchar time[7];Ds1302ReadTime(time); // 读取当前时间// 将时间转换为字符串char buffer[20];sprintf(buffer, "%02x:%02x:%02x", time[2], time[1], time[0]);// 在LCD12864上显示时间LCDSetCursor(0, 0);LCDPrint(buffer);
}

2.2.3 时间设置功能

通过按键K1进入时间设置模式,用户可依次设置年、月、日、时、分、秒。

void SetTime()
{uchar time[7];Ds1302ReadTime(time); // 读取当前时间uchar position = 0; // 设定位置while (1){DisplayTime(); // 显示当前时间if (KeyScan(K1)) // 按下K1键,切换位置{position = (position + 1) % 6;}if (KeyScan(K3)) // 按下K3键,增加数值{time[position]++;}if (KeyScan(K4)) // 按下K4键,确认设置{Ds1302SetTime(time);break;}}
}

2.2.4 闹钟设置功能

通过按键K2进入闹钟设置模式,用户可设置闹钟的时间。

void SetAlarm()
{uchar alarm[3]; // 闹钟时间:时、分、秒uchar position = 0;while (1){DisplayAlarm(alarm); // 显示当前闹钟时间if (KeyScan(K1)) // 按下K1键,切换位置{position = (position + 1) % 3;}if (KeyScan(K3)) // 按下K3键,增加数值{alarm[position]++;}if (KeyScan(K4)) // 按下K4键,确认设置{SetAlarmTime(alarm);break;}}
}

2.2.5 闹钟开关控制

在正常显示模式下,通过按键K4实现闹钟开关的控制。

void ToggleAlarm()
{static uchar alarmOn = 0;if (KeyScan(K4)) // 按下K4键,切换闹钟状态{alarmOn = !alarmOn;if (alarmOn){LCDShowAlarmIcon();}else{LCDHideAlarmIcon();}}
}

2.2.6 按键处理及消抖

按键输入存在抖动现象,需要进行消抖处理以保证输入的准确性。

uchar KeyScan(uchar key)
{static uchar keyState = 0;if (KEY_PORT & key) // 检测按键状态{if (keyState == 0){Delay(10); // 消抖延时if (KEY_PORT & key){keyState = 1;return 1;}}}else{keyState = 0;}return 0;
}

3. 关键技术实现

3.1 DS1302的接口与通信

DS1302的通信通过三线接口实现,分别是RST、SCLK和DSIO。通信过程中,主设备通过RST启动数据传输,SCLK提供时钟信号,DSIO用于传输数据。DS1302内部寄存器以BCD码格式存储时间数据,用户可以通过读写寄存器来实现时间的设置和读取。

DS1302通信过程
  • 启动传输:将RST置高电平,开始数据传输。
  • 发送命令:通过SCLK的上升沿,逐位发送命令字节。
  • 数据传输:根据命令字节的类型,读写时间数据。
  • 结束传输:将RST置低电平,结束数据传输。
void Ds1302Write(uchar addr, uchar dat)
{uchar i;RST = 0;_nop_();SCLK = 0;_nop_();RST = 1;_nop_();// 发送地址for (i = 0; i < 8; i++){DSIO = addr & 0x01;addr >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();}// 发送数据for (i = 0; i < 8; i++){DSIO = dat & 0x01;dat >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();}RST = 0;_nop_();
}uchar Ds1302Read(uchar addr)
{uchar i, dat = 0;RST = 0;_nop_();SCLK = 0;_nop_();RST = 1;_nop_();// 发送地址for (i = 0; i < 8; i++){DSIO = addr & 0x01;addr >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();}// 读取数据for (i = 0; i < 8; i++){dat >>= 1;if (DSIO)dat |= 0x80;SCLK = 1;_nop_();SCLK = 0;_nop_();}RST = 0;_nop_();return dat;
}

3.2 LCD12864的显示控制

LCD12864的控制通过并行数据总线实现。单片机通过RS、RW和E引脚控制LCD12864的命令和数据传输。

LCD12864初始化

在使用LCD12864之前,需对其进行初始化,包括设置显示模式、清屏和设置光标位置等。

void LCDInit()
{LCDWriteCmd(0x30); // 基本指令集Delay(5);LCDWriteCmd(0x0C); // 显示开Delay(5);LCDWriteCmd(0x01); // 清屏Delay(5);LCDWriteCmd(0x06); // 光标右移Delay(5);
}void LCDWriteCmd(uchar cmd)
{RS = 0; // 命令模式RW = 0; // 写模式LCD_DATA = cmd;E = 1;_nop_();E = 0;Delay(2);
}void LCDWriteData(uchar data)
{RS = 1; // 数据模式RW = 0; // 写模式LCD_DATA = data;E = 1;_nop_();E = 0;Delay(2);
}
LCD12864字符显示

通过LCD12864的显示指令,可以在屏幕上显示字符信息。

void LCDPrint(char *str)
{while (*str){LCDWriteData(*str++);}
}void LCDSetCursor(uchar x, uchar y)
{uchar addr;switch (y){case 0:addr = 0x80 + x;break;case 1:addr = 0x90 + x;break;case 2:addr = 0x88 + x;break;case 3:addr = 0x98 + x;break;default:return;}LCDWriteCmd(addr);
}

3.3 按键多功能实现

通过检测按键的状态变化,实现不同的功能。在不同的操作模式下,按键有不同的功能。

按键功能切换
  • 正常显示模式:K1进入时间设置,K2进入闹钟设置,K4切换闹钟开关。
  • 时间设置模式:K1切换设定位置,K3增加数值,K4确认设置。
  • 闹钟设置模式:K1切换设定位置,K3增加数值,K4确认设置。
void KeyProcess()
{if (KeyScan(K1)){if (mode == NORMAL){mode = SET_TIME;}else if (mode == SET_TIME){position = (position + 1) % 6;}else if (mode == SET_ALARM){position = (position + 1) % 3;}}if (KeyScan(K2)){if (mode == NORMAL){mode = SET_ALARM;}}if (KeyScan(K3)){if (mode == SET_TIME || mode == SET_ALARM){IncreaseValue(position);}}if (KeyScan(K4)){if (mode == NORMAL){ToggleAlarm();}else if (mode == SET_TIME || mode == SET_ALARM){mode = NORMAL;}}
}

3.4 闹钟响铃与停止

当系统检测到当前时间与设定的闹钟时间一致时,控制蜂鸣器响铃。用户可以通过按下按键K4停止响铃。

void CheckAlarm()
{if (alarmOn && IsAlarmTime()){BuzzerOn();}
}uchar IsAlarmTime()
{uchar time[3];Ds1302ReadTime(time);return (time[2] == alarm[0] && time[1] == alarm[1] && time[0] == alarm[2]);
}void BuzzerOn()
{BUZ1 = 1;
}void BuzzerOff()
{BUZ1 = 0;
}

4. 系统调试与测试

系统的调试与测试是确保设计成功的关键步骤。在硬件和软件设计完成后,需要对系统进行全面的调试和测试,以验证其功能和性能。

4.1 硬件电路调试

硬件电路调试包括对DS1302、LCD12864、按键和蜂鸣器模块的连接和功能测试。

  • DS1302调试:确保时钟芯片正确计时,在掉电情况下计时不丢失。
  • LCD12864调试:确保字符显示正常,清屏和光标设置功能正常。
  • 按键调试:确保按键输入准确,消抖处理有效。
  • 蜂鸣器调试:确保蜂鸣器能够正常响铃和停止。

4.2 软件功能测试

软件功能测试包括对系统各个功能模块的验证。

  • 时间读取与显示测试:确保显示的时间与实际时间一致。
  • 时间设置测试:确保能够正确设置年、月、日、时、分、秒。
  • 闹钟设置测试:确保能够正确设置闹钟时间。
  • 闹钟开关测试:确保闹钟能够正常开关。
  • 闹钟响铃测试:确保闹钟时间到时能够响铃,并能够通过按键停止响铃。

4.3 综合性能验证

对系统进行长时间的运行测试,验证系统的稳定性和可靠性。在不同的环境下运行,检查系统的性能,确保其能够满足设计要求。

5. 结论

本文设计了一种基于DS1302和LCD12864的简易定时闹钟系统。通过对硬件和软件的设计与实现,实现了时间显示、时间设置、闹钟设置和闹钟控制等功能。通过调试与测试验证了系统的功能和性能,设计满足预期要求。该系统设计简单、成本低廉,适合用于嵌入式系统学习和小型应用项目。

系统源码仿真演示视频等资料下载链接

基于51单片机设计的钟表定时闹钟系统仿真/源码/设计文档/演示视频(毕设/课设/竞赛/实训/项目开发)资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/m0_61712829/89615005

单片机项目大合集链接:

https://www.kdocs.cn/l/cmrxCxJN05YN

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15.75.【C语言】表达式求值

目录 一.整型提升 1.定义 2. 一.整型提升 1.定义 C语言中整型算术运算总是至少以缺省&#xff08;默认&#xff09;整型类型的精度来进行的。为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换称为整型提升 2.整型提…

njs、nginx JavaScript、在nginx上写JavaScript、nginx支持js

njs、nginx JavaScript、在nginx上写JavaScript、nginx支持js 现在是 2024-08-05 &#xff0c;在一个月前&#xff0c;我逛nginx官网&#xff0c;还没有这个模块的介绍。看njs官网&#xff0c;在四年前已经创建这个项目。不知道是不是近期才把这个项目纳入。以前不知道这模块&…

C# 构建观测者模式(或者为订阅者模型)

前言&#xff1a; 观测者模型的基本理念&#xff0c;就是&#xff0c;我有一个公共的事件&#xff0c;定义好他的事件的触发、数据接口。然后&#xff0c;通过增加订阅者&#xff08;实例&#xff09;来订阅这个事件的&#xff0c;或者说观察这个事件。如果事件发生&#xff0…

未授权访问漏洞系列详解⑥!

JBoss未授权访问漏洞 JBoss是一个基于J2EE的开放源代码应用服务器&#xff0c;代码遵循LGPL许可&#xff0c;可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器&#xff0c;支持EJB1.1、EJB 2.0和EJB3规范。,默认情况下访问 http://ip:8080/jmx-console 就可以…

【Java数据结构】---初始数据结构

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 从今天开始我们就要学习Java…

Altium designer学习笔记03 -原理图绘制

原理图绘制 1. 原理图页大小设置2.原理图格点的设置3. 原理图模板的应用4. 元件的放置5.元件属性的编辑6.元件的选择、移动、旋转、镜像6.1 元件的选择6.2 元件的移动6.3 元件的旋转6.3 元件的镜像 7.元件的复制/剪切/粘贴8.元件的排列与对齐9.绘制导线的导线属性设置10.放置网…

实时数仓分层架构详解

首先&#xff0c;我们从数据仓库说起。 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员提出了商业数据仓库的概念。数据仓库概念的提出&#xff0c;是为了解决和数据流相关的各种问题&#xff0c;特别是多重数据复制带来的高成本问题。 数据仓库之父Bill …

简单反射型XSS的复现

xss反射型攻击&#xff1a; 1.最简单的漏洞复现&#xff1a; 这里我们有一个最简单的网页&#xff1a;由于地址不存在&#xff0c;所以图片加载不出来。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta…

skynet 连接redis

文章目录 概述main.luaagent.luaredis.lua 小结 概述 之前写过skynet 入门篇&#xff0c;还有skynet实操篇&#xff1b;这2篇&#xff0c;主要写了skynet如何使用&#xff0c;还有些skynet的调用流程之类。 其实&#xff0c;看过skynet的demo之后&#xff0c;发现skynet中没有…

Simulink模型开发中的一些自动化方法

随着Simulink模型的产品化开发进程&#xff0c;许多模型开发人员会关心模型的建模自动化问题。比如如何对模型中的元素进行批量查找和修改&#xff1b;如何构建自己的建模规则对模型进行检查&#xff1b;如何实现测试自动化等。在这些使用场景中我们都需要了解一些Simulink函数…

谈谈冯诺依曼体系

我们都知道冯诺依曼体系这张图最为代表性&#xff0c;而接下来我们就来浅谈一下各部分之间的作用~ 输入设备&#xff1a;键盘&#xff0c;磁盘&#xff0c;网卡&#xff0c;话筒等等 输出设备&#xff1a;磁盘&#xff0c;网卡&#xff0c;声卡&#xff0c;显示屏等等 这些硬件…

1.1、centos stream 9安装Kubernetes v1.30集群 环境说明

最近正在学习kubernetes&#xff0c;买了一套《Kubernetes权威指南 从Docker到Kubernetes实践全接触(第六版)》这本书讲得很好&#xff0c;上下两册&#xff0c;书中k8s的版本是V1.29&#xff0c;目前官网最新版本是v1.30。强烈建议大家买一套看看。 Kubernetes官网地址&#x…

sql注入——二次注入

二次注入 简介工具环境具体实施 简介 二次注入是一种较为隐蔽的 SQL 注入攻击方式。它并非直接在输入时进行攻击&#xff0c;而是先将恶意数据存储到数据库中&#xff0c;这些数据看似正常。随后&#xff0c;应用程序在后续的操作中&#xff0c;再次使用或处理这些之前存储的恶…

消息队列:Kafka吞吐量为什么比RocketMQ大

根据资料显示RocketMQ每秒能处理10W量级数据&#xff0c;而Kafka能处理17W量级数据。 这两者差别主要再使用的零拷贝技术不一样。 再什么情况下零拷贝技术诞生了 为了防止消息队列中的消息因为各种意外情况丢失&#xff0c;要对消息进行持久化处理&#xff0c;将其存储在磁盘…

NLP——文本预处理

本文思维导图 文本预处理及其作用 文本语料在输送给模型前一般需要一系列的预处理工作, 才能符合模型输入的要求, 如: 将文本转化成模型需要的张量, 规范张量的尺寸等, 而且科学的文本预处理环节还将有效指导模型超参数的选择, 提升模型的评估指标. 一、文本处理的基本方法 1…

C++ | Leetcode C++题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPowerOfThree(int n) {return n > 0 && 1162261467 % n 0;} };

【TS】declare 全局声明方式

declare关键字 declare是描述TS文件之外信息的一种机制&#xff0c;它的作用是告诉TS某个类型或变量已经存在&#xff0c;我们可以使用它声明全局变量、函数、类、接口、类型别名、类的属性或方法以及后面会介绍的模块与命名空间。 declare关键字用来告诉编译器&#xff0c;某…

工业控制常用的EtherNet/IP、OPC UA协议的标签数据转发到另外的PLC寄存器地址

在工业自动化领域&#xff0c;越来越多的碰到标签方式通讯的设备&#xff0c;常用有CIP(基于EtherNet/IP) 的协议、OPCUA协议等&#xff0c;CIP协议主要是罗克韦尔/AB的PLC、欧姆龙NX/NJ系列的PLC等&#xff0c;OPCUA协议常见于工业机器人、智能焊接设备等。在不具备标签协议接…

C语言 ——深入理解指针(2)

目录 1. 数组名的理解2. 二级指针3. 指针数组4. 字符指针变量5. 数组指针变量6. 函数指针变量7. 函数指针数组 1. 数组名的理解 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址&#x…

普华-PowerPMS APPGetUser SQL注入致RCE漏洞复现

0x01 产品简介 PowerPMS是上海普华科技自主研发的移动端工程项目管理产品。支持中英文切换,可与普华PowerOn、PowerPiP系列产品配套使用。产品与工程项目为核心,为项目各参建方提供包括任务管理、文档管理、质量检查、安全检查、施工日志、进度反馈、即时消息等功能在内的服…