STC89C52單片機學習——第38節: [17-2] 紅外遙控紅外遙控電機

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難,但我還是想去做!

本文寫于:2025.03.30

51單片機學習——第38節: [17-2] 紅外遙控&紅外遙控電機

  • 前言
  • 開發板說明
  • 引用
  • 解答和科普
  • 一、
  • 二、紅外遙控接受
  • 三、紅外遙控直流電機
  • 總結

前言

? ?本次筆記是用來記錄我的學習過程,同時把我需要的困難和思考記下來,有助于我的學習,同時也作為一種習慣,可以督促我學習,是一個激勵自己的過程,讓我們開始51單片機的學習之路。
? ?歡迎大家給我提意見,能給我的嵌入式之旅提供方向和路線,現在作為小白,我就先學習51單片機了,就跟著B站上的江協科技開始學習了.
? ?在這里會記錄下江協科技51單片機開發板的配套視頻教程所作的實驗和學習筆記內容,因為我之前有一個開發板,我大概率會用我的板子模仿著來做.讓我們一起加油!
? ?另外為了增強我的學習效果:每次筆記把我不知道或者問題在后面提出來,再下一篇開頭作為解答!

開發板說明

? ?本人采用的是慧凈的開發板,因為這個板子是我N年前就買的板子,索性就拿來用了。不再另外購買視頻中的普中開發板了。
? ?原理圖如下
在這里插入圖片描述
視頻中的都用這個開發板來實現,如果有資源就利用起來。
仔細看了看:開發板的晶振為:11.0592Mhz;12Mhz晶振是用來給CH340G芯片外置晶振;

下圖是實物圖
在這里插入圖片描述

引用

51單片機入門教程-2020版 程序全程純手打 從零開始入門
還參考了下圖中的書籍:
手把手教你學51單片機(C語言版)
在這里插入圖片描述
STC89C52手冊
在這里插入圖片描述

解答和科普

一、

1.1測試中斷的執行

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "I2C.h"
#include "PCF8591.h"
#include "Init.h"unsigned char Num;
void main()
{LCD_Init();LCD_ShowString(1,1,"A");Nixie_OFF();DianZhengGuan();IT0=1;		//下降沿觸發IE0=0;		//中斷標志位EX0=1;		//打開中斷EA=1;		//打開所有中斷PX0=1;		//優先級while(1){LCD_ShowNum(2,1,Num,3);}
}void Into_Routine(void)  interrupt 0
{
Num++;
}

實驗現象:

外部中斷0低電平觸發

外部中斷0下降沿觸發

1.2紅外解碼
在這里插入圖片描述
如何把東西解碼出來,包括讀取時間值進行計時,還有中斷。
狀態機:定義一個變量表示當前的狀態,0表示空閑狀態,然后當他收到下降沿之后,把定時器打開,開始計時,再把狀態轉為1狀態,尋找Start或者Repeat頭部的這一個信號,1狀態再來個下降沿的話,繼續判斷狀態,判斷中間的時間,如果是起始信號,就把狀態轉化為2狀態,2狀態定義為開始解碼1012總共32,如果是重發,就把重發標志位置1,還有變量緩存區用來存取,還會置為正確是否。
1.Timer0

