基于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,一经查实,立即删除!

相关文章

力扣刷题(自用)

哈希 128.最长连续序列 128. 最长连续序列 - 力扣&#xff08;LeetCode&#xff09; 这个题要求O(n)的时间复杂度&#xff0c;我一开始想的是双指针算法&#xff08;因为我并不是很熟悉set容器的使用&#xff09;&#xff0c;但是双指针算法有小部分数据过不了。 题解给的哈…

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…

三分钟速通银行家算法

银行家算法&#xff08;Bankers Algorithm&#xff09;是一种用于避免死锁的经典算法&#xff0c;广泛应用于操作系统、数据库管理系统及分布式系统中。下面将结合实战场景&#xff0c;详细介绍银行家算法的实现过程和应用。 一、算法背景 银行家算法由荷兰计算机科学家Edsge…

什么是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;并…

如何查看Linux中某个项目是否在Docker中运行

方法一&#xff1a;检查进程的 cgroup Docker 容器的进程运行在特定的 cgroup 中。你可以通过检查进程的 cgroup 信息来判断它是否在 Docker 容器中运行。 找到项目的进程 ID (PID)&#xff1a; 假设你知道项目的进程名称&#xff0c;例如 my_project&#xff0c;你可以使用 p…

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

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

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

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

Java的Cpp本地库调用

叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.设置项目文件结构2.生成 Cpp 头文件3.编写 Cpp 程序实现4.生成本…

TS相较于JS有什么优缺点

TypeScript&#xff08;TS&#xff09;是JavaScript的一个超集&#xff0c;它添加了静态类型检查和编译时的强大功能&#xff0c;目的是提高代码质量和维护性。相较于JavaScript&#xff0c;TS的主要优点和缺点如下&#xff1a; 优点&#xff1a; 类型安全性&#xff1a;通过…

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

有的时候&#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) {//最后一位不存…

介绍一些编程语言— Mojo 语言

介绍一些编程语言— Mojo 语言 Mojo 语言 Mojo 官网 GitHub 简介 Mojo 语言是一种专为编写人工智能软件设计的编程语言&#xff0c;由 Modular Inc. 开发并宣布在 2024 2024 2024 年 3 3 3 月 29 29 29 日开源其核心组件。Mojo 旨在提供一种易于使用的语法&#xff0c;类…

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

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

深度学习落地实战:人流量监测

前言 大家好,我是机长 本专栏将持续收集整理市场上深度学习的相关项目,旨在为准备从事深度学习工作或相关科研活动的伙伴,储备、提升更多的实际开发经验,每个项目实例都可作为实际开发项目写入简历,且都附带完整的代码与数据集。可通过百度云盘进行获取,实现开箱即用 …

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

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

HTTP请求五类状态码详细介绍,以及部分处理思路

HTTP请求状态码分为五类&#xff1a; 一. 消息系列 二 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列 302:临时转移成功&#xff0c;请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。 以下是常见的一些状态码&#xff1a; 1xx&…

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

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