2024新年快乐

前言

2023年马上就要过去,希望2024年会越来越好,根据自己学的内容来实现一些我的idea。

单片机

思路

最开始的构思是这样的,“2024”用数码管来输出然后中文的“新年快乐”用点阵来实现,但是点阵是动态的截图不好看,就想干脆用LCD1602输出英文的新年快乐算了,这样就只需要一个AT89C51就行了,还剩下五根引脚,想起来过年我印象中听过最多的歌是“好运来”就想增加一个蜂鸣器来播放好运来歌曲,大致的构思出的原理图如下,实验所需器件在代码后面。

3b046931d58a4e96bb4c4270e571139d.png

 2024

首先是对2024的输出,这个就是输出他的BCD码。这个网络标号最开始就是C0在上面,输出的时候发现不对,然后就反过来标记,算是蒙对的。

#include<reg51.h>void main(void){while(1){//2024 0010 0000 0010 0100P1=0x20;P3=0x24;}
}

7fc401bec8ca423bb6a96788a6772d5c.png

Happy New Year 

用LCD 1602输出我们没必要重新书写代码,只需要修改之后的代码即可。顺便对输出“2024”部分封装成函数。字符型液晶显示器LCD 1602的显示控制(Keil+Proteus)_1602液晶显示电路在keli中名称-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134224776

