基于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.rhkb.cn/news/378918.html

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

相关文章

【机器学习入门】拥抱人工智能,从机器学习开始

拥抱人工智能&#xff0c;从机器学习开始 目录&#xff1a; 1. 机器学习&#xff1a;一种实现人工智能的方法 2. 机器学习算法&#xff1a;是使计算机具有智能的关键 3. Anaconda&#xff1a;初学Python、入门机器学习的首选 4. 总结 转载链接&#xff1a; 文章-阿里云开发者社…

基于嵌入式Linux的高性能车载娱乐系统设计与实现 —— 融合Qt、FFmpeg和CAN总线技术

随着汽车智能化的发展&#xff0c;车载娱乐系统已成为现代汽车的标配。本文介绍了一个基于Linux的车载娱乐系统的设计与实现过程。该系统集成了音视频娱乐、导航、车辆信息显示等功能&#xff0c;旨在提供安全、便捷、丰富的驾驶体验。 1. 项目概述 随着汽车智能化的发展&…

十五、【机器学习】【监督学习】- 神经网络回归

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

水利行业的智慧革命:深度剖析智慧水利解决方案,看其如何以科技力量提升水资源管理效率,保障水生态安全

目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 感知层&#xff1a;全面监测&#xff0c;精准感知 2. 网络层&#xff1a;互联互通&#xff0c;信息共享 3. 平台层&#xff1a;数据分析&#xff0c;智能决策 4. 应用层&#xff1a;精准施策&#xff0…

创建通用JS公共模块并发布至npm

title: 创建通用JS公共模块并发布至npm tags: UMD rollup verdaccio npm categories: 模块化 概要内容 创建&#xff1a;JS公共模块 打包&#xff1a;使用rollup 打包公共模块 发布&#xff1a;js公共模块至verdaccio平台 发布&#xff1a;js公共模块至npm平台 如何创建JS公共模…

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

0. 综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频&#xff1a; https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解&#xff1a; https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…

前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器

JavaScript 中的前瞻断言&#xff08;lookahead&#xff09;和后瞻断言&#xff08;lookbehind&#xff09;相信用过的小伙伴就知道它的威力了&#xff0c;在一些特定的需求场景下&#xff0c;可以做到四两拨千斤的作用&#xff0c;今天让我们来盘点一下在 JavaScript 正则表达…

微信小程序与本地MySQL数据库通信

微信小程序与本地MySQL数据库通信 因为本地MySQL服务器没有域名&#xff0c;也没有进行相应的请求操作封装&#xff0c;因此微信小程序没办法和数据库通信。 但是对于开发人员来说&#xff0c;没有数据库&#xff0c;那还能干撒&#xff1f;虽然我尝试过用json-server&#x…

简单搭建卷积神经网络实现手写数字10分类

搭建卷积神经网络实现手写数字10分类 1.思路流程 1.导入minest数据集 2.对数据进行预处理 3.构建卷积神经网络模型 4.训练模型&#xff0c;评估模型 5.用模型进行训练预测 一.导入minest数据集 MNIST--->raw--->test-->(0,1,2...) 10个文件夹 MNIST--->raw-…

在pycharm 2023.2.1中运行由R语言编写的ipynb文件

在pycharm 2023.2.1中运行由R语言编写的ipynb文件 背景与目标&#xff1a; 项目中包含由R语言编写的ipynb文件&#xff0c;希望能在pycharm中运行该ipynb文件。 最终实现情况&#xff1a; 未能直接在pycharm中运行该ipynb文件&#xff0c;但是替代的实现方法有&#xff1a;…

百度网盘Android一二面凉经(2024)

百度网盘Android一二面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《百度网盘Android一二面凉经(2024)》。 面试职位: 网盘主端研发组_Android高级研…

MyPostMan 迭代文档管理、自动化接口闭环测试工具(自动化测试篇)

MyPostMan 是一款类似 PostMan 的接口请求软件&#xff0c;按照 项目&#xff08;微服务&#xff09;、目录来管理我们的接口&#xff0c;基于迭代来管理我们的接口文档&#xff0c;文档可以导出和通过 url 实时分享&#xff0c;按照迭代编写自动化测试用例&#xff0c;在不同环…

CSS3实现提示工具的渐入渐出效果及CSS3动画简介

上一篇文章用CSS3实现了一个提示工具&#xff0c;本文介绍如何利用CSS3实现提示工具以渐入的方式呈现&#xff0c;以渐出的方式消失。 CSS3主要可以通过两个样式来实现动画效果&#xff1a;animation和transition。 其中&#xff0c;animation需要自己定义一组关键帧从而实现…

在 Navicat BI 创建自定义字段:类型更改字段

早在 Navicat 17 的预览版中&#xff0c;我们就已经介绍了一些新的商业智能&#xff08;BI&#xff09;功能&#xff0c;即图表互动和计算字段。需要说明的是&#xff0c;计算字段不是 Navicat BI 中唯一可用的自定义字段类型。事实上&#xff0c;有五种&#xff1a;类型改变、…

@google/model-viewer 导入 改纹理 (http-serve)

导入模型 改纹理 效果图 <template><div><h1>鞋模型</h1><model-viewerstyle"width: 300px; height: 300px"id"my-replace-people"src"/imgApi/Astronaut.glb"auto-rotatecamera-controls></model-viewer>&…

C++——函数模板和类模板

目录 一、函数模板 二、类模板 一、函数模板 当我们没有使用到模板的时候&#xff0c;我们如果要交换两个数据&#xff0c;那么我们就要根据交换的数据的类型&#xff0c;写出例如以下的函数&#xff1a; void Swap(int& a, int& b) {int tmp a;a b;b tmp; }void S…

HardeningMeter:一款针对二进制文件和系统安全强度的开源工具

关于HardeningMeter HardeningMeter是一款针对二进制文件和系统安全强度的开源工具&#xff0c;该工具基于纯Python开发&#xff0c;经过了开发人员的精心设计&#xff0c;可以帮助广大研究人员全面评估二进制文件和系统的安全强化程度。 功能特性 其强大的功能包括全面检查各…

appium2.0 执行脚本遇到的问题

遇到的问题&#xff1a; appium 上的日志信息&#xff1a; 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上&#xff0c; 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

react基础样式控制

行内样式 <div style{{width:500px, height:300px,background:#ccc,margin:200px auto}}>文本</div> class类名 注意&#xff1a;在react中使用class类名必须使用className 在外部src下新建index.css文件写入你的样式 .fontcolor{color:red } 在用到的页面引入…

C#学习-刘铁猛

文章目录 1.委托委托的具体使用-魔板方法回调方法【好莱坞方法】&#xff1a;通过委托类型的参数&#xff0c;传入主调方法的被调用方法&#xff0c;主调方法可以根据自己的逻辑决定调用这个方法还是不调用这个方法。【演员只用接听电话&#xff0c;如果通过&#xff0c;导演会…