2024新年快乐

news2025/1/25 9:02:40

前言

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

单片机

思路

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

3b046931d58a4e96bb4c4270e571139d.png

 2024

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

#include<reg51.h>

void main(void){
	while(1){
		//2024 0010 0000 0010 0100
		P1=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=0
	E=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 1602
	E=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++);//输出字符串,且指针增1
		delay(100);
	}
}

void print_LED(){//输出“2024”的数码管
	//2024 0010 0000 0010 0100
	P1=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=0
	E=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 1602
	E=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++);//输出字符串,且指针增1
		delay(100);
	}
}

void print_2024(){//输出“2024”的数码管
	//2024 0010 0000 0010 0100
	P1=0x20;
	P3=0x24;
}

void print_HappyNewYear(){//输出“新年快乐”的LCD 1602
	string(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,工作方式1
	ET0   = 1;     //允许定时器0中断
	EA    = 1;     //CPU开放中断
	TF0   = 0;     //溢出标志位清0
	TR0   = 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 1602
 
void 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=0
	E=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 1602
	E=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++);//输出字符串,且指针增1
		delay(100);
	}
}

void timer0_initial()//初始化定时器0的状态
{
	beepIO = 0;
	TH0   = 0xFD;	
	TL0   = 0x09;
	TMOD  = 0x01;  //选择定时器0,工作方式1
	ET0   = 1;     //允许定时器0中断
	EA    = 1;     //CPU开放中断
	TF0   = 0;     //溢出标志位清0
	TR0   = 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 0100
	P1=0x20;
	P3=0x24;
}

void print_HappyNewYear(){//输出“新年快乐”的LCD 1602
	lcd_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 高度800
	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();//按回车键继续 
	
	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;
}

 总结

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

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

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

相关文章

uni-app js语法

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

微信小程序-父子页面传值

父子页面传值 父页面向子页面传值 方法一&#xff1a; 父页面&#xff1a; 1. /page/xxx/xxx?id1子页面&#xff1a; onLoad:function(option){ }方法二 <bindtap“func” data-xxx””> 子页面向父页面传值 定义父子页面 父页面&#xff1a;hotspot 子页面&a…

Python中matplotlib库的使用2

在Python中matplotlib库的使用1-CSDN博客中提到了使用折线图来表示1-5的平方值。除了折线图之外&#xff0c;还可以使用条形图来表示这些数据。条形图表示一组分类数据&#xff0c;例如刚刚提到的1-5的平方值。 1 基本的条形图 通过以下代码可以将分类数据用基本的条形图表示…

C语言——扫雷

扫雷是一款经典的小游戏&#xff0c;那如何使用C语言实现一个扫雷游戏呢&#xff1f; 一、全部源码 直接把全部源码放在开头&#xff0c;如有需要&#xff0c;直接拿走。 源码分为三个文件&#xff1a; test.cpp/c 主函数的位置 #include "game.h"int main() {…

Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

目录 1. 背景 2. Windows系统安装canal 3.Mysql准备工作 4. 公共依赖包 5. Redis缓存设计 6. mall-canal-service 1. 背景 canal [kənl] &#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。其诞…

微服务应用配置解决方案介绍

目录 一、传统服务配置面临的问题 1.1 本地静态配置 1.2 配置格式不统一 1.3 生产事故 1.4 配置修改困难 1.5 缺少安全审计和版本控制能⼒ 二、应用配置的使用场景 2.1 动态调整日志级别 2.2 配置项组合更新 2.3 开关驱动开发 2.4 金丝雀(灰度)发布 三、应用配置解决…

【Redis-08】Redis主从复制的实现原理

在Redis中&#xff0c;可以通过slaveof命令或者设置slaveof选项实现两台Redis服务器的主从复制&#xff0c;比如我们有两个Redis机器&#xff0c;地址分别是 127.0.0.1:6379 和 127.0.0.1:6380&#xff0c;现在我们在前者上面执行&#xff1a; 127.0.0.1:6379 > SLAVEOF 12…

Docker九 | Swarm mode

目录 Swarm基本概念 节点 服务和任务 创建Swarm集群 创建管理节点 增加工作节点 查看集群 部署服务 新建服务 查看服务 服务伸缩 增加服务 减少服务 删除服务 Swarm基本概念 节点 节点分为管理节点(manager)和工作节点(worker) 管理节点 管理节点用于Swarm集群的…

