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

news2024/11/23 16:00:04

演示视频

设计内容
(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()
{
    // 初始化DS1302
    Ds1302Init();
    
    // 初始化LCD12864
    LCDInit();

    // 初始化按键
    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.coloradmin.cn/o/1983766.html

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

相关文章

淘宝小程序踩坑记录

最近搞了一套淘宝小程序配合淘宝店铺直接跳转&#xff0c;类似于扭蛋机那种机制&#xff0c;真是一路坎坷&#xff0c;一步一个坑&#xff0c;这里记录一下&#xff08;前端&#xff09;&#xff1b;淘宝小程序文当中心 编译相关 用uni-app没有淘宝小程序独有的编译环境&…

EdgeWorkers 最佳实践丨助力流媒体创新

近日亚太区 Akamai EdgeWorkers 首届编程挑战赛圆满落幕。参赛团队充分利用 Akamai 的智能边缘平台&#xff0c;探索无服务器计算的应用潜力。爱奇艺等获胜团队凭借 Akamai EdgeWorkers 和 EdgeKV 产品开发功能&#xff0c;将 DNS 解析时间降低 40% 。 一、云上竞逐&#xff0…

21LTR-Scene打靶渗透【附POC】(权限提升)

靶机下载地址&#xff1a;21LTR: Scene 1 ~ VulnHub21LTR: Scene 1, made by JayMaster2000. Download & walkthrough links are available.https://www.vulnhub.com/entry/21ltr-scene-1,3/ 1. 主机发现端口扫描目录扫描【192.168.2.120】 1.1. 主机发现 nmap -sn 192.…

牛客周赛 Round 54 (A~E)

#牛客周赛 Round 54 &#xff08;A~E&#xff09; 前言&#xff1a; 以后会定时更新很多比赛的题解 希望借此让自己坚持赛后补题 要不然写完就结束 自己水平没有一点提高 本人很菜所以不会更新 太难的题 加油&#xff01;&#xff01;&#xff01;1. ​清楚姐姐的糖葫芦…

落笔成画!Krita+ComfyUI解锁AI实时绘图

原文链接&#xff1a;落笔成画&#xff01;KritaComfyUI解锁AI实时绘图 (chinaz.com) 安装前提&#xff1a;电脑本地已经安装过ComfyUI且能正常运行 首先我们到Krita的官网下载Krita&#xff0c;我们直接下载最新的安装就可以了&#xff0c;安装过程非常简单&#xff0c;选择…

SQL注入之sqli-labs靶场第一关

手工注入less-1 1.找注入点 通过 ?id1 and 12--没有发现变化&#xff0c;尝试闭合发现注入点 字符型注入&#xff0c;单引号闭合 2.猜解字段数量 发现字段数量为3 3.通过union联合查询判断回显点 发现回显点2&#xff0c;3&#xff0c; 4&#xff0c;进行信息收集 数据库…

在PyCharm社区版中切换中文界面的操作方法

在PyCharm社区版中切换中文界面&#xff0c;可以按照以下步骤操作&#xff1a; 打开PyCharm社区版&#xff0c;点击顶部菜单栏的 "File"&#xff08;文件&#xff09;。在下拉菜单中选择 "Settings"&#xff08;设置&#xff09;&#xff0c;或者使用快捷…

SSM整合快速学习

目录 步骤&#xff1a; 一、环境搭建 1.创建JdbcConfig配置类 2.创建JdbcConfig配置类 3.创建MybatisConfig配置类 4.创建jdbc.properties 5.创建SpringMVC配置类 6.创建Web项目入口配置类 二、功能模块开发 步骤1:创建数据库及表 步骤2:编写模型类 步骤3:编写Dao接…

Unlikely argument type for equals(): int seems to be unrelated to Long

代码审查不规范&#xff1a; Unlikely argument type for equals(): int seems to be unrelated to Long check package code_check;public class Obj {public Obj(){}private Long mail;public Long getMail(){return mail;}public void setMail(Long mail){this.mail mail;…

【OpenCV C++20 学习笔记】提取图片中的水平和垂直对象

提取图片中的水平和垂直对象 原理实操——去除五线谱的五线二进制化提取垂直对象完善边缘和最终输出图片黑白反转平滑 完整代码 其他图片元素提取实践提取水平线条提取音符轮廓 原理 在腐蚀和膨胀操作中&#xff0c;通过卷积核(kernel)&#xff0c;或者结构元素(structuring e…

在优化微信、支付宝小程序用户体验时有哪些关键指标

在优化小程序用户体验时&#xff0c;有几个关键指标需要特别关注&#xff0c;这些指标不仅能够帮助评估当前的用户体验状况&#xff0c;还能为后续的优化工作提供明确的方向。以下是一些关键指标及其解释&#xff1a; 1. 日活跃用户&#xff08;DAU&#xff09; 是指每天使用…

搭建Mybatis,实现数据库增删改

在pom.xml文件中粘贴下列&#xff0c;加载maven依赖 <?xmlversion"1.0"encoding"UTF-8"?> <projectxmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&…

2024年武汉东湖高新区职称第二批次开始了

众所周知&#xff0c;武汉市东湖高新区职称一年两批次&#xff0c;今年下半年第二批水平能力测试报名也已经开始了&#xff0c;请注意报名时间&#xff0c;别错过&#xff01;&#xff01; 2024年武汉东湖高新区第二批次水测报名时间&#xff1a;&#xff08;一&#xff09;网上…

letcode 分类练习 哈希表 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

letcode 分类练习 哈希表 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和 242.有效的字母异位词 分别定义两个字母哈希表就可以了 class Solution { public:bool isAnagram(string s, strin…

sql注入-常见注入方法复现

环境演示均已sql-labs为例 1、报错注入 1.1常用的报错注入的函数 掌握好extractvalue、updatexml、floor报错&#xff0c;floor报错较难需要多理解&#xff0c;updatexml较为常用 定义 报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。是一种页面响应形式…

MySQL练习题(五)

环境搭建&#xff08;MySQL:8.0.25&#xff09;: CREATE TABLE DEPT (DEPTNO int PRIMARY KEY,##部门编号DNAME VARCHAR(14), ##部门名称LOC VARCHAR(13) ##部门地址 ); INSERT INTO DEPT VALUES (10, ACCOUNTING, NEW YORK); INSERT INTO DEPT VALUES (20, RESEAR…

sqllab靶场练习第1~15关

1、第一关 代码解析 if(isset($_GET[id]))//判断获取的id字段是否为空 { $id$_GET[id]; //logging the connection parameters to a file for analysis. $fpfopen(result.txt,a);//打开这个文件&#xff0c;记录操作的日志 fwrite($fp,ID:.$id."\n"); fclose($fp);…

Java、PHP、Node 操作 MySQL 数据库常用方法

一、Java 操作 MySQL 数据库 1、Java 连接 MySQL 数据库 1. 使用 JDBC 驱动程序连接 使用这种方式&#xff0c;首先需要导入 MySQL 的 JDBC 驱动程序依赖&#xff0c;然后通过 Class.forName() 方法加载驱动程序类。其创建连接的过程相对直接&#xff0c;只需提供准确的数据库…

我不喜欢蔚来的原因

商业逻辑 蔚来主打的是换电和服务。 先说服务&#xff0c;这种极其依赖人工&#xff0c;打造极致尊贵感的服务&#xff0c;是完全无法随着销售规模扩大而降低成本的&#xff0c;相反&#xff0c;如果要保持相同水准的服务&#xff0c;可能会导致成本随着规模扩大而增高&#x…

桥田动态|盛夏官宣 · 桥田全新品牌形象正式发布

VISUAL IDENTITY 2024品牌革新 桥田智能品牌VI系统升级发布 Hi 各位伙伴们&#xff0c;很高兴的告知大家&#xff0c;我们的品牌形象VI和官方网站全面升级。全新的LOGO设计和官方网站将为您带来更为直观和互动的体验。 1 品牌标识 Brand identity 全新LOGO&#xff0c;彰显…