基于AT89C51单片机的多功能自行车测速计程器(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机的多功能自行车测速计程器的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。

目录

选题背景

原理图

PCB图

仿真图

 代码

系统论文

资源下载


选题背景

美丽的夜晚,骑着单车刷内环,既浪漫又可以锻炼身体,但是我们到底骑了多少米,我们的车速是多少,我们并不知道。自行车已经不仅仅是普通的代步、运输工具,而是成为人们娱乐、休闲、锻炼的首选。自行车简易数字里程表能够满足人们最基本的需求,让人们能清楚地知道当前的速度、里程等物理量。

关键字里程/速度;霍尔元件;单片机;LCD显示;超声波测距;震动防盗;人体感控; 

原理图


PCB图


仿真图


 代码


#include<reg52.h>#define uchar unsigned char
#define uint unsigned int#include "Data.h"
#include "DS1302.h"
#include "AT24C02.h"sbit COUNT_IN=P3^2;//定义1602相关管脚
sbit rs=P1^4;
sbit en=P1^0;//键盘定义
sbit K1=P3^4;	//设置时间
sbit K3=P3^6;	//减按键
sbit K2=P3^5;	//加按键
sbit K4=P3^7;	//设置半径安全距离
sbit BEEP=P3^0;uint count;
unsigned long Velocity,Mileage;uchar code tab1[]={"  /  /     :    "}; //14/09/10 16:34 3   	
uchar code tab2[]={"  0.000km 00km/h"};	//000.000km 00km/h
uchar code tab3[]={"Wheel Radius  cm"};
uchar code tab4[]={"Safe Speed  km/h"};
uchar code tab5[]={"Sec :           "};uchar Mode=0;
uchar bike_set=0;
uchar a;
char RADIUS,SAFE_SPEED;
bit LED_SEC;
uchar before_sec;	//自定义字符
uchar code num[]={0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//1	 0x1f,0x01,0x01,0x1f,0x10,0x10,0x1f,0x00,//20x1f,0x01,0x01,0x1f,0x01,0x01,0x1f,0x00,//3	 0x11,0x11,0x11,0x1f,0x01,0x01,0x01,0x00,//40x1f,0x10,0x10,0x1f,0x01,0x01,0x1f,0x00,//5	 0x1f,0x10,0x10,0x1f,0x11,0x11,0x1f,0x00,//60x1f,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//7 	
};
void READS();
void SETS();
void delay(uint x)
{uint i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);
}
void init()
{IT0=1;	//INT0负跳变触发	TMOD=0x01;//定时器工作于方式1TH0=0x3c;	  //50msTL0=0xb0;EA=1; //CPU开中断总允许ET0=1;//开定时中断EX0=1;//开外部INTO中断TR0=1;//启动定时
}
/********液晶写入指令函数与写入数据函数,以后可调用**************/void write_1602com(uchar com)//****液晶写入指令函数****
{rs=0;//数据/指令选择置为指令P0=com;//送入数据delay(1);en=1;//拉高使能端,为制造有效的下降沿做准备delay(1);en=0;//en由高变低,产生下降沿,液晶执行命令}void write_1602dat(uchar dat)//***液晶写入数据函数****
{rs=1;//数据/指令选择置为数据P0=dat;//送入数据delay(1);en=1; //en置高电平,为制造下降沿做准备delay(1);en=0; //en由高变低,产生下降沿,液晶执行命令
}
//自定义字符集
void Lcd_ram()      
{ uint i,j,k=0,temp=0x40; for(i=0;i<7;i++){for(j=0;j<8;j++){write_1602com(temp+j);write_1602dat(num[k]);k++;}temp=temp+8;}
}void lcd_init()//***液晶初始化函数****
{Lcd_ram();write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动,光标自动右移write_1602com(0x01);//清显示write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示for(a=0;a<16;a++){write_1602dat(tab1[a]);//向液晶屏写固定符号部分}write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<16;a++){write_1602dat(tab2[a]);//写显示固定符号}
}void display()
{//			1km/h=100m/0.1h	  	 360s//			10km/h=100m/0.01h 	 36s//			100km/h=100m/0.001h  3.6sif(Mode==0&&bike_set==0){//读时间Ds1302_Read_Time();//显示时间write_1602com(0x80);write_1602dat(0x30+time_buf1[1]/10);write_1602dat(0x30+time_buf1[1]%10);write_1602com(0x80+3);write_1602dat(0x30+time_buf1[2]/10);write_1602dat(0x30+time_buf1[2]%10);write_1602com(0x80+6);write_1602dat(0x30+time_buf1[3]/10);write_1602dat(0x30+time_buf1[3]%10);write_1602com(0x80+9);write_1602dat(0x30+time_buf1[4]/10);write_1602dat(0x30+time_buf1[4]%10);write_1602com(0x80+12);write_1602dat(0x30+time_buf1[5]/10);write_1602dat(0x30+time_buf1[5]%10);write_1602com(0x80+15);write_1602dat(time_buf1[7]-1);		if(before_sec!=time_buf1[6]){before_sec=time_buf1[6];write_1602com(0x80+11);write_1602dat(':');LED_SEC=1;}if(LED_SEC==0){write_1602com(0x80+11);write_1602dat(' ');	}write_1602com(0x80+0x40);if(Mileage/1000000==0)write_1602dat(' ');elsewrite_1602dat(0x30+Mileage/1000000);//数字+0x30得到该数字的LCD1602显示码if(Mileage%1000000/100000==0)write_1602dat(' ');else	write_1602dat(0x30+Mileage%1000000/100000);//数字+0x30得到该数字的LCD1602显示码write_1602dat(0x30+Mileage%1000000%100000/10000);//数字+0x30得到该数字的LCD1602显示码 write_1602com(0x80+0x40+4);write_1602dat(0x30+Mileage%1000000%100000%10000/1000);//数字+30得到该数字的LCD1602显示码write_1602dat(0x30+Mileage%1000000%100000%10000%1000/100);//数字+30得到该数字的LCD1602显示码write_1602dat(0x30+Mileage%1000000%100000%10000%1000%100/10);//数字+30得到该数字的LCD1602显示码SETS();write_1602com(0x80+0x40+10);write_1602dat(0x30+Velocity/10);write_1602dat(0x30+Velocity%10);//数字+30得到该数字的LCD1602显示码}else if(Mode!=0){switch(Mode){case 1:	write_1602com(0x80+0x40);//显示固定符号写入位置for(a=0;a<16;a++){write_1602dat(tab5[a]);//写显示固定符号}write_1602com(0x80+0x40+14);write_1602dat(0x30+time_buf1[6]/10);write_1602dat(0x30+time_buf1[6]%10);	write_1602com(0x0F);	 //打开闪烁write_1602com(0x80+1);break;						  case 2:write_1602com(0x80+4);break;case 3:write_1602com(0x80+7);break;case 4:write_1602com(0x80+10);break;case 5:write_1602com(0x80+13);break;case 6:write_1602com(0x80+0x40+15);break;case 7:write_1602com(0x80+15);break;case 8:write_1602com(0x0c);write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示for(a=0;a<16;a++){write_1602dat(tab1[a]);//向液晶屏写固定符号部分}write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<16;a++){write_1602dat(tab2[a]);//写显示固定符号}break;}}else if(bike_set!=0){switch(bike_set){case 1:	write_1602com(0x80);//显示固定符号写入位置for(a=0;a<16;a++){write_1602dat(tab3[a]);//写显示固定符号}write_1602com(0x80+0x40);//显示固定符号写入位置for(a=0;a<16;a++){write_1602dat(tab4[a]);//写显示固定符号}write_1602com(0x80+12);write_1602dat(0x30+RADIUS/10);		   //车轮半径write_1602dat(0x30+RADIUS%10);write_1602com(0x80+0x40+10);write_1602dat(0x30+SAFE_SPEED/10);		   //安全速度write_1602dat(0x30+SAFE_SPEED%10);	write_1602com(0x0F);	 //打开闪烁write_1602com(0x80+13);break;						  case 2:write_1602com(0x80+0x40+11);break;case 3:write_1602com(0x0c);write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示for(a=0;a<16;a++){write_1602dat(tab1[a]);//向液晶屏写固定符号部分}write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<16;a++){write_1602dat(tab2[a]);//写显示固定符号}break;}}	
}void KEY()
{	if(bike_set==0&&K1==0){delay(20);if(bike_set==0&&K1==0){BEEP=0;delay(50);BEEP=1;Mode++;display();if(Mode>=8){Mode=0;Ds1302_Write_Time();}}while(bike_set==0&&K1==0);}if(K4==0&&Mode==0){delay(20);if(K4==0&&Mode==0){BEEP=0;delay(50);BEEP=1;bike_set++;display();if(bike_set>=3){bike_set=0;SETS();}}while(Mode==0&&K4==0);}//+if(K2==0&&(Mode!=0||bike_set!=0)){delay(20);//调时if(K2==0&&(Mode!=0||bike_set!=0)){BEEP=0;delay(50);BEEP=1;	switch(Mode){case 1:time_buf1[1]++;if(time_buf1[1]>=100)time_buf1[1]=0;write_1602com(0x80);write_1602dat(0x30+time_buf1[1]/10);write_1602dat(0x30+time_buf1[1]%10);write_1602com(0x80+1);break;case 2:time_buf1[2]++;if(time_buf1[2]>=13)time_buf1[2]=1;write_1602com(0x80+3);write_1602dat(0x30+time_buf1[2]/10);write_1602dat(0x30+time_buf1[2]%10);write_1602com(0x80+4);break;case 3:time_buf1[3]++;if(time_buf1[3]>=YDay(time_buf1[1],time_buf1[2])+1)time_buf1[3]=1;write_1602com(0x80+6);write_1602dat(0x30+time_buf1[3]/10);write_1602dat(0x30+time_buf1[3]%10);write_1602com(0x80+7);break;case 4:time_buf1[4]++;if(time_buf1[4]>=24)time_buf1[4]=0;write_1602com(0x80+9);write_1602dat(0x30+time_buf1[4]/10);write_1602dat(0x30+time_buf1[4]%10);write_1602com(0x80+10);break;case 5:time_buf1[5]++;if(time_buf1[5]>=60)time_buf1[5]=0;write_1602com(0x80+12);write_1602dat(0x30+time_buf1[5]/10);write_1602dat(0x30+time_buf1[5]%10);write_1602com(0x80+13);break;case 6:time_buf1[6]++;if(time_buf1[6]>=60)time_buf1[6]=0;write_1602com(0x80+0x40+14);write_1602dat(0x30+time_buf1[6]/10);write_1602dat(0x30+time_buf1[6]%10);write_1602com(0x80+0x40+15);break;case 7:time_buf1[7]++;if(time_buf1[7]>=8)time_buf1[7]=1;write_1602com(0x80+15);write_1602dat(time_buf1[7]-1);write_1602com(0x80+15);break;}switch(bike_set){case 1:RADIUS++;if(RADIUS>=71)RADIUS=0;write_1602com(0x80+12);write_1602dat(0x30+RADIUS/10);write_1602dat(0x30+RADIUS%10);write_1602com(0x80+13);break;case 2:SAFE_SPEED++;if(SAFE_SPEED>=100)SAFE_SPEED=0;write_1602com(0x80+0x40+10);write_1602dat(0x30+SAFE_SPEED/10);write_1602dat(0x30+SAFE_SPEED%10);write_1602com(0x80+0x40+11);break;}}while(K2==0);}//-if(K3==0&&(Mode!=0||bike_set!=0)){delay(20);//调时if(K3==0&&(Mode!=0||bike_set!=0)){BEEP=0;delay(50);BEEP=1;switch(Mode){case 1:time_buf1[1]--;if(time_buf1[1]<0)time_buf1[1]=99;write_1602com(0x80);write_1602dat(0x30+time_buf1[1]/10);write_1602dat(0x30+time_buf1[1]%10);write_1602com(0x80+1);break;case 2:time_buf1[2]--;if(time_buf1[2]<=0)time_buf1[2]=12;write_1602com(0x80+3);write_1602dat(0x30+time_buf1[2]/10);write_1602dat(0x30+time_buf1[2]%10);write_1602com(0x80+4);break;case 3:time_buf1[3]--;if(time_buf1[3]<=0)time_buf1[3]=YDay(time_buf1[1],time_buf1[2]);write_1602com(0x80+6);write_1602dat(0x30+time_buf1[3]/10);write_1602dat(0x30+time_buf1[3]%10);write_1602com(0x80+7);break;case 4:time_buf1[4]--;if(time_buf1[4]<0)time_buf1[4]=23;write_1602com(0x80+9);write_1602dat(0x30+time_buf1[4]/10);write_1602dat(0x30+time_buf1[4]%10);write_1602com(0x80+10);break;case 5:time_buf1[5]--;if(time_buf1[5]<0)time_buf1[5]=59;write_1602com(0x80+12);write_1602dat(0x30+time_buf1[5]/10);write_1602dat(0x30+time_buf1[5]%10);write_1602com(0x80+13);break;case 6:time_buf1[6]--;if(time_buf1[6]<0)time_buf1[6]=59;write_1602com(0x80+0x40+14);write_1602dat(0x30+time_buf1[6]/10);write_1602dat(0x30+time_buf1[6]%10);write_1602com(0x80+0x40+15);break;case 7:time_buf1[7]--;if(time_buf1[7]<1)time_buf1[7]=7;write_1602com(0x80+15);write_1602dat(time_buf1[7]-1);write_1602com(0x80+15);break;}switch(bike_set){case 1:RADIUS--;if(RADIUS<0)RADIUS=70;write_1602com(0x80+12);write_1602dat(0x30+RADIUS/10);write_1602dat(0x30+RADIUS%10);write_1602com(0x80+13);break;case 2:SAFE_SPEED--;if(SAFE_SPEED<0)SAFE_SPEED=99;write_1602com(0x80+0x40+10);write_1602dat(0x30+SAFE_SPEED/10);write_1602dat(0x30+SAFE_SPEED%10);write_1602com(0x80+0x40+11);break;}}while(K3==0);}	if(K2==0&&K3==0&&Mode==0&bike_set==0){BEEP=0;delay(100);BEEP=1;delay(100);BEEP=0;delay(100);BEEP=1;delay(100);Mileage=0;SETS();while(K2==0&&K3==0);}
}
void BJ_SAFE()
{if(Velocity>SAFE_SPEED){BEEP=0;}else{BEEP=1;}
}void main()
{//初始化Ds1302_Init();lcd_init();initeeprom();//读取初始参数READS();//定时器初始化
//	InitTimer0();init();lcd_init();before_sec=time_buf1[6];while(1){if(Mode==0&&bike_set==0){display();BJ_SAFE();}KEY();}
}void EXINT0() interrupt 0
{count++;
}void time0() interrupt 1
{uchar m,n;TH0=0x3c;TL0=0xb0;	 //50msm++;if(LED_SEC==1){n++;if(n>=10){n=0;LED_SEC=0;}}if(m>=10){m=0;Mileage=Mileage+10*(Velocity/3.6)/2;		 //里程m=里程+速度km/h/3.6/2Velocity=count *2*3.14*RADIUS /100000*2*3600  /40;//将500ms的距离经过运算得到km/h,将速度/100,方便显示count=0;	}
}//读初值
void READS()
{uchar Mileage_H,Mileage_M,Mileage_L;delay(10);RADIUS=read_add(0x01);delay(10);SAFE_SPEED=read_add(0x02);delay(10);Mileage_H=read_add(0x03);delay(10);Mileage_M=read_add(0x04);delay(10);Mileage_L=read_add(0x05);Mileage=Mileage_H*100000+Mileage_M*1000+Mileage_L*10;
}

系统论文(部分)


引 言

自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车简易数字里程表作为自行车的一大辅助工具也随着这个需求而面世,其功能也逐渐从单一的里程显示发展到速度、时间显示。本设计采用51系列单片机设计一种体积小、操作简单的便携式自行车的速度里程表,它能自动地显示当前自行车行驶的里程及速度,并且具有测距防盗功能。

这次主要任务是利用霍尔元件、单片机、超声波发射、震动传感器等部件设计一个可用1602液晶显示里程、速度、防盗和测距的自行车速度里程表。本文主要介绍了自行车的速度里程表的设计思想、电路原理和元件的选择等内容,整体上分为硬件部分设计和软件部分设计。

本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括单片机的选择、传感器的选择、显示电路的设计;然后简要阐述了自行车的速度里程表的软件设计思路;最后针对仿真过程遇到的问题进行了说明与分析,对本次设计进行了系统的总结。

 具体的硬件电路包括STC89C52单片机的外围电路以及液晶显示电路等。

软件设计包括:芯片的初始化程序、定时中断子程序、显示子程序等,用keil软件采用C语言编写。

第一部分 设计任务                    

1.1 设计要求

(1)用1602显示屏显示速度,路程,时间。
(2)若超过预设的速度,则蜂鸣器报警

(3)报警临界速度可调

(4)使用震动传感器设计防盗系统

(5)使用超声波模块测距

(6)选择合适的调试模型

1.2 方案设计

    采用单片机实现:用霍尔传感器将所测转速转变为数字脉冲信号,然后再将数字脉冲信号数据传输于核心单片机处理,单片机将根据设计程序计算在一定时间内数字脉冲的频率,再由计数值最终得到里程数并通过终端显示设备显示出来。且附加报警功能,在速度超过某一个固定值后,蜂鸣器响,提示需要减速。当震动传感器震动频率超出设置频率时,蜂鸣器发出响声报警,数码管可显示路面的距离。

第三部分 系统软件的设计与实现

3.1 主程序流程图

 图9  主程序流程图

3.2 显示流程图 

该子程序用LCD动态扫描显示方式。先将单片机的P2.2口连接使能端口E。接着将单片机的P2.0口连接数据/命令选择端RS,P0口连接数据端D0~D7,然后将要显示的数字的值发送给P0口。然后调用延时,接着将P2.2口置0,P2.0口置1,写指令,将P2.2口置1,P2.0口置1,写数据,直到要显示的数字全部显示在液晶上。显示流程图如图10所示。

图10 显示流程图

3.3 速度处理流程图

3.4 电路仿真

3.4.1 仿真软件简介

Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,

它也支持IAR、Keil和MPLAB等多种编译器。

3.4.2 仿真结果

仿真结果如图12所示。 

 图12


资源下载


如果有需要这个系统的源码、仿真、论文等资源的可以私信我。感谢你的阅读~

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

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

相关文章

JavaScript:移除元素

这是原题&#xff1a;给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操…

【PyTorch][chapter 26][李宏毅深度学习][attention-2]

