当前位置: 首页 > news >正文

蓝桥杯单片机STC15F2K60S2第十四届省赛代码详细讲解(附完整代码)

        本文是写第十四届的蓝桥杯省赛代码,新手教程作者也写了一篇,欢迎去观看作者专门为新手写的一篇。也欢迎收录该专栏。

蓝桥杯单片机STC15F2K60S2第十三届省赛代码详细讲解(附完整代码)

专栏: 

        蓝桥杯单片机

        然后接下来是正文:

试题:

 

 

 

 

 iic.c

/*	#   I2C代码片段说明1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码调试和修改。
*/
#include "iic.h"
#include "intrins.h"
#define DELAY_TIME	5//
static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}//
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}//
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}//
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}//
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}//
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}//
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}//输出ADC的值,用来计算PCF8591的分压结果,实现亮暗检测
unsigned char ADC_Output(char channel)
{unsigned char adc_val;	//输出的ADC的值I2CStart();I2CSendByte(0x90);		//开启ADC通道,0x90是ADC的设备地址,指定为写操作I2CWaitAck();I2CSendByte(channel);	//指定要读的ADC通道 0x41是光敏电阻I2CWaitAck();I2CStart();I2CSendByte(0x91);		//指定为读操作I2CWaitAck();adc_val=I2CReceiveByte();I2CSendAck(1);I2CStop();return adc_val;
}

iic.h

#ifndef  __IIC_H__
#define  __IIC_H__#include <stc15.h>#define sda  P21
#define scl  P20unsigned char ADC_Output(char channel);
#endif

display.c

