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

Go语言初识

一、Go语言概述 Go语言是为了取代C和java的地位&#xff0c;既要保留C的简洁&#xff0c;也追求java的规模化开发 并行及分布式的支持&#xff0c;使得开发多核及多机器集群程序如同单机一样简单 Go语言从语言级别支持协程&#xff08;goroutine, 轻量级线程&#xff09;,Go语言…...

Android Activity SingleTop启动模式使用场景

通知栏 当用户点击通知栏中的通知时,可以使用单顶启动模式来打开对应的活动,并确保只有一个实例存在。 简单集成极光推送 创建应用 获取appkey参数 切换到极光工作台 极光sdk集成 Project 根目录的主 gradle 配置 Module 的 gradle 配置 Jpush依赖配置 配置推送必须…...

PHP 代码执行相关函数

函数 说明 示例代码 ${} 用于复杂的变量解析&#xff0c;通常在字符串内用来解析变量或表达式。可以配合 eval 或其他动态执行代码的功能&#xff0c;用于间接执行代码。 eval(${flag}); eval() 用于执行一个字符串作为 PHP 代码。可以执行任何有效的 PHP 代码片段。没有…...

五周年,继续破浪前行

五周年&#xff0c;TapData 再一次带着自己的“乘风破浪”大队&#xff0c;在一个阳光明媚的日子里&#xff0c;把生日过在了海上。 头顶日升日落&#xff0c;这条属于全体 Tap-pers 的航船&#xff0c;再次校准航向&#xff0c;在船长的带领下&#xff0c;驶向下一个晴好的明…...

【操作系统】Linux之进程管理一

第1关&#xff1a;获取进程常见属性 ret.pidgetpid(); ret.ppidgetppid(); 第2关&#xff1a;进程创建操作-fork pid_t pid fork(); if(pid-1) printf("创建进程失败&#xff01;"); else if(pid0) printf("Children"); else printf("Parent"); …...

C语言_数据在内存中的存储

1. 整数在内存中的存储 计算机中的整数有三种2进制表示方法 &#xff1a;原码、反码、补码。 三种表示方式均有符号位和数值位两个部分&#xff0c;最高一位的是符号位&#xff0c;剩下的都是数值位。符号位用“0”表示“正”&#xff0c;用“1”表示“负”。 正数的原、反、…...

华为原生鸿蒙操作系统:我国移动操作系统的新篇章

华为原生鸿蒙操作系统&#xff1a;我国移动操作系统的新篇章 引言 在移动操作系统领域&#xff0c;苹果iOS和安卓系统一直占据主导地位。然而&#xff0c;随着华为原生鸿蒙操作系统的正式发布&#xff0c;这一格局正在发生深刻变化。作为继苹果iOS和安卓系统后的全球第三大移动…...

队列的基本操作(数据结构)

1.实验内容&#xff1a; 编写一个程序sqqueue.cpp&#xff0c;实现环形队列(假设栈中元素类型ElemType 为 char)的各种基本运算&#xff0c;并在此基础上设计一个程序exp4_1.cpp&#xff0c;完成如下功能: 2.实验步骤&#xff1a; (1)初始化队列q (2)判断队列q是否非空 (3…...

linux开机自启动三种方式

方式一、 1&#xff1a;rc.local 文件 1、执行命令&#xff1a;编辑 “/etc/rc.local” vi /ect/rc.local 2、然后在文件最后一行添加要执行程序的全路径。 例如&#xff0c;每次开机时要执行一个 hello.sh&#xff0c;这个脚本放在 / usr 下面&#xff0c;那就可以在 “/et…...

AI创作者与人类创作者的协作模式

公主请阅 1. AI创作者的崛起1.1 AI创作者的工作原理1.2 AI创作者的优势 2. 人类创作者的独特价值2.1 创造性与情感2.2 伦理与价值观2.3 文化与背景 3. AI与人类的协作模式3.1 协同创作3.2 内容编辑3.3 数据驱动的创作3.4 跨媒体协作 4. AI与人类协作的挑战4.1 技术局限性4.2 版…...