前言&#xff1a; Multi-Head Attention 主要作用&#xff1a;将Q,K,V向量分成多个头&#xff0c;形成多个子语义空间&#xff0c;可以让模型去关注不同维度语义空间的信息 目录&#xff1a; attention 机制 Multi-Head Attention 一 attention 注意力 Self-Attention&#x…

什么是im即时通讯?WorkPlus im即时通讯私有化部署安全可控

IM即时通讯是Instant Messaging的缩写&#xff0c;指的是一种实时的、即时的电子信息交流方式&#xff0c;也被称为即时通讯。它通过互联网和移动通信网络&#xff0c;使用户能够及时交换文本消息、语音通话、视频通话、文件共享等信息。而WorkPlus im即时通讯私有化部署则提供…

防火墙--双机热备

目录 双击热备作用 防火墙和路由器备份不同之处 如何连线 双机 热备 冷备 VRRP VGMP&#xff08;华为私有协议&#xff09; 场景解释 VGMP作用过程 主备的形成场景 接口故障的切换场景 整机故障 原主设备故障恢复的场景 如果没有开启抢占 如果开启了抢占 负载分…

对红酒品质进行数据分析(python)

http://t.csdnimg.cn/UWg2S 数据来源于这篇博客&#xff0c;直接下载好csv文件。 这篇内容均在VScode的jupyter notebook上完成&#xff0c;操作可以看我的另一篇博客&#xff1a;http://t.csdnimg.cn/69sDJ 一、准备工作 1. 导入数据库 #功能是可以内嵌绘图&#xff0c;并…