#include <STC15F2K60S2.H>code unsigned char Show_Number[]={
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, //9
0x88, //A
0x83, //b
0xc6, //C  12
0xa1, //d
0x86, //E
0x8e, //F 15
0xbf,  // - 16
0x89,  // H 17
0x8C,  // P 18
0x88  // R  19
};//0到9的浮点小数
code unsigned char Show_FNumber[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};//延时函数
void Delayms(int ms)	//@12.000MHz
{unsigned char data i, j;int k=0;for(k=0;k<ms;k++){i = 12;j = 169;do{while (--j);} while (--i);}
}void Select_Hc573(unsigned char Number)
{switch(Number){case 4:P2=(P2 & 0x1f) | 0x80;break;	//LED驱动case 5:P2=(P2 & 0x1f) | 0xA0;break; //蜂鸣器和继电器case 6:P2=(P2 & 0x1f) | 0xC0;break; //数码管位选case 7:P2=(P2 & 0x1f) | 0xE0;break; //数码管段选} //将P2位清零,不然数码管会闪烁P2 =(P2 & 0x1f) | 0x00;
}//系统初始化,将蜂鸣器和数码管关闭
void System_Init(void)
{P0=0x00;Select_Hc573(5);Select_Hc573(6);P0=0xff;Select_Hc573(4);
}void Display_Number(unsigned char Pos,unsigned char Data)
{P0 = 0x01 << Pos-1;Select_Hc573(6);P0 = Show_Number[Data];Select_Hc573(7);Delayms(1);P0 =0x01 << Pos -1;Select_Hc573(6);P0 =0xff;Select_Hc573(7);
}//显示小数
void Display_FNumber(unsigned char Pos,unsigned char Data)
{P0 = 0x01 << Pos -1;Select_Hc573(6);P0=Show_FNumber[Data];Select_Hc573(7);Delayms(1);P0 = 0x01 << Pos -1;Select_Hc573(6);P0=0xff;Select_Hc573(7);Delayms(1);
}//显示LED,ON_OFF 1为开启,0为关闭
void Display_LED(unsigned char Pos,unsigned ON_OFF)
{static unsigned char Temp=0xff;if(ON_OFF){switch(Pos){case 1: Temp =Temp&0xfe;break;case 2: Temp =Temp&0xfd;break;case 3: Temp =Temp&0xfb;break;case 4: Temp =Temp&0xf7;break;case 5: Temp =Temp&0xef;break;case 6: Temp =Temp&0xde;break;}}else {switch(Pos){case 1:Temp=Temp | 0x01;break;case 2:Temp=Temp | 0x02;break;case 3:Temp=Temp | 0x04;break;case 4:Temp=Temp | 0x08;break;case 5:Temp=Temp | 0x10;break;case 6:Temp=Temp | 0x20;break;}}P0=Temp;Select_Hc573(4);
}

display.h 

#ifndef		__DISPLAY_H__
#define		__DISPLAY_H__void SelectHc573(unsigned char Number);
void System_Init(void);
void Display_Number(unsigned char Pos,unsigned char Data);
void Display_FNumber(unsigned char Pos,unsigned char Data);
void Display_LED(unsigned char Pos,unsigned ON_OFF);
void Delayms(int ms);#endif

ds1302.c

/*	# 	DS1302代码片段说明1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码调试和修改。
*/								
#include "ds1302.h"
#include <STC15F2K60S2.H>sbit SCK = P1^7;		
sbit SDA = P2^3;		
sbit RST = P1^3; //
void Write_Ds1302(unsigned  char temp) 
{unsigned char i;for (i=0;i<8;i++)     	{ SCK = 0;SDA = temp&0x01;temp>>=1; SCK=1;}
}   //
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{RST=0;	_nop_();SCK=0;	_nop_();RST=1; 	_nop_();  Write_Ds1302(address);	Write_Ds1302(dat);		RST=0; 
}//
unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;RST=0;	_nop_();SCK=0;	_nop_();RST=1;	_nop_();Write_Ds1302(address);for (i=0;i<8;i++) 	{		SCK=0;temp>>=1;	if(SDA)temp|=0x80;	SCK=1;} RST=0;	_nop_();SCK=0;	_nop_();SCK=1;	_nop_();SDA=0;	_nop_();SDA=1;	_nop_();return (temp);			
}//写保护
#define WP 		0x8e
#define W_Sec 	0x80
#define R_Sec	0x81
#define W_Min	0x82
#define R_Min	0x83
#define W_Hour	0x84
#define R_Hour	0x85//写初始化时间到ds1302
void WriteDate(ds1302 *date)
{unsigned hour, min, sec;hour =date->Hour/10*16 + date->Hour%10;	//十进制转化为十六进制min=date->Min/10*16 + date->Min%10;sec=date->Sec/10*16 + date->Sec%10;//取消写保护Write_Ds1302_Byte(WP,0x00);Write_Ds1302_Byte(W_Hour,hour);Write_Ds1302_Byte(W_Min,min);Write_Ds1302_Byte(W_Sec,sec);//开启写保护Write_Ds1302_Byte(WP,0x00);
}//读取当前时间
ds1302 ReadTime()
{unsigned char hour,min,sec;ds1302 date;hour = Read_Ds1302_Byte(R_Hour);min = Read_Ds1302_Byte(R_Min);sec = Read_Ds1302_Byte(R_Sec);date.Hour = hour/16*10 + hour%16;	//十六进制转化为十进制date.Min = min/16*10 + min%16;date.Sec =sec/16*10 + sec%16;return date;
}

ds1302.h

#ifndef  __DS1302_H__
#define  __DS1302_H__#include "intrins.h"
#include <STC15F2K60S2.H>//#define SCK		P17
//#define SDA		P23
//#define RST		P13//定义ds1302的数据类型
typedef struct{unsigned char Hour;unsigned char Min;unsigned char Sec;
}ds1302;void WriteDate(ds1302 *date);
ds1302 ReadTime();#endif

onrwire.c

/*	# 	单总线代码片段说明1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码调试和修改。
*/
#include "onewire.h"
//
void Delay_OneWire(unsigned int t)  
{unsigned char i;while(t--){for(i=0;i<12;i++);}
}//
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;Delay_OneWire(1);if(DQ){dat |= 0x80;}	    Delay_OneWire(5);}return dat;
}//
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ;     Delay_OneWire(5);return initflag;
}unsigned char Read_Temperature(void)
{unsigned temp,th,tl;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);init_ds18b20();			//开启温度转换Write_DS18B20(0xcc);Write_DS18B20(0xbe);	//开启温度读取tl = Read_DS18B20();th = Read_DS18B20();temp = (th *256 + tl) * 0.0625;return temp;
}