#include <REGX52.H>void Timer0_Init(void)		//1毫秒@11.0592MHz
{//	TMOD不能復制,如果同時使用定時器1和0,它會覆蓋淹沒,TMOD &= 0xF0;		//設置定時器模式TMOD |= 0x01;		//設置定時器模式TL0 = 0;		//設置定時初值TH0 = 0;		//設置定時初值TF0 = 0;		//清除TF0標志TR0 = 0;		//定時器0不計時
}void Timer0_SetCounter(unsigned char Value)
{TH0=Value/256;TL0=Value%256;}unsigned int Timer0_Getcounter(void)
{return (TH0<<8)|TL0;}void Timer0_Run(unsigned char Flag)
{TR0=Flag;}```c
#ifndef		__TIMER0_H
#define 	 __TIMER0_Hvoid Timer0_Init(void)	;
void Timer0_SetCounter(unsigned char Value);
unsigned int Timer0_Getcounter(void);
void Timer0_Run(unsigned char Flag);
#endif
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "I2C.h"
#include "PCF8591.h"
#include "Init.h"
#include "INT0.h"
#include "Timer0.h"
#include "IR.h"unsigned int Time;
void main()
{LCD_Init();LCD_ShowString(1,1,"A");Nixie_OFF();DianZhengGuan();Timer0_Init();Timer0_SetCounter(0);Timer0_Run(1);Delay(1);Time=Timer0_Getcounter();while(1){LCD_ShowNum(2,1,Time,3);}
}

實驗現象:
在這里插入圖片描述
測試遙控的進入

#include <REGX52.H>
#include "Timer0.h"
#include "INT0.h"unsigned int IR_Time;
unsigned char IR_State;unsigned char IR_Data[4];			//緩存
unsigned char IR_pData;unsigned char IR_DataFlag;
unsigned char IR_RepearFlag;
unsigned char IR_Address;			//Data又要接受數據又要輸出數據 變搜變輸出,可能會出錯
unsigned char IR_Command;void IR_Init(void)
{Timer0_Init();Int0_Init();
}void Into_Routine(void)  interrupt 0
{if(IR_State==0){P1=0x00;Timer0_SetCounter(0);Timer0_Run(1);IR_State=1;}else if(IR_State==1){IR_Time=Timer0_Getcounter();Timer0_SetCounter(0);	if(IR_Time>12442-500&& IR_Time<12442+500)		//13500{IR_State=2;}else if(IR_Time>10368-500&& IR_Time<10368+500){IR_RepearFlag=1;Timer0_Run(0);	IR_State=0;	}else{IR_State=1;}}}

遙控能進入的話,會產生中斷,進入狀態0,然后會讓LED燈全亮。
實驗現象:

測試遙控燈

二、紅外遙控接受

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "I2C.h"
#include "PCF8591.h"
#include "Init.h"
#include "INT0.h"
#include "Timer0.h"
#include "IR.h"unsigned int Time;
unsigned char Address;
unsigned char Command;
void main()
{LCD_Init();LCD_ShowString(1,1,"LED");Nixie_OFF();DianZhengGuan();IR_Init();while(1){if(IR_GetDataFlag()){Address=IR_GetAddress();Command=IR_GetCommand();LCD_ShowHexNum(2,1,Address,2);LCD_ShowHexNum(2,6,Command,2);}if(Command==0x16){P1=0x00;}}
}
#include <REGX52.H>void Timer0_Init(void)		//1毫秒@11.0592MHz
{//	TMOD不能復制,如果同時使用定時器1和0,它會覆蓋淹沒,TMOD &= 0xF0;		//設置定時器模式TMOD |= 0x01;		//設置定時器模式TL0 = 0;		//設置定時初值TH0 = 0;		//設置定時初值TF0 = 0;		//清除TF0標志TR0 = 0;		//定時器0不計時
}void Timer0_SetCounter(unsigned char Value)
{TH0=Value/256;TL0=Value%256;}unsigned int Timer0_GetCounter(void)
{return (TH0<<8)|TL0;}void Timer0_Run(unsigned char Flag)
{TR0=Flag;}
#include <REGX52.H>
#include "Timer0.h"
#include "INT0.h"unsigned int IR_Time;
unsigned char IR_State;unsigned char IR_Data[4];
unsigned char IR_pData;unsigned char IR_DataFlag;
unsigned char IR_RepeatFlag;
unsigned char IR_Address;
unsigned char IR_Command;/*** @brief  紅外遙控初始化* @param  無* @retval 無*/
void IR_Init(void)
{Timer0_Init();Int0_Init();
}/*** @brief  紅外遙控獲取收到數據幀標志位* @param  無* @retval 是否收到數據幀,1為收到,0為未收到*/
unsigned char IR_GetDataFlag(void)
{if(IR_DataFlag){IR_DataFlag=0;return 1;}return 0;
}/*** @brief  紅外遙控獲取收到連發幀標志位* @param  無* @retval 是否收到連發幀,1為收到,0為未收到*/
unsigned char IR_GetRepeatFlag(void)
{if(IR_RepeatFlag){IR_RepeatFlag=0;return 1;}return 0;
}/*** @brief  紅外遙控獲取收到的地址數據* @param  無* @retval 收到的地址數據*/
unsigned char IR_GetAddress(void)
{return IR_Address;
}/*** @brief  紅外遙控獲取收到的命令數據* @param  無* @retval 收到的命令數據*/
unsigned char IR_GetCommand(void)
{return IR_Command;
}//外部中斷0中斷函數,下降沿觸發執行
void Int0_Routine(void) interrupt 0
{if(IR_State==0)				//狀態0,空閑狀態{Timer0_SetCounter(0);	//定時計數器清0Timer0_Run(1);			//定時器啟動IR_State=1;				//置狀態為1}else if(IR_State==1)		//狀態1,等待Start信號或Repeat信號{IR_Time=Timer0_GetCounter();	//獲取上一次中斷到此次中斷的時間Timer0_SetCounter(0);	//定時計數器清0//如果計時為13.5ms,則接收到了Start信號(判定值在12MHz晶振下為13500,在11.0592MHz晶振下為12442)if(IR_Time>12442-500 && IR_Time<12442+500){IR_State=2;			//置狀態為2}//如果計時為11.25ms,則接收到了Repeat信號(判定值在12MHz晶振下為11250,在11.0592MHz晶振下為10368)else if(IR_Time>10368-500 && IR_Time<10368+500){IR_RepeatFlag=1;	//置收到連發幀標志位為1Timer0_Run(0);		//定時器停止IR_State=0;			//置狀態為0}else					//接收出錯{IR_State=1;			//置狀態為1}}else if(IR_State==2)		//狀態2,接收數據{IR_Time=Timer0_GetCounter();	//獲取上一次中斷到此次中斷的時間Timer0_SetCounter(0);	//定時計數器清0//如果計時為1120us,則接收到了數據0(判定值在12MHz晶振下為1120,在11.0592MHz晶振下為1032)if(IR_Time>1032-500 && IR_Time<1032+500){IR_Data[IR_pData/8]&=~(0x01<<(IR_pData%8));	//數據對應位清0IR_pData++;			//數據位置指針自增}//如果計時為2250us,則接收到了數據1(判定值在12MHz晶振下為2250,在11.0592MHz晶振下為2074)else if(IR_Time>2074-500 && IR_Time<2074+500){IR_Data[IR_pData/8]|=(0x01<<(IR_pData%8));	//數據對應位置1IR_pData++;			//數據位置指針自增}else					//接收出錯{IR_pData=0;			//數據位置指針清0IR_State=1;			//置狀態為1}if(IR_pData>=32)		//如果接收到了32位數據{IR_pData=0;			//數據位置指針清0if((IR_Data[0]==~IR_Data[1]) && (IR_Data[2]==~IR_Data[3]))	//數據驗證{IR_Address=IR_Data[0];	//轉存數據IR_Command=IR_Data[2];IR_DataFlag=1;	//置收到連發幀標志位為1}Timer0_Run(0);		//定時器停止IR_State=0;			//置狀態為0}}
}

實驗現象:

紅外遙控顯示鍵碼值并控制LED

2.3遙控鍵碼值

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "I2C.h"
#include "PCF8591.h"
#include "Init.h"
#include "INT0.h"
#include "Timer0.h"
#include "IR.h"unsigned char Num;
unsigned char Address;
unsigned char Command;
void main()
{LCD_Init();LCD_ShowString(1,1,"ADDR  CMD  NUM");LCD_ShowString(2,1,"00    00   000");Nixie_OFF();DianZhengGuan();IR_Init();while(1){if(IR_GetDataFlag()||IR_GetRepeatFlag()){Address=IR_GetAddress();Command=IR_GetCommand();LCD_ShowHexNum(2,1,Address,2);LCD_ShowHexNum(2,7,Command,2);if(Command==IR_VOL_X){Num--;}if(Command==IR_VOL_Z){Num++;}LCD_ShowNum(2,12,Num,3);}}
}

實驗現象:

紅外遙控鍵碼值控制值增加和減少

三、紅外遙控直流電機

1.Motor.c

#include <REGX52.H>
#include "Timer1.h"sbit Moter= P1^7;
unsigned char Counter,Compare;void Motor_Init(void)
{Timer1_Init();}void Motor_SetSpeed(unsigned char Speed)
{Compare=Speed;	
}void Timer1_Routine()   interrupt  3	//跳轉到這里,觸發中斷
{TL1 = 0xA4;		//設置定時初值TH1 = 0xFF;		//設置定時初值Counter++;			//定時器定時遞增Counter%=100;			//周期清零if(Counter<Compare)	//比較{Moter=1;		//給1轉}else{Moter=0;}
}
#ifndef		__MOTOR_H
#define 	 __MOTOR_Hvoid Motor_Init(void);
void Motor_SetSpeed(unsigned char Speed);#endif

2.Timer1.c

#include <REGX52.H>void Timer1_Init(void)		//100us @11.0592MHz
{//	TMOD不能復制,如果同時使用定時器1和0,它會覆蓋淹沒,TMOD &= 0x0F;		//設置定時器模式TMOD |= 0x10;		//設置定時器模式TL0 = 0xA4;		//設置定時初值TH1 = 0xFF;		//設置定時初值TF1 = 0;		//清除TF0標志TR1 = 1;		//定時器0開始計時ET1=1;EA=1;PT1=0;
}/*
void Timer1_Routine()   interrupt  3	//跳轉到這里,觸發中斷
{static unsigned int T0Count;		//Tcount為計數值  static只有本函數使用TL1 = 0x66;					//重新設置定時初值TH1 = 0xFC;					//重新設置定時初值T0Count++;if(T0Count>=1000){T0Count=0;P1_0=~P1_0;}}*/
#ifndef		__TIMER1_H
#define 	 __TIMER1_Hvoid Timer1_Init(void)	;
#endif

3.IR.c

#include <REGX52.H>
#include "Timer0.h"
#include "INT0.h"unsigned int IR_Time;
unsigned char IR_State;unsigned char IR_Data[4];
unsigned char IR_pData;unsigned char IR_DataFlag;
unsigned char IR_RepeatFlag;
unsigned char IR_Address;
unsigned char IR_Command;/*** @brief  紅外遙控初始化* @param  無* @retval 無*/
void IR_Init(void)
{Timer0_Init();Int0_Init();
}/*** @brief  紅外遙控獲取收到數據幀標志位* @param  無* @retval 是否收到數據幀,1為收到,0為未收到*/
unsigned char IR_GetDataFlag(void)
{if(IR_DataFlag){IR_DataFlag=0;return 1;}return 0;
}/*** @brief  紅外遙控獲取收到連發幀標志位* @param  無* @retval 是否收到連發幀,1為收到,0為未收到*/
unsigned char IR_GetRepeatFlag(void)
{if(IR_RepeatFlag){IR_RepeatFlag=0;return 1;}return 0;
}/*** @brief  紅外遙控獲取收到的地址數據* @param  無* @retval 收到的地址數據*/
unsigned char IR_GetAddress(void)
{return IR_Address;
}/*** @brief  紅外遙控獲取收到的命令數據* @param  無* @retval 收到的命令數據*/
unsigned char IR_GetCommand(void)
{return IR_Command;
}//外部中斷0中斷函數,下降沿觸發執行
void Int0_Routine(void) interrupt 0
{if(IR_State==0)				//狀態0,空閑狀態{Timer0_SetCounter(0);	//定時計數器清0Timer0_Run(1);			//定時器啟動IR_State=1;				//置狀態為1}else if(IR_State==1)		//狀態1,等待Start信號或Repeat信號{IR_Time=Timer0_GetCounter();	//獲取上一次中斷到此次中斷的時間Timer0_SetCounter(0);	//定時計數器清0//如果計時為13.5ms,則接收到了Start信號(判定值在12MHz晶振下為13500,在11.0592MHz晶振下為12442)if(IR_Time>12442-500 && IR_Time<12442+500){IR_State=2;			//置狀態為2}//如果計時為11.25ms,則接收到了Repeat信號(判定值在12MHz晶振下為11250,在11.0592MHz晶振下為10368)else if(IR_Time>10368-500 && IR_Time<10368+500){IR_RepeatFlag=1;	//置收到連發幀標志位為1Timer0_Run(0);		//定時器停止IR_State=0;			//置狀態為0}else					//接收出錯{IR_State=1;			//置狀態為1}}else if(IR_State==2)		//狀態2,接收數據{IR_Time=Timer0_GetCounter();	//獲取上一次中斷到此次中斷的時間Timer0_SetCounter(0);	//定時計數器清0//如果計時為1120us,則接收到了數據0(判定值在12MHz晶振下為1120,在11.0592MHz晶振下為1032)if(IR_Time>1032-500 && IR_Time<1032+500){IR_Data[IR_pData/8]&=~(0x01<<(IR_pData%8));	//數據對應位清0IR_pData++;			//數據位置指針自增}//如果計時為2250us,則接收到了數據1(判定值在12MHz晶振下為2250,在11.0592MHz晶振下為2074)else if(IR_Time>2074-500 && IR_Time<2074+500){IR_Data[IR_pData/8]|=(0x01<<(IR_pData%8));	//數據對應位置1IR_pData++;			//數據位置指針自增}else					//接收出錯{IR_pData=0;			//數據位置指針清0IR_State=1;			//置狀態為1}if(IR_pData>=32)		//如果接收到了32位數據{IR_pData=0;			//數據位置指針清0if((IR_Data[0]==~IR_Data[1]) && (IR_Data[2]==~IR_Data[3]))	//數據驗證{IR_Address=IR_Data[0];	//轉存數據IR_Command=IR_Data[2];IR_DataFlag=1;	//置收到連發幀標志位為1}Timer0_Run(0);		//定時器停止IR_State=0;			//置狀態為0}}
}
#ifndef __IR_H__
#define __IR_H__#define IR_CH_X			0x45
#define IR_CH			0x46
#define IR_CH_Z			0x47
#define IR_PREV			0x44
#define IR_NEXT			0x40
#define IR_PAUSE		0x43
#define IR_VOL_X		0x07
#define IR_VOL_Z		0x15
#define IR_EQ			0xD9
#define IR_0			0x16
#define IR_100+			0x19
#define IR_200+			0x0d
#define IR_1			0x0C
#define IR_2			0x18
#define IR_3			0x5E
#define IR_4			0x08
#define IR_5			0x1C
#define IR_6			0x5A
#define IR_7			0x42
#define IR_8			0x52
#define IR_9			0x4Avoid IR_Init(void);
unsigned char IR_GetDataFlag(void);
unsigned char IR_GetRepeatFlag(void);
unsigned char IR_GetAddress(void);
unsigned char IR_GetCommand(void);
#endif

4.main.c

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Timer1.h"
#include "Nixie.h"
#include "Init.h"
#include "IR.h"
#include "Motor.h"unsigned char KeyNum,Speed,Command;void main()
{DianZhengGuan();Motor_Init();IR_Init();while(1){
//		KeyNum=Key();
//		if(KeyNum==1)
//		{
//			Speed++;
//			Speed%=4;
//		
//				if(Speed==0){Motor_SetSpeed(0);}
//				if(Speed==1){Motor_SetSpeed(50);}
//				if(Speed==2){Motor_SetSpeed(75);}
//				if(Speed==3){Motor_SetSpeed(100);}
//			
//				Nixie(1,Speed);		//數碼管靜態顯示會鎖存
//		}if(IR_GetDataFlag()){Command=IR_GetCommand();if(Command==IR_0) {Speed=0;}if(Command==IR_1) {Speed=1;}if(Command==IR_2) {Speed=2;}if(Command==IR_3) {Speed=3;}if(Speed==0){Motor_SetSpeed(0);}if(Speed==1){Motor_SetSpeed(50);}if(Speed==2){Motor_SetSpeed(75);}if(Speed==3){Motor_SetSpeed(100);}Nixie(1,Speed);		//數碼管靜態顯示會鎖存}	}	
}

5.INT0

#include <REGX52.H>void Int0_Init(void)
{IT0=1;		//下降沿觸發IE0=0;		//中斷標志位EX0=1;		//打開中斷EA=1;		//打開所有中斷PX0=1;		//優先級}
#ifndef __INT0_H__
#define __INT0_H__
void Int0_Init(void);
#endif

實驗現象:

紅外控制直流電機

總結

本節課主要學了紅外遙控了,對定時器寫入和寫出的,還有解碼的功能,最重要的是這個解碼過程,設置了3個狀態,每個狀態執行分別執行不同的功能,識別出開始的信號和設置很多個標志位,通過操作進行定時器的開始,進而解碼出開始和連發,進而分辨出是發送的是信號0還是信號1,最后讀取值進入數組中,拆分為4個unsigned char類型,分別存入最后變量地址和數據中,并根據數據Command進行有關的操作。
2、最后進行了實驗:紅外遙控直流電機,根據讀到的Command,相當于讀取按鍵值,然后執行相關的功能,完成本次實驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73938.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73938.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73938.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機組成原理————計算機運算方法精講<1>原碼表示法

第一部分:無符號數和有符號數的概念 1.無符號數 計算機中的數均存放在寄存器當中,通常稱寄存器的位數為機器字長,所謂無符號數,就是指沒有fu5號的數,在寄存器中的每一位均可用來存放數值,當存放有符號數時,需要留出位置存放符號,機器字長相同時,無符號數與有符號數所…

【什么是機器學習——多項式逼近】

什么是機器學習——多項式逼近 機器學習可以分成三大類別,監督學習、非監督學習、強化學習。三大類別背后的數學原理不同。監督學習使用了數學分析中的函數逼近方法和概率統計中的極大似然方法;非監督學習使用聚類和EM算法;強化學習使用馬爾可夫決策過程的想法。 機器學習的…

Ubuntu 22.04 上安裝阿里云 CLI(命令行工具)

在 Ubuntu 22.04 上安裝阿里云 CLI&#xff08;命令行工具&#xff09;可以通過以下步驟完成&#xff1a; 步驟 1&#xff1a;下載阿里云 CLI 安裝包 打開終端&#xff0c;首先更新你的軟件包索引&#xff1a; sudo apt update安裝 curl&#xff08;如果還沒有安裝&#xff09…

?Android Gradle 插件(AGP)版本與 ?Gradle 版本需要嚴格對應

一、AGP 與 Gradle 版本對照表 Android Gradle 插件版本對應 Gradle 版本適用 Android Studio 版本?8.1.x8.2Arctic Fox (2020.3.1+)?8.0.x8.0Arctic Fox (2020.3.1+)?7.4.x7.5.1IntelliJ IDEA 2022+?7.3.x7.4IntelliJ IDEA 2022+?7.2.x7.3.3IntelliJ IDEA 2021.3+?7.1.x…

【Matlab】-- 基于MATLAB的灰狼算法優化支持向量機的回歸算法

文章目錄 文章目錄 01 內容概要02 GWO-SVR模型03 部分代碼04 運行結果05 參考文獻06 代碼下載 01 內容概要 GWOSVR&#xff08;基于灰狼算法優化的支持向量機回歸&#xff09;是一種先進的機器學習技術&#xff0c;它結合了灰狼優化算法&#xff08;Grey Wolf Optimizer, GWO…

Google Play Games PC版即將正式上線!

早在 2021 年&#xff0c;谷歌就推出 Google Play Games PC 版&#xff0c;本質上是基于虛擬化創建安卓系統在 Windows 上運行 Google Play 平臺的各種游戲。 在測試了 4 年后&#xff0c;谷歌準備在今年晚些時候正式上線該平臺&#xff0c;谷歌將在下周舉辦 2025 游戲開發者大…

【SpringBoot】深入解析使用配置文件解決硬編碼問題綜合練習(三):解析驗證碼拓展問題

校驗輸入驗證碼接口 check( ) 5. 為什么要用靜態內部類接收配置文件中的 Seisson 對象&#xff1f; 為什么我們接收配置文件的 Session 對象時&#xff0c;使用靜態內部類給 Session 對象的 key&#xff0c;date 屬性賦值呢&#xff1f;不加 static 可以嗎&#xff1f; 在 Cap…

day16 學習筆記

文章目錄 前言一、廣播機制二、數組遍歷1.for循環2.nditer函數 三、數組操作1.reshape函數2.flat屬性3.flatten函數4.revel函數5.數組轉置6.升維與降維7.數組的連接與分割8.數組運算 前言 通過今天的學習&#xff0c;我進一步掌握了更多numpy的語法知識 一、廣播機制 廣播&am…

使用FastExcel時的單個和批量插入的問題

在我們用excel表進行插入導出的時候&#xff0c;通常使用easyexcel或者FastExcel&#xff0c;而fastexcel是easy的升級版本&#xff0c;今天我們就對使用FastExcel時往數據庫插入數據的業務場景做出一個詳細的剖析 場景1 現在我們數據庫有一張組織表&#xff0c;組織表的字段…

Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64

? rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast? 編輯配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下載相關…

AI基礎02-圖片數據采集

上篇文章我們學習了文本的數據采集&#xff0c;今天主要了解一下圖片數據采集的方法。圖片采集方法通常有網頁采集和實時采集&#xff08;傳感器采集&#xff09;兩種。我們學習一下如何利用python 工具和筆記本計算機攝像頭進行圖片數據的實時采集。 1&#xff09;cv2庫簡介 …

【CSS】相對位置小練習

要求&#xff1a; 成果&#xff1a; 代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相對位置小練習</title><link rel"stylesheet" href"./css/style.css…

外設的中斷控制

如ADC、SPI、I2C、TIM等使用STM32 HAL庫時的中斷函數調用方式和UART非常類似&#xff0c;都有底層直接使能中斷和上層庫函數管理兩種方式。下面詳細說明幾種典型外設&#xff1a; 一、ADC外設 &#xff08;1&#xff09;直接使能中斷&#xff08;底層控制&#xff09;&#xf…

網絡傳輸優化之多路復用與解復用

一、基本概念 多路復用 發送端將來自多個應用或進程的數據流合并到同一物理信道中傳輸的過程。核心目的是提高信道利用率&#xff0c;減少資源浪費。例如&#xff0c;多個網絡應用&#xff08;如瀏覽器、郵件客戶端&#xff09;通過不同端口將數據封裝為報文段&#xff0c;共享…

【軟考-架構】10.1、軟件工程概述-CMM-軟件過程模型-逆向工程

?資料&文章更新? GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目錄 軟件工程基礎知識軟件工程概述能力成熟度模型能力成熟度模型CMM能力成熟度模型集成CMMI &#x1f4af;考試真題第一題第二題 軟件過程模型瀑布模型&#xff08;SDLC&#…

python將整個txt文件寫入excel的一個單元格?

要將整個txt文件寫入Excel的一個單元格&#xff0c;可以使用Python的openpyxl庫來實現。以下是一個簡單的示例代碼&#xff1a; from openpyxl import Workbook# 讀取txt文件內容 with open(file.txt, r) as file:txt_content file.read()# 創建一個新的Excel工作簿 wb Work…

車載以太網網絡測試 -25【SOME/IP-報文格式-1】

1 摘要 本專題接著上一專題對SOME/IP進行介紹&#xff0c;主要對SOME/IP報文格式以及定義的字段進行詳細介紹&#xff0c;有助于在實際項目過程中對SOME/IP報文的理解。 上文回顧&#xff1a; 車載以太網網絡測試 -24【SOME/IP概述】 2 SOME/IP-報文格式 通過上個專題介紹&a…

【區塊鏈安全 | 第五篇】DeFi概念詳解

文章目錄 DeFi1. DeFi 生態概覽2. 去中心化交易所&#xff08;DEX&#xff09;2.1 AMM&#xff08;自動做市商&#xff09;模型2.2 訂單簿模式&#xff08;現貨交易&#xff09; 3. 借貸協議3.1 Aave3.2 使用閃電貸&#xff08;Flash Loan&#xff09; 4. 穩定幣&#xff08;St…

問題:md文檔轉換word,html,圖片,excel,csv

文章目錄 問題&#xff1a;md文檔轉換word&#xff0c;html&#xff0c;圖片&#xff0c;excel&#xff0c;csv&#xff0c;ppt**主要職責****技能要求****發展方向****學習建議****薪資水平** 方案一&#xff1a;AI Markdown內容轉換工具打開網站md文檔轉換wordmd文檔轉換pdfm…

代碼隨想錄刷題day53|(二叉樹篇)106.從中序與后序遍歷序列構造二叉樹(▲

目錄 一、二叉樹理論知識 二、構造二叉樹思路 2.1 構造二叉樹流程&#xff08;給定中序后序 2.2 整體步驟 2.3 遞歸思路 2.4 給定前序和后序 三、相關算法題目 四、易錯點 一、二叉樹理論知識 詳見&#xff1a;代碼隨想錄刷題day34|&#xff08;二叉樹篇&#xff09;二…