#include<reg51.h>
#include<intrins.h>	//包含_nop_()空函数指令的头文件
#define uchar unsigned char 
#define uint unsigned int
#define out P0
sbit RS=P2^0;//位变量
sbit RW=P2^1;//位变量
sbit E=P2^2;//位变量
//函数声明部分
void lcd_initial(void);//LCD初始化函数
void check_busy(void);//检查忙标志位函数
void write_command(uchar com);//写命令函数
void write_data(uchar dat);//写数据函数
void string(uchar ad,uchar *s);//显示字符串
void delay(uint);//延时
void print_LED();//输出“2024”的数码管void main(void){lcd_initial();//对LCD初始化while(1){print_LED();string(0x81,"Happy New Year");//显示第一行的字符string(0xC1,"peace happiness");//显示第二行的字符delay(100);//延时write_command(0x01);//清屏delay(100);//延时}
}//延时
void delay(uint j){uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}//检查忙标志
void check_busy(void){uchar dt;do{dt=0xff;//dt为变量单元,初值为0xff//RS=0,E=1时才可以读忙标志位E=0;RS=0;RW=1;E=1;dt=out;//out为P0口,P0口的状态送入dt中}while(dt&0x80);//如果忙标志位BF=1,继续循环检测,等待BF=0E=0;//BF=0,LCD 1602不忙,结束检测
}//写命令
void write_command(uchar com){check_busy();//按规定RS和E同时为0时,才可以写命令E=0;RS=0;RW=0;out=com;//将命令com写入P0口E=1;//写命令时,E应为正脉冲,即正跳变,所以前面先置E=0_nop_();//空操作1个机器周期,等待硬件反应E=0;//E由高电平变为低电平,LCD 1602开始执行命令delay(1);//延时,等待硬件反应
}//写数据
void write_data(uchar dat){check_busy();//检测忙标志位BF=1则等待,若BF=0,则可对LCD 1602写入命令E=0;//按规定写数据时,E应为正脉冲,所以先置E=0//按规定RS=1和RW=0时,才可以写入数据RS=1;RW=0;out=dat;//将数据”dat“从P0口输出,即写入LCD 1602E=1;//E产生正跳变_nop_();//空操作1个机器周期,等待硬件反应E=0;//E由高电平变为低电平,写数据操作结束delay(1);
}//液晶显示器初始化函数
void lcd_initial(void){write_command(0x38);//8位两行显示,5*7点阵字符_nop_();//空操作1个机器周期,等待硬件反应write_command(0x0C);//开整体显示,光标关,无闪烁_nop_();//空操作1个机器周期,等待硬件反应//write_command(0x05);//光标右移_nop_();//空操作1个机器周期,等待硬件反应write_command(0x01);//清屏delay(1);
}
//输出显示字符串
void string(uchar ad,uchar *s){write_command(ad);while(*s>0){write_data(*s++);//输出字符串,且指针增1delay(100);}
}void print_LED(){//输出“2024”的数码管//2024 0010 0000 0010 0100P1=0x20;P3=0x24;
}

116ae46585cf41c8ad177c7fd68b2196.png

 好运来

先找到“好运来”的音乐简谱,然后带入之前的代码中。

e49385ca9d264f47ae832dc45c3ea91d.png

2ebf477100524be49a0140e910cdae88.png

单片机实验(三)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134624276

#include<reg51.h>
#include<intrins.h>	//包含_nop_()空函数指令的头文件
#define uchar unsigned char 
#define uint unsigned int
#define out P0#define L1  1
#define L1_ 2
#define L2  3
#define L2_ 4
#define L3  5
#define L4  6
#define L4_ 7
#define L5  8
#define L5_ 9
#define L6  10
#define L6_ 11
#define L7  12
#define M1  13
#define M1_ 14
#define M2  15
#define M2_ 16
#define M3  17
#define M4  18
#define M4_ 19
#define M5  20
#define M5_ 21
#define M6  22
#define M6_ 23
#define M7  24
#define H1  25
#define H1_ 26
#define H2  27
#define H2_ 28
#define H3  29
#define H4  30
#define H4_ 31
#define H5  32
#define H5_ 33
#define H6  34
#define H6_ 35
#define H7  36#define ClockSpeed 12000000 //时钟频率,Hz
#define SongSpeed 240       //ms,八分音符
sbit beepIO = P2^7;         //定义蜂鸣器IO口uchar freq_select;//音阶频率表
unsigned int code freq_table[]={0,61714 ,61928 ,62131 ,62322 ,62502 ,62673 ,62833 ,62985 ,63128 ,63263 ,63391 ,63511, //低音63628 ,63731 ,63835 ,63928 ,64021 ,64103 ,64185 ,64260 ,64331 ,64400 ,64463 ,64524, //中音64580 ,64633 ,64684 ,64732 ,64777 ,64820 ,64860 ,64898 ,64934 ,64968 ,65000 ,65030 //高音};				//好运来
uchar code song[]={//叠个千纸鹤 再系个红腰带M6,3, M6,1, H1,1, H1,1, M6,3, M6,1, M5,1, M3,1, M5,1, H1,1, M6,2, 0,2,//愿善良的人们 天天好运来.你M6,1, H1,1, H1,1, H1,1, H1,2, M5,2, M6,1, M5,1, M2,1, M5,1, M3,3, M2,1,//勤劳生活美,你健康春常在M3,1, M2,1, M1,1, M3,1, M2,3, M3,1, M6,1, M5,1, M3,1, M6,1, M6,1, M5,3, //你一生的忙碌为了笑逐颜开。M6,1, H1,1, H1,3, M6,1, H2,1, H2,1, H2,1, H1,1, M6,2, M5,1, H1,1, M6,4, M6,3, //好运来,祝你好运来,好运M6,2, H3,3, H2,1, H2,2, H1,1, M6,1, M5,2, H1,2, M6,4, M6,2, H2,2, //带来了喜和爱。好运H1,2, M6,1, M5,1, M2,2, M5,1, M6,1, M5,1, M3,3, M3,2, M6,3, M5,1, //来,我们好运来,迎着好运来M6,2, M6,1, M5,1, M6,2, H2,3, H1,1, H2,4, H1,3, H1,1, H1,1, H2,1,//兴旺发达通四海。H3,1, H3,1, H2,1, H1,1, M5,2, H1,3, M6,1, M6,2, 40
};
sbit RS=P2^0;//位变量
sbit RW=P2^1;//位变量
sbit E=P2^2;//位变量
//函数声明部分
void lcd_initial(void);//LCD初始化函数
void check_busy(void);//检查忙标志位函数
void write_command(uchar com);//写命令函数
void write_data(uchar dat);//写数据函数
void string(uchar ad,uchar *s);//显示字符串
void delay(uint);//延时
void print_2024();//输出“2024”的数码管
void print_HappyNewYear();//输出“新年快乐”的LCD 1602
void timer0_initial();//初始化定时器0的状态
void delay_ms(unsigned int x); //音乐延时函数void main(void){uchar select;timer0_initial();//对定时器T0进行初始化lcd_initial();//对LCD初始化print_2024();print_HappyNewYear();while(song[select]!= 40)        //判断歌曲是否结束{freq_select=song[select];		if(freq_select)         //判断是否是休止符0{select++;delay_ms(song[select]*SongSpeed);TR0 = 0;   //关闭蜂鸣器一段时间再打开,模拟按键抬手动作。delay_ms(10);TR0 = 1;select++;}else{			TR0 = 0;select++;delay_ms(song[select]*SongSpeed);TR0 = 1;select++;}}
}//延时
void delay(uint j){uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}//检查忙标志
void check_busy(void){uchar dt;do{dt=0xff;//dt为变量单元,初值为0xff//RS=0,E=1时才可以读忙标志位E=0;RS=0;RW=1;E=1;dt=out;//out为P0口,P0口的状态送入dt中}while(dt&0x80);//如果忙标志位BF=1,继续循环检测,等待BF=0E=0;//BF=0,LCD 1602不忙,结束检测
}//写命令
void write_command(uchar com){check_busy();//按规定RS和E同时为0时,才可以写命令E=0;RS=0;RW=0;out=com;//将命令com写入P0口E=1;//写命令时,E应为正脉冲,即正跳变,所以前面先置E=0_nop_();//空操作1个机器周期,等待硬件反应E=0;//E由高电平变为低电平,LCD 1602开始执行命令delay(1);//延时,等待硬件反应
}//写数据
void write_data(uchar dat){check_busy();//检测忙标志位BF=1则等待,若BF=0,则可对LCD 1602写入命令E=0;//按规定写数据时,E应为正脉冲,所以先置E=0//按规定RS=1和RW=0时,才可以写入数据RS=1;RW=0;out=dat;//将数据”dat“从P0口输出,即写入LCD 1602E=1;//E产生正跳变_nop_();//空操作1个机器周期,等待硬件反应E=0;//E由高电平变为低电平,写数据操作结束delay(1);
}//液晶显示器初始化函数
void lcd_initial(void){write_command(0x38);//8位两行显示,5*7点阵字符_nop_();//空操作1个机器周期,等待硬件反应write_command(0x0C);//开整体显示,光标关,无闪烁_nop_();//空操作1个机器周期,等待硬件反应//write_command(0x05);//光标右移_nop_();//空操作1个机器周期,等待硬件反应write_command(0x01);//清屏delay(1);
}
//输出显示字符串
void string(uchar ad,uchar *s){write_command(ad);while(*s>0){write_data(*s++);//输出字符串,且指针增1delay(100);}
}void print_2024(){//输出“2024”的数码管//2024 0010 0000 0010 0100P1=0x20;P3=0x24;
}void print_HappyNewYear(){//输出“新年快乐”的LCD 1602string(0x81,"Happy New Year");//显示第一行的字符string(0xC1,"peace happiness");//显示第二行的字符delay(50);//延时//write_command(0x01);//清屏
}void timer0_initial()//初始化定时器0的状态
{beepIO = 0;TH0   = 0xFD;	TL0   = 0x09;TMOD  = 0x01;  //选择定时器0,工作方式1ET0   = 1;     //允许定时器0中断EA    = 1;     //CPU开放中断TF0   = 0;     //溢出标志位清0TR0   = 1;     //开启定时器0
}void BeepTimer0() interrupt 1	//中断函数
{beepIO = !beepIO;   //蜂鸣器IO口高低电平转换TH0 = freq_table[freq_select]/256 ;TL0 = freq_table[freq_select]%256 ;
}void delay_ms(unsigned int x) //音乐延时函数
{uchar t;while(x--) for(t=0;t<120;t++);
}

110b3041fea14a8cad7c689c5c52a302.png

本来觉得影响不大的,但是忽略了音乐的播放是需要延迟来表示每一个音的节拍,所以就把lcd清屏取消了,让他就一直显示这个,目前的话就是一轮之后会重新从主函数开始,而且LCD输出的时候他会发出其他的声音。

所以又继续完善了一下

 代码

#include<reg51.h>
#include<intrins.h>	//包含_nop_()空函数指令的头文件
#define uchar unsigned char 
#define uint unsigned int
#define out P0#define L1  1
#define L1_ 2
#define L2  3
#define L2_ 4
#define L3  5
#define L4  6
#define L4_ 7
#define L5  8
#define L5_ 9
#define L6  10
#define L6_ 11
#define L7  12
#define M1  13
#define M1_ 14
#define M2  15
#define M2_ 16
#define M3  17
#define M4  18
#define M4_ 19
#define M5  20
#define M5_ 21
#define M6  22
#define M6_ 23
#define M7  24
#define H1  25
#define H1_ 26
#define H2  27
#define H2_ 28
#define H3  29
#define H4  30
#define H4_ 31
#define H5  32
#define H5_ 33
#define H6  34
#define H6_ 35
#define H7  36#define ClockSpeed 12000000 //时钟频率,Hz
#define SongSpeed 240       //ms,八分音符
sbit beepIO = P2^7;         //定义蜂鸣器IO口uchar freq_select;//音阶频率表
unsigned int code freq_table[]={0,61714 ,61928 ,62131 ,62322 ,62502 ,62673 ,62833 ,62985 ,63128 ,63263 ,63391 ,63511, //低音63628 ,63731 ,63835 ,63928 ,64021 ,64103 ,64185 ,64260 ,64331 ,64400 ,64463 ,64524, //中音64580 ,64633 ,64684 ,64732 ,64777 ,64820 ,64860 ,64898 ,64934 ,64968 ,65000 ,65030 //高音};				//好运来
uchar code song[]={//叠个千纸鹤 再系个红腰带M6,3, M6,1, H1,1, H1,1, M6,3, M6,1, M5,1, M3,1, M5,1, H1,1, M6,2, 0,2,//愿善良的人们 天天好运来.你M6,1, H1,1, H1,1, H1,1, H1,2, M5,2, M6,1, M5,1, M2,1, M5,1, M3,3, M2,1,//勤劳生活美,你健康春常在M3,1, M2,1, M1,1, M3,1, M2,3, M3,1, M6,1, M5,1, M3,1, M6,1, M6,1, M5,3, //你一生的忙碌为了笑逐颜开。M6,1, H1,1, H1,3, M6,1, H2,1, H2,1, H2,1, H1,1, M6,2, M5,1, H1,1, M6,4, M6,3, //好运来,祝你好运来,好运M6,2, H3,3, H2,1, H2,2, H1,1, M6,1, M5,2, H1,2, M6,4, M6,2, H2,2, //带来了喜和爱。好运H1,2, M6,1, M5,1, M2,2, M5,1, M6,1, M5,1, M3,3, M3,2, M6,3, M5,1, //来,我们好运来,迎着好运来M6,2, M6,1, M5,1, M6,2, H2,3, H1,1, H2,4, H1,3, H1,1, H1,1, H2,1,//兴旺发达通四海。H3,1, H3,1, H2,1, H1,1, M5,2, H1,3, M6,1, M6,2, 40
};
sbit RS=P2^0;//位变量
sbit RW=P2^1;//位变量
sbit E=P2^2;//位变量
//函数声明部分
void lcd_initial(void);//LCD初始化函数
void check_busy(void);//检查忙标志位函数
void write_command(uchar com);//写命令函数
void write_data(uchar dat);//写数据函数
void string(uchar ad,uchar *s);//显示字符串
void delay(uint);//延时
void timer0_initial();//初始化定时器0的状态
void delay_ms(unsigned int x); //音乐延时函数
void print_2024();//输出“2024”的数码管
void print_HappyNewYear();//输出“新年快乐”的LCD 1602void main(void){print_2024();//输出“2024”的数码管print_HappyNewYear();//输出“新年快乐”的LCD 1602//其他的都静态输出即可while(1){uchar select=0;//每次重新初始化timer0_initial();//对定时器T0进行初始化while(song[select]!= 40)        //判断歌曲是否结束{freq_select=song[select];		if(freq_select)         //判断是否是休止符0{select++;delay_ms(song[select]*SongSpeed);TR0 = 0;   //关闭蜂鸣器一段时间再打开,模拟按键抬手动作。delay_ms(10);TR0 = 1;select++;}else{			TR0 = 0;select++;delay_ms(song[select]*SongSpeed);TR0 = 1;select++;}}}
}//延时
void delay(uint j){uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}//检查忙标志
void check_busy(void){uchar dt;do{dt=0xff;//dt为变量单元,初值为0xff//RS=0,E=1时才可以读忙标志位E=0;RS=0;RW=1;E=1;dt=out;//out为P0口,P0口的状态送入dt中}while(dt&0x80);//如果忙标志位BF=1,继续循环检测,等待BF=0E=0;//BF=0,LCD 1602不忙,结束检测
}//写命令
void write_command(uchar com){check_busy();//按规定RS和E同时为0时,才可以写命令E=0;RS=0;RW=0;out=com;//将命令com写入P0口E=1;//写命令时,E应为正脉冲,即正跳变,所以前面先置E=0_nop_();//空操作1个机器周期,等待硬件反应E=0;//E由高电平变为低电平,LCD 1602开始执行命令delay(1);//延时,等待硬件反应
}//写数据
void write_data(uchar dat){check_busy();//检测忙标志位BF=1则等待,若BF=0,则可对LCD 1602写入命令E=0;//按规定写数据时,E应为正脉冲,所以先置E=0//按规定RS=1和RW=0时,才可以写入数据RS=1;RW=0;out=dat;//将数据”dat“从P0口输出,即写入LCD 1602E=1;//E产生正跳变_nop_();//空操作1个机器周期,等待硬件反应E=0;//E由高电平变为低电平,写数据操作结束delay(1);
}//液晶显示器初始化函数
void lcd_initial(void){write_command(0x38);//8位两行显示,5*7点阵字符_nop_();//空操作1个机器周期,等待硬件反应write_command(0x0C);//开整体显示,光标关,无闪烁_nop_();//空操作1个机器周期,等待硬件反应//write_command(0x05);//光标右移_nop_();//空操作1个机器周期,等待硬件反应write_command(0x01);//清屏delay(1);
}
//输出显示字符串
void string(uchar ad,uchar *s){write_command(ad);while(*s>0){write_data(*s++);//输出字符串,且指针增1delay(100);}
}void timer0_initial()//初始化定时器0的状态
{beepIO = 0;TH0   = 0xFD;	TL0   = 0x09;TMOD  = 0x01;  //选择定时器0,工作方式1ET0   = 1;     //允许定时器0中断EA    = 1;     //CPU开放中断TF0   = 0;     //溢出标志位清0TR0   = 1;     //开启定时器0
}void BeepTimer0() interrupt 1	//中断函数
{beepIO = !beepIO;   //蜂鸣器IO口高低电平转换TH0 = freq_table[freq_select]/256 ;TL0 = freq_table[freq_select]%256 ;
}void delay_ms(unsigned int x) //音乐延时函数
{uchar t;while(x--) for(t=0;t<120;t++);
}void print_2024(){//输出“2024”的数码管//2024 0010 0000 0010 0100P1=0x20;P3=0x24;
}void print_HappyNewYear(){//输出“新年快乐”的LCD 1602lcd_initial();//对LCD初始化string(0x81,"Happy New Year");//显示第一行的字符string(0xC1,"peace happiness");//显示第二行的字符delay(50);//延时//write_command(0x01);//清屏
}

51bd47c705cb4dce857f9a386eb720f5.png

器件名称Proteus关键字
红色共阴极数码管7SEG-BCD
蓝色共阴极数码管7SEG-BCD-BLUE
绿色共阴极数码管7SEG-BCD-GRN
51单片机AT89C51
复位按钮BUTTON
电容CAP
电解电容CAP-ELEC
晶体振荡器CRYSTAL
字符型LCD 1602显示器LM016L
滑动变阻器POT-HG
电阻RES
排阻RESPACK-8
蜂鸣器SPEAKER

好运来

C/C++ 

在B站上面看到了一个视频,打算就是实现这个烟花效果,当然光靠命令行是实现不了的。

【C语言开发】教你用代码写一个浪漫烟花特效!七夕最美的浪漫烟花代码,快写给她看一看吧!_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV16N4y1d7K6/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=7c3bfbf39d037fe80c97234396acc524

文字输出

首先需要用到EasyX库,我用的编译器是Dev-C++

EasyX Graphics Library for C++icon-default.png?t=N7T8https://easyx.cn/15天学会EasyX 第1天:EasyX的下载与配置安装_easyx下载-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/LCR2025/article/details/131019284

 

 

 

 

链接“-leasyx -lgdi32 -lole32”

#include<stdio.h>
#include<easyx.h>//图形界面库int main(){initgraph(1200,800);//创建窗口 宽1200 高度800settextcolor(YELLOW);//设置字体的颜色settextstyle(25,0,"楷体");//设置字体的风格 字号  outtextxy(300,300,"2024新年之际,祝福你健康、快乐、平安、幸福");outtextxy(300,350,"愿你每天都笑容满面");outtextxy(300,400,"所求皆如愿,所行皆坦途,多喜乐,长安宁");outtextxy(300,450,"平安喜乐,万事胜意");outtextxy(300,500,"期末考试顺利");outtextxy(600,550,"——封奚泽优"); getchar();//按回车键继续 while(1);return 0;
}

 

 播放音乐

dev c++播放音乐MP3(win环境)亲测有效_怎么在devc++里面用#pragma comment (lib,“winmm.lib”)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_47170063/article/details/110310633解决用mciSendString()函数不能播放音乐的问题_mcisendstring播放不出音乐-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_46436640/article/details/106591562

链接“-lwinmm”

直接放弃这个环节了,我的一直播放不了,目前不知道是什么情况,看到有的说是不能用网易云下载的音乐要用QQ音乐下载的,也有用TEXT又不用TEXT的我这里都播放不了,直接进入下一个部分了。

有知道的大佬可以帮我分析分析

烟花

//烟花弹
struct yhd{//属性int x,y;//当前坐标 int hx,hy;//最高点的坐标 unsigned long t1,t2,dt;//时间来控制速度 IMAGE img;//保存烟花弹的图片 bool isshoot;//烟花是否属于正在上升的状态 
}yhd;

加载图片

 这个也一直输出不了,重新安装了一下编译器,出现了一个错误,一个是中文注释不现实,一个是输出中文乱码。

解决Dev-C++中文注释无法显示,单击才能显示的问题_devc中文注释无法显示-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_46251611/article/details/123352345

DEVC++运行中文乱码的解决方法 - 哔哩哔哩 (bilibili.com)icon-default.png?t=N7T8https://www.bilibili.com/read/cv26335420/

打算换一个编译器尝试一下,暂时先这样。

#include<stdio.h>
#include<easyx.h>//图形界面库
#include<stdlib.h>
#include<time.h>
#define _CRT_SECURE_NO_WARNINGS  
#include<windows.h>
#pragma comment(lib,"winmm.lib")//媒体库文件 
#include <mmsystem.h>//媒体头文件 //烟花弹
struct yhd{//属性int x,y;//当前坐标 int hx,hy;//最高点的坐标 unsigned long t1,t2,dt;//时间来控制速度 IMAGE img;//保存烟花弹的图片 bool isshoot;//烟花是否属于正在上升的状态 
}yhd;int main(){srand((unsigned)time(NULL));//选取种子文件 initgraph(1200,800);//创建窗口 宽1200 高度800//打开音乐文件 mciSendString(TEXT("open music.mp3 alias song"),NULL,0,NULL);//mci 媒体控制接口 mciSendString(TEXT("play song repeat"),NULL,0,NULL);//mci 媒体控制接口 settextcolor(YELLOW);//设置字体的颜色settextstyle(25,0,"楷体");//设置字体的风格 字号  outtextxy(300,300,"2024新年之际,祝福你健康、快乐、平安、幸福");outtextxy(300,350,"愿你每天都笑容满面");outtextxy(300,400,"所求皆如愿,所行皆坦途,多喜乐,长安宁");outtextxy(300,450,"平安喜乐,万事胜意");outtextxy(300,500,"期末考试顺利");outtextxy(600,550,"——封奚泽优"); //getchar();//按回车键继续 //初始化烟花弹(烟花弹需要上升,y坐标变化,x不变) yhd.x=rand()%(1200-20);yhd.y=750;//最开始烟花弹的位置 yhd.hx=yhd.x;yhd.hy=rand()%400;//爆炸高度 yhd.t1=GetTickCount();//获取当前系统的时间yhd.dt=10;//dt 10ms yhd.isshoot=true;//最开始是上升状态loadimage(&yhd.img,"yhd.png",20,50);//加载图片putimage(yhd.x,yhd.y,&yhd.img,SRCINVERT);while(1);return 0;
}

大侠请重新来过

输出文字

 下载了Visual Studio 2022,先粘贴之前的代码,发现没有easyx图形库

我们重新安装一下
Visual Studio 2022手动安装EasyX_easyx下手动载-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zeandon/article/details/130771808 

 然后就链接成功了,接着就是显示

解决VS字符集的问题,对初学者特重要_vs的项目属性里配置属性常规里面 没有字符集这个选项-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/shi_xiaobin/article/details/122389721

 播放音乐

只是播放音乐看到后面。

VS中如何导入并且播放音乐_vs2022装bgm-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_43701019/article/details/100027495 

 然后终于有声音了,结果是因为换了一首歌,都是mp3格式的,但是有的就是不行,很奇怪,避免在网易云上面下载

我这里用的是相对路径

#include<stdio.h>
#include<easyx.h>//图形界面库
#include<stdlib.h>
#include<time.h>
#define _CRT_SECURE_NO_WARNINGS  
#include<windows.h>
#pragma comment(lib,"winmm.lib")//媒体库文件 
#include <mmsystem.h>//媒体头文件 //烟花弹
struct yhd {//属性int x, y;//当前坐标 int hx, hy;//最高点的坐标 unsigned long t1, t2, dt;//时间来控制速度 IMAGE img;//保存烟花弹的图片 bool isshoot;//烟花是否属于正在上升的状态 
}yhd;int main() {srand((unsigned)time(NULL));//选取种子文件 initgraph(1200, 800);//创建窗口 宽1200 高度800//打开音乐文件 mciSendString(L"open music.mp3 alias bgm", 0, 0, 0);//mci 媒体控制接口 mciSendString(L"play bgm repeat", 0, 0, 0);//mci 媒体控制接口 settextcolor(YELLOW);//设置字体的颜色settextstyle(25, 0, _T("楷体"));//设置字体的风格 字号  outtextxy(300, 300, _T("2024新年之际,祝福你健康、快乐、平安、幸福"));outtextxy(300, 350, _T("愿你每天都笑容满面"));outtextxy(300, 400, _T("所求皆如愿,所行皆坦途,多喜乐,长安宁"));outtextxy(300, 450, _T("平安喜乐,万事胜意"));outtextxy(300, 500, _T("期末考试顺利"));outtextxy(600, 550, _T("——封奚泽优"));while (1);//防止直接退出程序return 0;
}

音乐

 果然就是音乐本身的问题,带回原来的Dev-C++还是可以运行。

烟花

加载图片

//烟花弹
struct yhd {//属性int x, y;//当前坐标 int hx, hy;//最高点的坐标 unsigned long t1, t2, dt;//时间来控制速度 IMAGE img;//保存烟花弹的图片 bool isshoot;//烟花是否属于正在上升的状态 
}yhd;//初始化烟花弹(烟花弹需要上升,y坐标变化,x不变) 
yhd.x = rand() % (1200 - 20);
yhd.y = 750;//最开始烟花弹的位置 
yhd.hx = yhd.x;
yhd.hy = rand() % 400;//爆炸高度 
yhd.t1 = GetTickCount();//获取当前系统的时间
yhd.dt = 10;//dt 10ms 
yhd.isshoot = true;//最开始是上升状态
loadimage(&yhd.img, _T("yhd.jpg"), 20, 50);//加载图片
putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);

烟花上升

//获取当前时间
yhd.t2 = GetTickCount();//t2
//速度 处于发射状态
if (yhd.t2 - yhd.t1 > yhd.dt && yhd.isshoot == true) {//会覆盖之前的putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);if (yhd.y > yhd.hy) {//有一个上界yhd.y -= 5;//上升}putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);if(yhd.y<=yhd.hy){//已经到达最高点//1.擦除烟花弹putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);//停止上升yhd.isshoot = false;}if (yhd.isshoot == false) {//初始化烟花弹(烟花弹需要上升,y坐标变化,x不变) yhd.x = rand() % (1200 - 20);yhd.y = 750;//最开始烟花弹的位置 yhd.hx = yhd.x;yhd.hy = rand() % 400;//爆炸高度 yhd.t1 = GetTickCount();//获取当前系统的时间yhd.dt = 10;//dt 10ms yhd.isshoot = true;//最开始是上升状态loadimage(&yhd.img, _T("yhd.jpg"), 20, 50);//加载图片putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);}yhd.t1 = yhd.t2;
}

中间还发现命令行界面总是需要单独关闭,弄的太烦了,然后就用了下面的方法来关闭。

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

 烟花

视频中的代码不完整,简直了。

定义烟花类

//烟花
struct yh{int r;//当前半径int maxr;//最大半径int x, y;//中心点的坐标(窗口)int cx, cy;//中心点的坐标(图片)int xy[240][240];//图片的宽高,保存图片中的每一个像素点bool isboom;//是否开始爆炸(图片的显示)bool isdraw;//是否开始显示(用户看到的)unsigned long t1, t2, dt;//爆炸的速度
} yh;

 初始化烟花

yh.r=0;//当前半径
yh.maxr = 120;//最大半径
yh.cx = 120;
yh.cy = 120;//中心点的坐标(图片)
yh.xy[240][240];//图片的宽高,保存图片中的每一个像素点
yh.isboom=false;//是否开始爆炸(图片的显示)
yh.isdraw=false;//是否开始显示(用户看到的)
yh.t1 = GetTickCount();
yh.dt = 5;//爆炸的速度5ms
IMAGE yhimg;
loadimage(&yhimg, _T("yh.jpg"), 240, 240);//加载图片SetWorkingImage(&yhimg);//指定待获取的图片(默认是从窗口获取)
//获取图片的像素点放到数组当中
for (int a = 0; a < 240; a++) {for (int b = 0; b < 240; b++) {yh.xy[a][b]=getpixel(a, b);}
}
SetWorkingImage();//将烟花图片释放

 烟花的绽放

//dt的数组
int drt[] = { 5,5,5,15,15,15,25,25,25,55,60,65 };//烟花绽放的速度越来越慢ms
yh.t2 = GetTickCount();
//烟花已经爆炸
if (yh.t2 - yh.t1 > yh.dt && yh.isboom == true) {if (yh.r < yh.maxr) {yh.r++;//半径不断变大,但是不能超过最大的范围yh.dt = drt[yh.r / 10];//dt不断变大yh.isdraw = true;//开始绘制}//爆炸结束(重置)if (yh.r >= yh.maxr - 1) {//停止绘制,停止爆炸yh.isdraw = false;yh.isboom = false;yh.t1 = GetTickCount();yh.dt = 5;yh.r = 0;}yh.t1 = yh.t2;
}
if (yh.isdraw == true) {//628次 2πfor (double a = 0; a <= 6.28; a += 0.01) {//圆的轨迹方程int x1 = yh.cx + yh.r * cos(a);int y1 = yh.cy - yh.r * sin(a);//x1,y1 628个来自图片的像素点坐标yh.xy[x1][y1];}
}

他是到这里结束了,然后无法实现烟花图片的输出,因为他并没有相关的代码,需要输出像素点。我最开始写的是putpixel(x1,y1,yh.xy[x1][y1]);发现每次输出的位置都是那一个地方,想着要和最高点的高度有关,改成了putpixel(hy.x,yh.y,yh.xy[x1][y1]);发现结果都不输出了,我想了很久发现如果坐标固定不变,那不就是一个点在一直输出,人眼无法发现这个变化,所以想应该在图片画圆的时候同步对窗口中以最高点为圆心画圆,所以最终变成了putpixel(x2,y2,yh.xy[x1][y1]);

【C/C++开发教程】图形图像处理入门,像素如何组成及图形图像识别和运算_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1na411t7Di/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=7c3bfbf39d037fe80c97234396acc524

	//开始绘制图像if (yh.isdraw == true) {//628次 2πfor (double a = 0; a <= 6.28; a += 0.01) {//圆的轨迹方程(图片)int x1 = yh.cx + yh.r * cos(a);int y1 = yh.cy - yh.r * sin(a);//圆的轨迹方程(窗口)int x2 = yh.x + yh.r * cos(a);int y2 = yh.y - yh.r * sin(a);//x1,y1 628个来自图片的像素点坐标putpixel(x2,y2,yh.xy[x1][y1]);}}
}

 这样就实现了单个烟花的绽放

多个烟花绽放

首先判断变成了这个,需要等爆炸完之后发下一个,其次是位置不能在if (yhd.t2 - yhd.t1 > yhd.dt && yhd.isshoot == true) 里面,此时的已经不再上升了,放里面就实现不了发送多个。

if (yhd.isshoot == false && yh.isboom == false) {//初始化烟花弹initYHD();
}

绽放的烟花消失 

接着就是这最后一个问题了,如何让绽放的烟花自己消失。

最开始我的想法是输出一个黑色的像素点然后去覆盖他,但是考虑到有文字出现所以需要的不是覆盖而是恢复之前的,所以我的想法是用一个结构体来保存之前窗口将会被覆盖的像素,在之后的几轮中一边绽放新的一边恢复之前的,想法很好,但是现实很骨感,如果两个烟花绽放重合,你现在保存的像素之后还是有烟花绽放的影子,所以之后就像用黑色覆盖就覆盖吧,把字体重新输出不就行了。结果和现实还是有点差距。如果是重合的话,黑色还是会把之前的给覆盖了,这个目前还没解决,有大佬会的话,希望能够提供一下思路。

//用于保存之前被覆盖的像素
struct tmp{int x, y;//中心点的坐标(窗口)int ishuifu;//是否恢复
}tmp;//当已经发送第二个的时候恢复第一个的
if (tmp.ishuifu) {//圆的轨迹方程(窗口)int x3 = tmp.x + yh.r * cos(a);int y3 = tmp.y - yh.r * sin(a);//重新弄成黑色putpixel(x3, y3,0x000000);
}

代码

和老师讲的还是有点差距的,我的有点小丑。

#include<stdio.h>
#include<easyx.h>//图形界面库
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#define _CRT_SECURE_NO_WARNINGS  
#include<windows.h>
#pragma comment(lib,"winmm.lib")//媒体库文件 
#include <mmsystem.h>//媒体头文件 
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#include<math.h>//烟花弹
struct yhd {//属性int x, y;//当前坐标 int hx, hy;//最高点的坐标 unsigned long t1, t2, dt;//时间来控制速度 IMAGE img;//保存烟花弹的图片 bool isshoot;//烟花是否属于正在上升的状态 
}yhd;//烟花
struct yh{int r;//当前半径int maxr;//最大半径int x, y;//中心点的坐标(窗口)int cx, cy;//中心点的坐标(图片)int xy[240][240];//图片的宽高,保存图片中的每一个像素点bool isboom;//是否开始爆炸(图片的显示)bool isdraw;//是否开始显示(用户看到的)unsigned long t1, t2, dt;//爆炸的速度
} yh;//用于保存之前被覆盖的像素
struct tmp{int x, y;//中心点的坐标(窗口)int ishuifu;//是否恢复
}tmp;void initYHD();//初始化烟花弹
void initYH();//初始化烟花
void printText();//输出文字//主函数
int main() {srand((unsigned)time(NULL));//选取种子文件 initgraph(1200, 800);//创建窗口 宽1200 高度800//打开音乐文件 mciSendString(L"open music.mp3 alias bgm", 0, 0, 0);//mci 媒体控制接口 mciSendString(L"play bgm repeat", 0, 0, 0);//mci 媒体控制接口 //getchar();//按回车键继续 //初始化烟花弹(烟花弹需要上升,y坐标变化,x不变) initYHD();//初始化烟花initYH();//不恢复tmp.ishuifu = false;while (1) {//打印文字printText();//获取当前时间yhd.t2 = GetTickCount();//t2//速度 处于发射状态if (yhd.t2 - yhd.t1 > yhd.dt && yhd.isshoot == true) {//会覆盖之前的putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);if (yhd.y > yhd.hy) {//有一个上界yhd.y -= 5;//上升}//覆盖之前的putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);if(yhd.y<=yhd.hy){//已经到达最高点//1.擦除烟花弹putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);//停止上升yhd.isshoot = false;//开始爆炸yh.isboom = true;//上升最高点的坐标就是爆炸的中心yh.x = yhd.x;yh.y = yhd.y;}yhd.t1 = yhd.t2;}//2.重新初始化烟花弹烟花爆炸完毕(这个要移出来,如果放在前面那个if里面就不能实现了,新的一轮要isshoot==true才能进去,这判断又是不能为true)if (yhd.isshoot == false && yh.isboom == false) {//保存原点坐标tmp.x = yh.x;tmp.y = yh.y;//恢复tmp.ishuifu = true;//初始化烟花弹initYHD();}//dt的数组int drt[] = { 5,5,5,15,15,15,25,25,25,55,60,65 };//烟花绽放的速度越来越慢msyh.t2 = GetTickCount();//烟花已经爆炸if (yh.t2 - yh.t1 > yh.dt && yh.isboom == true) {if (yh.r < yh.maxr) {yh.r++;//半径不断变大,但是不能超过最大的范围yh.dt = drt[yh.r / 10];//dt不断变大yh.isdraw = true;//开始绘制}//爆炸结束(重置)if (yh.r >= yh.maxr - 1) {//停止绘制,停止爆炸yh.isdraw = false;yh.isboom = false;yh.t1 = GetTickCount();yh.dt = 5;yh.r = 0;}yh.t1 = yh.t2;}//开始绘制图像if (yh.isdraw == true) {//628次 2πint i = 0, j = 0;for (double a = 0; a <= 6.28; a += 0.01) {//当已经发送第二个的时候恢复第一个的if (tmp.ishuifu) {//圆的轨迹方程(窗口)int x3 = tmp.x + yh.r * cos(a);int y3 = tmp.y - yh.r * sin(a);//重新弄成黑色putpixel(x3, y3,0x000000);}//圆的轨迹方程(图片)int x1 = yh.cx + yh.r * cos(a);int y1 = yh.cy - yh.r * sin(a);//圆的轨迹方程(窗口)int x2 = yh.x + yh.r * cos(a);int y2 = yh.y - yh.r * sin(a);//x1,y1 628个来自图片的像素点坐标putpixel(x2,y2,yh.xy[x1][y1]);}}}while (1);//防止直接退出程序return 0;
}//初始化烟花弹
void initYHD() {//初始化烟花弹(烟花弹需要上升,y坐标变化,x不变) yhd.x = rand() % (1200 - 20);yhd.y = 750;//最开始烟花弹的位置 yhd.hx = yhd.x;yhd.hy = rand() % 400;//爆炸高度 yhd.t1 = GetTickCount();//获取当前系统的时间yhd.dt = 5;//dt 10ms yhd.isshoot = true;//最开始是上升状态loadimage(&yhd.img, _T("yhd.jpg"), 20, 50);//加载图片putimage(yhd.x, yhd.y, &yhd.img, SRCINVERT);
}//初始化烟花
void initYH() {yh.r=0;//当前半径yh.maxr = 120;//最大半径yh.cx = 120;yh.cy = 120;//中心点的坐标(图片)yh.xy[240][240];//图片的宽高,保存图片中的每一个像素点yh.isboom=false;//是否开始爆炸(图片的显示)yh.isdraw=false;//是否开始显示(用户看到的)yh.t1 = GetTickCount();yh.dt = 5;//爆炸的速度5msIMAGE yhimg;loadimage(&yhimg, _T("yh.jpg"), 240, 240);//加载图片SetWorkingImage(&yhimg);//指定待获取的图片(默认是从窗口获取)//获取图片的像素点放到数组当中for (int a = 0; a < 240; a++) {for (int b = 0; b < 240; b++) {yh.xy[a][b]=getpixel(a, b);}}SetWorkingImage();//将烟花图片释放
}void printText() {//输出文字settextcolor(YELLOW);//设置字体的颜色settextstyle(25, 0, _T("楷体"));//设置字体的风格 字号  outtextxy(300, 300, _T("2024新年之际,祝福你健康、快乐、平安、幸福"));outtextxy(300, 350, _T("愿你每天都笑容满面"));outtextxy(300, 400, _T("所求皆如愿,所行皆坦途,多喜乐,长安宁"));outtextxy(300, 450, _T("平安喜乐,万事胜意"));outtextxy(300, 500, _T("期末考试顺利"));outtextxy(600, 550, _T("——封奚泽优"));
}

 总结

本来构思的是看自己学的都可以如何祝大家新年快乐,目前只用到了单片机的知识,C语言部分一直实现不了,之后会持续更新,争取早日输出。

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

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

相关文章

Jenkins部署项目

一.安装jenkins 1.1进入jenkins官网下载jenkins war包&#xff0c;上传到服务器/usr/local目录。 1.2执行启动jenkins命令&#xff0c;&#xff08;注意jenkins版本需要的jdk版本&#xff09; /usr/local/java11/bin/java -Djava.awt.headlesstrue -jar /usr/local/jenkins.wa…

【Linux】进程控制深度了解

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握Linux下的进程控制 > 毒鸡汤&#xff…

经典卷积神经网络-VGGNet

经典卷积神经网络-VGGNet 一、背景介绍 VGG是Oxford的Visual Geometry Group的组提出的。该网络是在ILSVRC 2014上的相关工作&#xff0c;主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构&#xff0c;分别是VGG16和VGG19&#xff0c;两者并…

Cuk、Zeta和Sepic开关电源拓扑结构

Cuk、Zeta和Sepic变换器,三种拓扑结构大致类似。不同点在于电感和二极管&#xff0c;MOS管的位置关系的变化。 Cuk电源是一种非隔离的直流电源转换器&#xff0c;其基本结构包括输入滤波电容、开关管、输入电感、输出电感和输出电容等元件。Cuk电路可以看作是Boost和Buck电路的…

适用于各种危险区域的火焰识别摄像机,实时监测、火灾预防、安全监控,为安全保驾护航

火灾是一种极具破坏力的灾难&#xff0c;对人们的生命和财产造成了严重的威胁。为了更好地预防和防范火灾&#xff0c;火焰识别摄像机作为一种先进的监控设备&#xff0c;正逐渐受到人们的重视和应用。本文将介绍火焰识别摄像机在安全监控和火灾预防方面的全面应用方案。 一、火…

自动驾驶论文

文章目录 一、Convolutional Social Pooling for Vehicle Trajectory Prediction二、QCNet&#xff1a;Query-Centric Trajectory Prediction三、VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation 一、Convolutional Social Pooling for Vehicl…

【Spark精讲】一文讲透Spark宽窄依赖的区别

宽依赖窄依赖的区别 窄依赖&#xff1a;RDD 之间分区是一一对应的宽依赖&#xff1a;发生shuffle&#xff0c;多对多的关系 宽依赖是子RDD的一个分区依赖了父RDD的多个分区父RDD的一个分区的数据&#xff0c;分别流入到子RDD的不同分区特例&#xff1a;cartesian算子对应的Car…

vue +elementui 项目登录通过不同账号切换侧边栏菜单的颜色

前景提要&#xff1a;要求不同权限账号登录侧边栏颜色不一样。分为 theme&#xff1a;1代表默认样式&#xff0c;theme:2代表深色主题样式。 1.首先定义一个主题文件 theme.js&#xff0c;定义两个主题样式 // 主要是切换菜单栏和菜单头部主题的设计&#xff0c;整体主题样式切…

JavaScript系列——正则表达式

文章目录 需求场景正则表达式的定义创建正则表达式通过 / 表示式/ 创建通过构造函数创建 编写一个正则表达式的模式使用简单模式使用特殊字符常用特殊字符列表特殊字符组和范围 正则表达式使用代码演示 常用示例验证手机号码合法性 小结 需求场景 在前端开发领域&#xff0c;在…

MVCC 并发控制原理-源码解析(非常详细)

基础概念 并发事务带来的问题 1&#xff09;脏读&#xff1a;一个事务读取到另一个事务更新但还未提交的数据&#xff0c;如果另一个事务出现回滚或者进一步更新&#xff0c;则会出现问题。 2&#xff09;不可重复读&#xff1a;在一个事务中两次次读取同一个数据时&#xff0c…

数字化制造安全防线:迅软DSE助力通用设备企业终端安全卫士

客户简要介绍 某公司是一家主要生产新型激光打印机、喷墨打印机、其它打印机、精密多功能机、传真机等办公自动化用品的企业。公司与顾客建立长期的信赖忠诚关系”的方针&#xff0c;逐步完善公司的各项运营&#xff0c;不断扩充市场前景。产品除国内销售外&#xff0c;还销往…

uni-app模版(扩展插件)

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

python统计分析——直方图(plt.hist)

使用matplotlib.pyplot.hist()函数绘制直方图 from matplotlib.pyplot as pltdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) 下面介绍plt.hist()函数中常用的几个重要参数&#xff08;参数等号后为默认设置&#xff09;&#xff1a; &#xff08;1&#xff0…

WebStorm 创建一个Vue项目(1)

一、下载并安装WebStorm 步骤一 步骤二 选择激活方式 激活码&#xff1a; I2A0QUY8VU-eyJsaWNlbnNlSWQiOiJJMkEwUVVZOFZVIiwibGljZW5zZWVOYW1lIjoiVU5JVkVSU0lEQURFIEVTVEFEVUFMIERFIENBTVBJTkFTIiwiYXNzaWduZWVOYW1lIjoiVGFvYmFv77yaSkVU5YWo5a625qG25rAIOa0uW3peS9nOWup…

[Angular] 笔记 16:模板驱动表单 - 选择框与选项

油管视频&#xff1a; Select & Option (Template Driven Forms) Select & Option 在 pokemon.ts 中新增 interface: export interface Pokemon {id: number;name: string;type: string;isCool: boolean;isStylish: boolean;acceptTerms: boolean; }// new interface…

从0搭建github.io网页

点击跳转到&#x1f517;我的博客文章目录 从0搭建github.io网页 文章目录 从0搭建github.io网页1.成果展示1.1 网址和源码1.2 页面展示 2.new对象2.1 创建仓库 3.github.io仓库的初始化3.1 千里之行&#xff0c;始于足下3.2 _config.yml3.3 一点杂活 4.PerCheung.github.io.p…

工业4G 物联网网关——机房动环监控系统应用方案介绍

机房动环监控系统是什么&#xff1f;机房动环监控系统的全称为机房动力环境监控系统&#xff0c;是一套安装在机房内的监控系统&#xff0c;可以对分散在机房各处的独立动力设备、环境和安防进行实时监测&#xff0c;统计和分析处理相关数据&#xff0c;第一时间侦测到故障发生…

MyBatis学习一:快速入门

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html MyBatis 快速入门&#xf…

回顾 2023,展望 2024

by zhengkai.blog.csdn.net 项目与心得 今年最大的项目和心得&#xff0c;非GCP莫属&#xff0c;作为全球顶尖的云平台&#xff0c; GCP有他的优势&#xff0c;也有很多难用的地方。但是作为当时的一个strategic solution&#xff0c;我们的印度本地化项目必须使用GCP&#xf…

非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (实例篇 V)

Title: 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (实例篇 V) 姊妹博文 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (I) 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (II) 非线性最小二乘问题的数值方法 —— 从牛顿…