使用 GPT4V+AI Agent 做自动 UI 测试的探索

一、背景 从 Web 诞生之日起&#xff0c;UI 自动化就成了测试的难点&#xff0c;到现在近 30 年&#xff0c;一直没有有效的手段解决Web UI测试的问题&#xff0c;尽管发展了很多的 webdriver 驱动&#xff0c;图片 diff 驱动的工具&#xff0c;但是这些工具的投入产出比一直被…

windows go环境安装 swag

windows 下载依赖包 go get github.com/swaggo/swag/cmd/swag编译swag cd $GOPATH\pkg\mod\github.com\swaggo\swagv1.16.2\cmd\swagps: go env 获取 GOPATH位置 go installps: 此时 $GOPATH\bin下出现了 swag.exe 项目根目录下执行swag 初始化 swag init生成结果

【Java基础系列】body参数前后端不一致

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

动态规划 | 鸡蛋问题 | 元旦假期来点“蛋”题

文章目录 鸡蛋掉落 - 两枚鸡蛋题目描述动态规划解法问题分析程序代码 鸡蛋掉落题目描述问题分析程序代码复杂度分析 鸡蛋掉落 - 两枚鸡蛋 题目描述 原题链接 给你 2 枚相同 的鸡蛋&#xff0c;和一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 …

微信小程序开发系列-10组件间通信01

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》 《微信小程序开发系列-02注册小程序》 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》 《微信小程序开发系列-04获取用户图像和昵称》 《微信小程序开发系列-05登录小程序》 《…

图文证明 泰勒公式展开

泰勒公式 泰勒公式简单来说就是,可以用一个N次多项式来表示出一个连续可导的函数 f(x) 是一个用函数在某点的信息描述其附近取值的公式 第一步 思考 这是一个sin(x)的图像 用函数在原点的信息描述其附近取值 用一阶导数贴合: 直接用切线来贴合就好 画一个点(0,sin(0)除的切…

内网常规攻击路径

点击星标&#xff0c;即时接收最新推文 随着网络技术的发展&#xff0c;企业内部网络架构的变化&#xff0c;网络设备多样性的增加&#xff0c;面对内网攻击&#xff0c;防御体系逐渐阶梯化&#xff0c;通过不同维度的防御联动&#xff0c;将攻击拒之门外。对于突破网络边界后进…

docker 私有仓库搭建,将镜像上传至私有仓库,从私有仓库拉取镜像

Docker 私有仓库 一、私有仓库搭建 # 1、拉取私有仓库镜像 docker pull registry # 2、启动私有仓库容器 docker run -id --nameregistry -p 5000:5000 registry # 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog&#xff0c;看到{"repositories&quo…

八个理由:从java8升级到Java17

目录 前言 1. 局部变量类型推断 2.switch表达式 3.文本块 4.Records 5.模式匹配instanceof 6. 密封类 7. HttpClient 8.性能和内存管理能力提高 前言 从Java 8 到 Java 20&#xff0c;Java 已经走过了漫长的道路&#xff0c;自 Java 8 以来&#xff0c;Java 生态系统…

DevExpress 皮肤改变触发后触发的事件,用来保存皮肤配置

代码&#xff1a; private UserLookAndFeel userLookAndFeel; public MainGeneral() {InitializeComponent();// 创建 UserLookAndFeel 实例userLookAndFeel new UserLookAndFeel(this);// 订阅 StyleChanged 事件userLookAndFeel.StyleChanged UserLookAndFeel_StyleChange…

学习体系结构 - AArch64内存管理

学习体系结构 - AArch64内存管理 Learn the architecture - AArch64 memory management Version 1.2 个人的英语很一般&#xff0c;对拿不准的翻译校准在后面添加了英文原文。 1、 概述 本指南介绍了AArch64中的内存转换&#xff0c;这是内存管理的关键。它解释了如何将虚拟地…

ACW741.斐波那契额数列

输入整数 N&#xff0c;求出斐波那契数列中的第 N项是多少。 斐波那契数列的第 0项是 0&#xff0c;第 1项是 1&#xff0c;从第 2 项开始的每一项都等于前两项之和。输入格式 第一行包含整数 T&#xff0c;表示共有T个测试数据。接下来 T行&#xff0c;每行包含一个整数 N。输…