onewire.h

#ifndef  __ONEWIRE_H__
#define  __ONEWIRE_H__#include <STC15F2K60S2.H>#define DQ  P14
unsigned char Read_Temperature(void);
#endif

main.c

#include <STC15F2K60S2.H>
#include "display.h"
#include "ds1302.h"
#include "onewire.h"
#include "iic.h"
#include "string.h"ds1302 Date={23,59,50};unsigned int Freq;		//NE555的频率
unsigned char Wet_Val;	//湿度的数据
unsigned char Adc_Val;	//ADC的值
unsigned char Collect_Flag=1;	//暗亮环境的标志,1表示处于亮环境
unsigned char i;	//数组的索引
//unsigned char temp=0;	//温度
unsigned char count2,sec;	//暗环境时的计时,3秒后退出
unsigned char show;		//0为温湿度界面的显示,1显示Show_Switch对应的界面
unsigned char t[3],w[3]; //用于保存采集的温度、湿度,只保留3组
unsigned char L5_Flag,L6_Flag,L4_Flag;	//LED的标志为 1为开启LED
unsigned char count_trigger=0; //用来记录触发的次数
unsigned char last_hour,last_min;	//最近一次触发的时间
unsigned char Temp_Para=30;	//温度参数
unsigned char Key_Val;		//用来记录按键
unsigned char Switching=1;	//界面切换 1.时间显示界面 2.回显界面 3.参数显示
unsigned char S5_Flag=1;	//回显界面下,切换温度、湿度、时间回显
unsigned char Count3,Count_Sec;	//用于S9长按两秒的计时
unsigned char Temping=0;		//温度
unsigned char Flag_100ms;		//0.1s的标志位,L4以0.1秒为间隔进行闪烁
unsigned char Flag_1s;			//用来表示1s时间到,统计NE555的频率
unsigned char Count;			//用于定时器的中断定时void Key_Board(void);
void Show_Switch(void);
void Timer0_Init(void);		//@12.000MHz;
void Timer1_Init(void);		//10毫秒@12.000MHz
void Timer2_Init(void);	//20毫秒@12.000MHzvoid main()
{System_Init();WriteDate(&Date);Timer0_Init();Timer1_Init();Timer2_Init();while(1){		if(Freq<2000 && Freq>200)Wet_Val=2/45*Freq + 1.11;else if(Freq == 2000)Wet_Val = 90;else if(Freq == 200)Wet_Val = 10;else Wet_Val =0;		//无效数据Adc_Val = ADC_Output(0x01);		//读取ADC的值if(Adc_Val > 100)	Collect_Flag=1;		//ADC值大于100表示处于亮环境if(Adc_Val <=100 && Collect_Flag ==1)	//触发数据测量条件{Collect_Flag=0; AUXR |= 0x10;	//启动定时器2show =1;t[i]=Temping;if(Wet_Val != 0){ w[i] = Wet_Val; L5_Flag=0; }else {L5_Flag=1;}	//采集到无效数据,无效数据不保存,点亮LED5count_trigger++;if(i==0 && count_trigger>=2)	//本次采集大小与上次比较{if(Temping > t[2] && Wet_Val > w[2])	L6_Flag=1;	//采集到的温度湿度均升高,LED6点亮else L6_Flag=0;}else L6_Flag=1;if(i !=0 && count_trigger>=2){if(Temping >t[i-1]&&Wet_Val>w[i-1])	L6_Flag=1;	//温湿度都大于上次else L6_Flag=0;}else L6_Flag=0;i++;if(i>3) i=0;last_hour = Date.Hour;last_min = Date.Min;if(Temping > Temp_Para)	L4_Flag=1;	//采集温度大于温度参数,LED4点亮else L4_Flag=0;}Key_Board();	//按键检测函数Show_Switch();	//所有显示函数放在此函数内,为了使按键按下,不影响显示内容}
}//按键检测函数
void Key_Board(void)
{unsigned char Key;//P44为第一列按键,P3低四位为每一行,第一行为0x01P44 =0; P42=1;P3 |=0x0f;	//将每一行置1Key= P3; Key = Key & 0x0c;if(Key != 0x0c){Delayms(5);		//消抖if(Key != 0x0c){switch(Key){case 0x04: Key_Val = 4; Switching++;if(Switching > 3){Switching =1;S5_Flag=1;}								break;	case 0x08: Key_Val=5;if(Switching == 2)	//回显界面{S5_Flag++;}if(S5_Flag > 3)S5_Flag=1;break;}}	while(Key != 0x0c){Key = P3; Key = Key & 0x0c;Show_Switch();}}P44=1;P42=0;P3 |= 0x0f;Key = P3; Key &=0x0c;if(Key !=0x0c){Delayms(5);if(Key != 0x0c){switch(Key)		//S8++ S9--{case 0x04: Key_Val=8;if(Switching == 3) Temp_Para++;if(Temp_Para > 99) Temp_Para=0;break;case 0x08: Key_Val=9;if(Switching == 3) Temp_Para--;if(Temp_Para == 255) Temp_Para =99;break;}if(S5_Flag == 3) { Count3 = 0; Count_Sec = 0;}	//时间回显下,S9按下两秒计时开始}while(Key != 0x0c){Key = P3; Key = Key & 0x0c;Show_Switch();if(Count_Sec >= 2 && S5_Flag == 3) //时间回显界面,长按S9两秒,数据清零{memset(t,0,sizeof(t)); memset(w,0,sizeof(w));	//将数组里的全部元素清零count_trigger=0;	//触发次数清零}}}
}unsigned char max(unsigned char p[])
{unsigned char i;unsigned char Max=p[0];for(i=1;i<3;i++){if(p[i] > Max)Max=p[i];}return Max;
}void Show_Switch(void)
{//最大温度和湿度unsigned char t_max,w_max;int t_avr,w_avr;	//温湿度平均值Date= ReadTime();Temping = Read_Temperature();t_max=max(t); w_max=max(w);t_avr = (t[0] + t[1]+t[2])/3.0*10;w_avr=(w[0]+w[1]+w[2])/3.0*10;if(show !=1){if(Switching ==1)	//时间显示界面{Display_Number(1,Date.Hour/10);Display_Number(2,Date.Hour%10);Display_Number(3,16);Display_Number(4,Date.Min/10);Display_Number(5,Date.Min%10);Display_Number(6,16);Display_Number(7,Date.Sec/10);Display_Number(8,Date.Sec%10);}if(Switching == 2)	//回显界面,默认温度回显C{switch(S5_Flag)	//温度回显C,湿度回显H,时间回显F{//温度回显case 1: Display_Number(1,12);if(count_trigger !=0 )	//触发次数不为0{Display_Number(3,t_max/10);Display_Number(4,t_max%10);	//最大温度Display_Number(5,16);Display_Number(6,t_avr/100);Display_FNumber(7,t_avr%100/10);Display_Number(8,t_avr%10);}break;case 2: Display_Number(1,17);	//Hif(count_trigger != 0){Display_Number(3,w_max/10);Display_Number(4,w_max%10);Display_Number(5,16);Display_Number(6,w_avr/100);Display_FNumber(7,w_avr%100/10);Display_Number(8,w_avr%10);}break;case 3:Display_Number(1,15);Display_Number(2,count_trigger/10);Display_Number(3,count_trigger%10);	//触发次数显示if(count_trigger != 0){Display_Number(4,last_hour/10);Display_Number(5,last_hour%10);Display_Number(6,16);Display_Number(7,last_min/10);Display_Number(8,last_min%10);}break;}}if(Switching == 3)	//参数设置界面{Display_Number(1,18);Display_Number(7,Temp_Para/10);Display_Number(8,Temp_Para%10);}}else 	//温湿度显示界面,每次显示3秒后自动退出{Display_Number(1,14);Display_Number(4,Temping/10);Display_Number(5,Temping%10);Display_Number(6,16);//温度if(Wet_Val != 0){Display_Number(7,Wet_Val/10);Display_Number(8,Wet_Val%10);}else {Display_Number(7,19);Display_Number(8,19);}}//LED显示switch(Switching){case 1: Display_LED(1,1);Display_LED(2,0);Display_LED(3,0);break;case 2: Display_LED(2,1);Display_LED(1,0);Display_LED(3,0);break;case 3: Display_LED(3,1);Display_LED(1,0);Display_LED(2,0);break;}if(L4_Flag ==1){if(Flag_100ms) Display_LED(4,1);else Display_LED(4,0);}else Display_LED(4,0);if(L5_Flag == 1){Display_LED(5,1);} else Display_LED(5,0);if(L6_Flag == 1){Display_LED(6,1);} else Display_LED(6,0);
}void Timer0_Init(void)		//@12.000MHz
{AUXR &= 0x7F;			//定时器时钟12T模式TMOD &= 0xF0;			//设置定时器模式TMOD |=0x04;TL0 = 0;				//设置定时初始值TH0 = 0;				//设置定时初始值TF0 = 0;				//清除TF0标志ET0 = 1;				//使能定时器0中断TR0 = 1;				//定时器0开始计时
}void Timer1_Init(void)		//10毫秒@12.000MHz
{AUXR &= 0xBF;			//定时器时钟12T模式TMOD &= 0x0F;			//设置定时器模式TL1 = 0xF0;				//设置定时初始值TH1 = 0xD8;				//设置定时初始值TF1 = 0;				//清除TF1标志TR1 = 1;				//定时器1开始计时ET1 = 1;				//使能定时器1中断EA =1;					//使能全局中断,确保定时器1能正常中断
}void Timer1(void) interrupt 3
{Count++;Count3++;if(Count == 100){Count =0;Flag_1s=1;}if(Count % 10 == 0){Flag_100ms=~Flag_100ms;}if(Flag_1s == 1){Flag_1s=0; TR0 =0;Freq = TH0*256 + TL0;	//定时器0是用P34来读取NE555的频率TH0=0;TL0=0;TR0=1;}if(Count3 == 100){Count3=0;Count_Sec++;}
}void Timer2_Init(void)		//20毫秒@12.000MHz
{AUXR &= 0xFB;			//定时器时钟12T模式T2L = 0xE0;				//设置定时初始值T2H = 0xB1;				//设置定时初始值
//	AUXR |= 0x10;			//定时器2开始计时AUXR &= 0xef;IE2 |= 0x04;			//使能定时器2中断
}void Timer2(void) interrupt 12
{count2++;if(count2 == 50)	//1000毫秒{count2=0;sec++;if(sec == 3){sec=0;show =0;		//显示Show_Switch对应的界面AUXR &= 0xef;	//关闭定时器2}	}
}

相关文章:

蓝桥杯单片机STC15F2K60S2第十四届省赛代码详细讲解(附完整代码)

本文是写第十四届的蓝桥杯省赛代码&#xff0c;新手教程作者也写了一篇&#xff0c;欢迎去观看作者专门为新手写的一篇。也欢迎收录该专栏。 蓝桥杯单片机STC15F2K60S2第十三届省赛代码详细讲解&#xff08;附完整代码&#xff09; 专栏&#xff1a; 蓝桥杯单片机 然后接下来…...

[免费]SpringBoot+Vue智慧校园(校园管理)系统[论文+源码+SQL脚本]

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue智慧校园(校园管理)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue智慧校园(校园管理)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅猛发展&#xff0c…...

景区导航地图怎么实现?基于LBS与3D GIS的智慧景区导航导览系统技术路线

随着经济的发展和人们物质生活水平改善,居民的旅游需求呈现多元化和个性化&#xff0c;自助旅游的人越来越多。许多游客在旅游行程中需要随时随地了解旅游景点有关的各类信息&#xff0c;如旅游景点介绍、推荐路线、地图导航等&#xff0c;合理规划和安排旅游线路。正是为了应对…...

RedisIO多路复用

一、多路复用要解决的问题: 并发多客户端连接&#xff0c;在多路复用之前的处理方案是同步阻塞网络IO模型&#xff0c;这种模型的特点就是用一个进程来处理一个网络连接。优点在于比较简单&#xff0c;缺点在于性能较差&#xff0c;每个用户请求到来都得占用一个进程来处理&am…...

C++的相关习题(2)

初阶模板 下面有关C中为什么用模板类的原因&#xff0c;描述错误的是? ( &#xff09; A.可用来创建动态增长和减小的数据结构 B.它是类型无关的&#xff0c;因此具有很高的可复用性 C.它运行时检查数据类型&#xff0c;保证了类型安全 D.它是平台无关的&#xff0c;可移植…...

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法&#xff0c;了解了vector当中各个函数该如何使用&#xff0c;在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的&#xff0c;但同时也发现vector当中一些函数以及接口是和string不同的…...

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…...

OpenCV ORB角点检测匹配和偏移计算

OpenCV ORB角点检测匹配和偏移计算 1. 简介2. ORB角点检测匹配和偏移计算2.1. 创建平移图片2.2. ORB角点检测2.3. ORB角点匹配2.4. 计算变换矩阵 1. 简介 首先通过 cv2.ORB_create 创建ORB检测器 orb&#xff0c; 然后通过 orb.detectAndCompute 检测两张图片获得ORB角点&…...

图文详解ChatGPT-o1完成论文写作的全流程

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 本月中旬OpenAI发布了OpenAI o1系列新的AI模型。 据OpenAI介绍&#xff0c;这些模型旨在花更多时间思考后再做出反应&#xff0c;就像人一样。通过训练&#xff0c;它们学会改进思维过…...

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具&#xff0c;助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色&#xff0c;它作为一站式设计平台&#xff0c;功能更全面。即时设计拥有纯中文的…...

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…...

RHCSA笔记三

第二章 linux中执行命令 命令格式 命令分为两类 内置命令&#xff1a;由 shell 程序自带的命令 外部命令&#xff1a;有独立的可执行程序文件&#xff0c;文件名即命令名 格式 主命令 参数 操作对象 # 注意&#xff1a; 下面是对于命令的语法的一些符号的说明&#xff1…...

【python】sorted() list.sort()

文章目录 sorted()和list.sort()sorted 函数sorted()根据键对字典排序根据字典的键排序根据字典的值排序将排序结果转换回字典 list.sort() 方法总结 keylambda student: student[age] sorted()和list.sort() 在Python中&#xff0c;sorted 函数和 list.sort() 方法都可以用来…...

训练集alpaca、sharegpt格式

LLaMA-Factory微调支持的格式 支持 alpaca 格式和 sharegpt 格式的数据集。 Alpaca格式 格式: [{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","syst…...

Hive的数据存储格式

目录 一、前言 二、存储格式 2.1、文本格式&#xff08;TextFile&#xff09; 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件&#xff08;ORCFile&#xff09; 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…...

Linux Rsyslog 配置

1、Linux Rsyslog客户端配置 1&#xff09;安装rsyslog yum install rsyslog 2&#xff09;启用TCP或UDP传输 vim /etc/rsyslog.conf# Provides UDP syslog reception #若启用UDP进行传输&#xff0c;则取消下面两行的注释 #$ModLoad imudp #$UDPServerRun 514# Provide…...

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦&#xff0c;提前祝大家新年快乐 完整代码下载地址&#xff1a;https://download.csdn.net/download/ture_mydream/89926458...

模型训练识别手写数字(二)

模型训练识别手写数字&#xff08;一&#xff09;使用手写数字图像进行模型测试 一、生成手写数字图像 1. 导入所需库 import cv2 import numpy as np import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布 canvas np.z…...

深入Vue2

frontend Vue2 学习内容参考 /在线运行 Element 学习内容参考 /视频教学 vue2 1. vue 实例 当一个 Vue 实例被创建时&#xff0c;它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中 但是当使用Object.freeze()&#xff0c;会阻止修改现有的 property&#x…...

opencv-rust 系列3: Create_mask

前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 调试方法可参见前文. 一. 这个程序还是有点难度的, 关键点在于: 创建了遮罩. 直接调用一个函数, 还是很简单的.窗口事件处理. 注册窗口回调函数, 用以处理鼠标事件进程同步和互斥锁. 为…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...