纯硬件一键开关机电路的工作原理

这是一个一键开关机电路: 当按一下按键然后松开&#xff0c;MOS管导通&#xff0c;VOUT等于电源电压; 当再次按一下按键然后松开&#xff0c;MOS管关闭&#xff0c;VOUT等于0; 下面来分析一下这个电路的工作原理。上电后&#xff0c;输入电压通过R1和R2给电容充电&#xff0c;最…

继承和多态常见的面试问题

文章目录 概念问答 概念 下面哪种面向对象的方法可以让你变得富有( A) A: 继承 B: 封装 C: 多态 D: 抽象 (D )是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关&#xff0c; 而对方法的调用则可以关联于具体的对象。 A: 继承 B: 模板 C: 对象的…

如何让公众号文章排版变的高大上?

有的时候&#xff0c;你可能会疑惑&#xff0c;为什么你写的文章没人看&#xff1f;明明投入很多精力在标题和文章内容上&#xff0c;但收效甚微。 有一个关键性的因素可能被你忽略了&#xff0c;那就是排版&#xff0c;文章没有排版&#xff0c;无论你的内容再怎么精彩&#x…

力扣622.设计循环队列

力扣622.设计循环队列 通过数组索引构建一个虚拟的首尾相连的环当front rear时 队列为空当front rear 1时 队列为满 (最后一位不存) class MyCircularQueue {int front;int rear;int capacity;vector<int> elements;public:MyCircularQueue(int k) {//最后一位不存…

智能化革新:智能AI如何助力生产力发展的未来与应用

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 前言 在当今这个科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了推动生产力发展的重要力量。AI技…

2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)

RC-u1 热҈热҈热҈ 分数 10 全屏浏览 切换布局 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 热҈热҈热҈……最近热得打的字都出汗了&#xff01; 幸好某连锁餐厅开启了气温大于等于 35 度即可获得一杯免费雪碧的活动。但不知为何&#xff0c;在每个星期四的时候&#x…

React的usestate设置了值后马上打印获取不到最新值

我们在使用usestate有时候设置了值后&#xff0c;我们想要更新一些值&#xff0c;这时候&#xff0c;我们要想要马上获取这个值去做一些处理&#xff0c;发现获取不到&#xff0c;这是为什么呢&#xff1f; 效果如下&#xff1a; 1、原因如下 在React中,当你使用useState钩子…

基于STC89C51单片机的烟雾报警器设计(煤气火灾检测报警)(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于STC89C51单片机的烟雾报警器设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘要 原理图 实物图 仿真图 元件清单 代码 系统论文 资源下载 摘要 随着现代家庭用火、…

navicat15已连接忘记密码

1.导出链接 2.使用文本打开 connections.ncx UserName"root" PasswordXXXX 3.复制加密密码&#xff0c;在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…

C语言学习笔记[26]:循环语句do...while①

do...while语句 do...while的语法格式 do循环语句; while(表达式); 用do...while语句实现打印0~10 #include <stdio.h>int main() {int i 0;do{printf("%d\n", i);i;} while (i < 10);return 0; } do...while是先进行一次循环以后&#xff0c;再进行判…

R语言包AMORE安装报错问题以及RStudio与Rtools环境配置

在使用R语言进行AMORE安装时会遇到报错&#xff0c;这时候需要采用解决办法&#xff1a; AMORE包安装&#xff0c;需要离线官网下载安装包&#xff1a; Index of /src/contrib/Archive/AMORE (r-project.org)https://cran.r-project.org/src/contrib/Archive/AMORE/ 一、出现…

[C++初阶]list的模拟实现

一、对于list的源码的部分分析 1.分析构造函数 首先&#xff0c;我们一开始最先看到的就是这个结点的结构体&#xff0c;在这里我们可以注意到这是一个双向链表。有一个前驱指针&#xff0c;一个后继指针。然后在有一个存储数据的空间 其次它的迭代器是一个自定义类型&#x…

图片太大怎么压缩变小?交给这4个方法就能行

在钱塘江畔&#xff0c;一场罕见的“蝴蝶潮”翩然而至&#xff0c;不仅带来了自然奇观&#xff0c;也预示着好运的降临。然而&#xff0c;当我们将这份美好瞬间分享给更多人时&#xff0c;却遇到了一个小小难题——高分辨率的照片占据了大量的存储空间&#xff0c;上传至社交平…

HBuilderX打包流程(H5)?HBuilder如何发布前端H5应用?前端开发怎样打包发布uniapp项目为h5?

打包步骤&#xff1a; 1、打开hbuilder x》发行》网站-PC Web或手机H5(仅适用于uni-app)(H) 2、面板里的所有信息都可以不填&#xff0c;也不用勾选》直接点击【发行】即可 3、打包成功&#xff1a; 4、部署 按照打包后的路径&#xff0c;找到打包好的文件夹&#xff0c;把文…

【5G Sub-6GHz模块】专为IoT/eMBB应用而设计的RG520NNA、RG520FEB、RG530FNA、RG500LEU 5G模组

推出全新的5G系列模组&#xff1a; RG520NNADB-M28-SGASA RG520NNADA-M20-SGASA RG520FEBDE-M28-TA0AA RG530FNAEA-M28-SGASA RG530FNAEA-M28-TA0AA RG500LEUAA-M28-TA0AA ——明佳达 1、5G RG520N 系列——专为IoT/eMBB应用而设计的LGA封装模块 RG520N 系列是一款专为 IoT…