单片机11-13

目录

蜂鸣器

蜂鸣器播放按键提示音

蜂鸣器播放音乐

AT24C02(IIC)总线

AT24C02数据存储

AT24C02秒表(定时器扫描按键)

DS18B20温度传感器(单总线)

温度显示

温度报警器


蜂鸣器

蜂鸣器播放按键提示音

Buzzer.c
 

#include <REGX52.H>
#include "INTRINS.h"
#include "Delay.h"
//蜂鸣器端口
sbit Buzzer = P2^5;/*** @brief  蜂鸣器私有延迟函数,延时500us* @param  无* @retval 无*/void Buzzer_Delay500us()		//@11.0592MHz
{unsigned char i;_nop_();i = 227;while (--i);
}/*** @brief  蜂鸣器发生持续时间* @param  ms	发声时长* @retval 无*/
void Buzzer_Time(unsigned int ms)
{unsigned int i;for(i = 0;i < ms *2;i++)//这里个人理解是持续时间(循环次数),如果要持续ms这么久//下面做一次就过去500us(0.5ms),要过去1000ms,则需要2000次,所以要*2{Buzzer = !Buzzer;Buzzer_Delay500us();//发出1000Hz频率声音//因为周期为1000微秒,即T = 0.001s,频率f = 1/T	,f = 1kHz}
}

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Buzzer.h"unsigned char KeyNum;void main(){Nixie(1,0);while( 1 ){KeyNum = Key();if(KeyNum){Buzzer_Time(1000);//响的时间Nixie(1,KeyNum);}}}
蜂鸣器播放音乐
#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"sbit Buzzer = P2^5;//播放速度,值为四分音符的时长(ms)
#define SPEED	500//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#
#define P	0
#define L1	1
#define L1_	2
#define L2	3
#define L2_	4
#define L3	5
#define L4	6
#define L4_	7
#define L5	8
#define L5_	9
#define L6	10
#define L6_	11
#define L7	12
#define M1	13
#define M1_	14
#define M2	15
#define M2_	16
#define M3	17
#define M4	18
#define M4_	19
#define M5	20
#define M5_	21
#define M6	22
#define M6_	23
#define M7	24
#define H1	25
#define H1_	26
#define H2	27
#define H2_	28
#define H3	29
#define H4	30
#define H4_	31
#define H5	32
#define H5_	33
#define H6	34
#define H6_	35
#define H7	36//索引与频率对照表
unsigned int FreqTable[]={0,63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};//曲谱以及持续时长
unsigned char code Music[]={P,4,P,4,P,4,M6,2,M7,2,H1,4+2,L7,2,H1,4,H3,4,M7,4+4+4,M3,2,M3,2,M6,4+2,};unsigned char FreqSelect,MusicSelect;void main(){Timer0Init();while( 1 ){if(Music[MusicSelect] != 0xFF){FreqSelect=Music[MusicSelect];MusicSelect++;Delay(SPEED/4*Music[MusicSelect]);MusicSelect++; TR0 = 0;//关闭定时器Delay(5);TR0 = 1;//重启定时器}else{TR0 = 0;while(1);}}}void Timer0_Routine() interrupt 1{if(FreqTable[FreqSelect] != 0)
{TL0 = FreqTable[FreqSelect]%256;TH0 = FreqTable[FreqSelect]/256;Buzzer = !Buzzer;
}}

AT24C02(IIC)总线

AT24C02数据存储

I2C.c(结合时序结构图进行理解)

#include <REGX52.H>sbit I2C_SCL = P2^1;sbit I2C_SDA = P2^0;/*** @brief  I2C开始* @param  无* @retval 无*/void I2C_Start(void)//起始条件
{I2C_SDA = 1;//初始化I2C_SCL = 1;//初始化I2C_SDA = 0;//SCL处于高电平期间拉低进行操作I2C_SCL = 0;//准备发送字节
}/*** @brief  I2C停止* @param  无* @retval 无*/void I2C_Stop(void)//终止条件{I2C_SDA = 0;//可能为1/0,保证为0进行操作I2C_SCL = 1;//高电平期间I2C_SDA = 1;//由低到高}/*** @brief  I2C发送一个字节* @param  Byte 	要发送的字节* @retval 无*/void I2C_SendByte(unsigned char Byte)//发送一个字节{unsigned char i;for( i = 0; i<8; i++){I2C_SDA = Byte & (0x80 >> i);//取出各位数据I2C_SCL = 1;//准备放入数据,拉高SCLI2C_SCL = 0;//马上拉低也能读到数据,准备放入下一位数据}}/*** @brief  I2C接收一个字节* @param  无* @retval Byte 接收到的一个字节数据*/unsigned char I2C_ReceiveByte(void){unsigned char i,Byte;I2C_SDA = 1;//释放总线for( i=0;i<8;i++){I2C_SCL = 1;//进行拉高读取if(I2C_SDA){Byte |= (0x80 >> i);//对八位进行相或运算Byte读出是几就是几}I2C_SCL = 0;//一位读取完毕,重置SCL,}return Byte;}/*** @brief  I2C发送应答* @param  AckBit 应答位,0为应答,1为非应答* @retval 无*/void I2C_SendAck(unsigned int AckBit){I2C_SDA = AckBit;I2C_SCL = 1;//拉高进行发送I2C_SCL = 0;//发送完成,恢复}/*** @brief  I2C接收应答位* @param  无* @retval AckBit 0为应答,1为非应答*/unsigned char I2C_ReceiveAck(void){unsigned char AckBit = 0;I2C_SDA = 1;//释放总线I2C_SCL = 1;//拉高进行接收AckBit = I2C_SDA;//将发送过来的数据存储I2C_SCL = 0;//结束接收return AckBit;}

AT24C02.c(结合数据帧最后一张ppt进行理解)

#include <REGX52.H>
#include "I2C.H"#define AT24C02_ADDRESS		0xA0/*** @brief  AT24C02写入一个字节* @param  WorkAddress 要写入字节的地址* @param  Data 要写入的数据* @retval 无*/
void AT24C02_WriteByte(unsigned char WorkAddress,Data)//字节写{unsigned char Ack;I2C_Start();//开始I2C_SendByte(AT24C02_ADDRESS);//SLAVEADRESS + w,从机地址I2C_ReceiveAck();//从机RAI2C_SendByte(WorkAddress);//写入字地址I2C_ReceiveAck();//从机RAI2C_SendByte(Data);//写入数据I2C_ReceiveAck();//从机RAI2C_Stop();//停止}/*** @brief  AT24C02读取一个字节* @param  WorkAddress 要读取字节的地址* @retval Data 读出的数据*/
unsigned char AT24C02_ReadByte(unsigned char WorkAddress)//随机读{unsigned char Data;I2C_Start();//开始I2C_SendByte(AT24C02_ADDRESS);//SlaveAdress+WI2C_ReceiveAck();//RAI2C_SendByte(WorkAddress);//输入字地址I2C_ReceiveAck();//RAI2C_Start();//开始I2C_SendByte(AT24C02_ADDRESS | 0x01);//SlaveAdress+RI2C_ReceiveAck();//RAData = I2C_ReceiveByte();//接收一个字节数据I2C_SendAck(1);//SA,结束接收I2C_Stop();//结束return Data;}

main.c

#include <REGX52.H>
#include "Delay.h"
#include "AT24C02.h"
#include "Key.h"
#include "LCD1602.h"unsigned char KeyNum;
unsigned int Num;void main(){LCD_Init();LCD_ShowNum(1,1,Num,5);while( 1 ){KeyNum = Key();if(KeyNum == 1)//按下显示+1{Num++;LCD_ShowNum(1,1,Num,5);}if(KeyNum == 2)//按下显示-1{Num--;LCD_ShowNum(1,1,Num,5);}if(KeyNum == 3)//存储当前显示数据{AT24C02_WriteByte(0,Num%256);//存储低位Delay(5);AT24C02_WriteByte(1,Num/256);//存储高位Delay(5);LCD_ShowString(2,1,"Write ok");Delay(1000);LCD_ShowString(2,1,"        ");}if(KeyNum == 4)//读出内部存储的数据{Num = AT24C02_ReadByte(0);//取出低位Num |= (AT24C02_ReadByte(1) << 8);取出高位并将其合并LCD_ShowNum(1,1,Num,5);LCD_ShowString(2,1,"Read ok");Delay(1000);LCD_ShowString(2,1,"        ");}}}
AT24C02秒表(定时器扫描按键)

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer0.h"
#include "I2C.h"
#include "AT24C02.h"unsigned char KeyNum ;unsigned char Min,Sec,MiNiSec;unsigned char RunFlag ;void main(){Timer0_Init();while( 1 ){KeyNum = Key();if(KeyNum == 1){//暂停RunFlag = !RunFlag; }if(KeyNum == 2){//清零Min = 0;Sec = 0;MiNiSec = 0;}if(KeyNum == 3){//写入AT24C02_WriteByte(0,Min);Delay(5);//写周期AT24C02_WriteByte(1,Sec);Delay(5);AT24C02_WriteByte(2,MiNiSec);Delay(5);}if(KeyNum == 4){//读出Min = AT24C02_ReadByte(0);Sec = AT24C02_ReadByte(1);MiNiSec = AT24C02_ReadByte(2);}NiXie_SetBuf(1,Min / 10);//分高位NiXie_SetBuf(2,Min % 10);//分低位NiXie_SetBuf(3,10);//显示 -NiXie_SetBuf(4,Sec / 10);//秒高位NiXie_SetBuf(5,Sec % 10);//秒低位NiXie_SetBuf(6,10);//显示 -NiXie_SetBuf(7,MiNiSec / 10);NiXie_SetBuf(8,MiNiSec % 10);}}void Sec_Loop(void)//越界判断及处理
{if(RunFlag)//判断运行状态{MiNiSec ++;if(MiNiSec >= 100){MiNiSec = 0;Sec ++;if(Sec >= 60){Sec = 0;Min ++;if(Min >= 60){Min = 0;}}}}}void Timer0_Routine() interrupt 1{static unsigned int T0Count1,T0Count2,T0Count3;T0Count1 ++;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值(1ms)if( T0Count1 >= 20 ){//每隔20ms,扫描按键T0Count1 = 0;Key_Loop();}T0Count2 ++;if( T0Count2 >= 2 ){//每隔2ms,调用显示T0Count2 = 0;NiXie_Loop();}T0Count3 ++;if( T0Count3 >= 10 ){//每隔10ms,秒表进行运行自增T0Count3 = 0;Sec_Loop();}
}

Key.c

#include <REGX52.H>
#include "Delay.h"unsigned char Key_KeyNum;/*** @brief  获取独立按键键码* @param  无* @retval 按下按键的键码,范围 0~4,无按键按下时,返回值为0*/
unsigned char Key(void)
{unsigned char Temp = 0;Temp = Key_KeyNum;Key_KeyNum = 0;return Temp; 
}/*** @brief  判断按下哪个按键* @param  无* @retval 无*/
unsigned char Key_GetState(viod){unsigned char KeyNum = 0;if(P3_1 == 0){ KeyNum = 1;}if(P3_0 == 0){ KeyNum = 2;}if(P3_2 == 0){ KeyNum = 3;}if(P3_3 == 0){ KeyNum = 4;}return KeyNum;}void Key_Loop(void)
{static unsigned char NowState , LastState;LastState = NowState;NowState = Key_GetState();if(LastState == 1 && NowState == 0)//按下按键1后松手{Key_KeyNum = 1;}if(LastState == 2 && NowState == 0)//按下按键2后松手{Key_KeyNum = 2;}if(LastState == 3 && NowState == 0)//按下按键3后松手{Key_KeyNum = 3;}if(LastState == 4 && NowState == 0)//按下按键4后松手{Key_KeyNum = 4;}
}

NiXie.c

#include <REGX52.H>
#include "Delay.h"unsigned char NiXie_Buf[9] = {0,10,10,10,10,10,10,10,10};
//初始化显示
unsigned char NixieTable [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
//数字显示,以及 ‘-’ 显示void NiXie_SetBuf(unsigned char Location,Number)
{NiXie_Buf[Location] = Number;//设置显示数字
}
void NiXie_Scan(unsigned char Location,Number){//检测哪个管亮以及亮多少P0 = 0x00;switch(Location){//位选case 1:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;case 2:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;case 3:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;case 4:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;case 5:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;case 6:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;case 7:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;case 8:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;}P0 = NixieTable[Number];//段选}void NiXie_Loop(void)//这个函数中不能出现delay函数
{static unsigned char i = 1;NiXie_Scan(i,NiXie_Buf[i]);//不断扫描八个显示管i++;if(i>=9){i=1;}}

DS18B20温度传感器(单总线)

温度显示

OneWire.c

#include <REGX52.H>sbit OneWire_DQ = P3^7;/*** @brief  初始化单总线* @param  无* @retval 无*/
unsigned char OneWire_Init(void)
{unsigned char AckBit,i;//应答位OneWire_DQ = 1;//初始化为高再拉低OneWire_DQ = 0;//拉低进入初始化状态i = 227;while (--i);//延迟500usOneWire_DQ = 1;//释放总线i = 29;while (--i);//延迟70usAckBit = OneWire_DQ;i = 227;while (--i);//延迟500us(超过480us即可)return AckBit;
}/*** @brief  单总线传输一位数据* @param  Bit 被传输的一位数据* @retval 无*/
void OneWire_SendBit( unsigned char Bit)
{unsigned char i;OneWire_DQ = 0;//直接拉低,初始化后是高i = 4;while (--i);//延时10usOneWire_DQ = Bit;//读取典型值i = 22;while (--i);//延时50usOneWire_DQ = 1;//完成后拉高
}/*** @brief  接收一位数据* @param  无* @retval Bit	接收到的一位数据*/
unsigned char OneWire_ReceiveBit(void)
{unsigned char Bit,i;OneWire_DQ = 0;i = 2;while (--i);//延时5usOneWire_DQ = 1;i = 2;while (--i);//延时5usBit = OneWire_DQ;i = 22;while (--i);//延时50us,完成后总线应为1return Bit;
}/*** @brief  传输一个字节* @param  Byte	被传输的字节* @retval 无*/
void OneWire_SendByte(unsigned char Byte)
{unsigned char i;for( i=0;i<8;i++){OneWire_SendBit(Byte & (0x01 << i));//从最低位开始传输}
}/*** @brief  接收一个字节* @param  无* @retval Byte	接收到的字节*/
unsigned char OneWire_ReceiveByte(void)
{unsigned char i;unsigned char Byte = 0x00;for( i=0;i<8;i++){if(OneWire_ReceiveBit()){Byte |= (0x01<<i);}	//从最低位开始接收,有1则入}return Byte;
}

DS18B20.c

#include <REGX52.H>
#include "OneWire.h"#define DS18B20_SKIP_ROM		0xCC
#define DS18B20_CONVERT_T		0x44
#define DS18B20_READ_SCRATCHPAD		0xBE/*** @brief  转变温度* @param  无* @retval 无*/
void DS18B20_ConvertT(void)//温度变换
{OneWire_Init();//初始化OneWire_SendByte(DS18B20_SKIP_ROM);//跳过ROM指令OneWire_SendByte(DS18B20_CONVERT_T);//开始温度变换
}/*** @brief  读取温度* @param  无* @retval T 浮点型温度数据*/
float DS18B20_ReadT(void)//温度读取,负数的温度是以补码形式存储的
{unsigned char TLSB,TMSB;int Temp;float T;OneWire_Init();//初始化OneWire_SendByte(DS18B20_SKIP_ROM);//跳过ROM指令OneWire_SendByte(DS18B20_READ_SCRATCHPAD);//读暂存器TLSB = OneWire_ReceiveByte();//低位TMSB = OneWire_ReceiveByte();//高位Temp = (TMSB << 8) | TLSB; //合并高低位并强转为有符号类型,有移位相当于扩大16倍T = Temp / 16.0;//还原并防止精度损失return T;
}

main.c

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "DS18B20.h"float T;void main(){LCD_Init();LCD_ShowString(1,1,"Temperature:");while( 1 ){DS18B20_ConvertT();//转变温度T = DS18B20_ReadT();//读取温度if(T < 0){LCD_ShowChar(2,1,'-');T = -T;//转为正值,进行显示}else{LCD_ShowChar(2,1,'+');}LCD_ShowNum(2,2,T,3);//整数部分LCD_ShowChar(2,5,'.');LCD_ShowNum(2,6,(unsigned long)(T*10000) % 10000,4);//小数部分}}
温度报警器

OneWire.c

#include <REGX52.H>sbit OneWire_DQ = P3^7;/*** @brief  初始化单总线* @param  无* @retval 无*/
unsigned char OneWire_Init(void)
{unsigned char AckBit,i;//应答位EA = 0;//防止延时被打断,屏蔽中断OneWire_DQ = 1;//初始化为高再拉低OneWire_DQ = 0;//拉低进入初始化状态i = 227;while (--i);//延迟500usOneWire_DQ = 1;//释放总线i = 29;while (--i);//延迟70usAckBit = OneWire_DQ;i = 227;while (--i);//延迟500us(超过480us即可)EA = 1;//执行完成后,将计时器还原return AckBit;
}/*** @brief  单总线传输一位数据* @param  Bit 被传输的一位数据* @retval 无*/
void OneWire_SendBit( unsigned char Bit)
{unsigned char i;EA = 0;//防止延时被打断,屏蔽中断OneWire_DQ = 0;//直接拉低,初始化后是高i = 4;while (--i);//延时10usOneWire_DQ = Bit;//读取典型值i = 22;while (--i);//延时50usOneWire_DQ = 1;//完成后拉高EA = 1;//执行完成后,将计时器还原
}/*** @brief  接收一位数据* @param  无* @retval Bit	接收到的一位数据*/
unsigned char OneWire_ReceiveBit(void)
{unsigned char Bit,i;EA = 0;//防止延时被打断,屏蔽中断OneWire_DQ = 0;i = 2;while (--i);//延时5usOneWire_DQ = 1;i = 2;while (--i);//延时5usBit = OneWire_DQ;i = 22;while (--i);//延时50us,完成后总线应为1EA = 1;//执行完成后,将计时器还原return Bit;
}/*** @brief  传输一个字节* @param  Byte	被传输的字节* @retval 无*/
void OneWire_SendByte(unsigned char Byte)
{unsigned char i;for( i=0;i<8;i++){OneWire_SendBit(Byte & (0x01 << i));//从最低位开始传输}
}/*** @brief  接收一个字节* @param  无* @retval Byte	接收到的字节*/
unsigned char OneWire_ReceiveByte(void)
{unsigned char i;unsigned char Byte = 0x00;for( i=0;i<8;i++){if(OneWire_ReceiveBit()){Byte |= (0x01<<i);}	//从最低位开始接收,有1则入}return Byte;
}

main.c

#include <REGX52.H>
#include "DS18B20.h"
#include "LCD1602.h"
#include "AT24C02.h"
#include "Delay.h"
#include "Key.h"
#include "Timer0.h"float T,TShow;//温度与显示温度
char TLow,THigh;//低阈值,高阈值
unsigned char KeyNum;//获取到的键码void main(){DS18B20_ConvertT();Delay(1000);THigh = AT24C02_ReadByte(0);//读取内部存储的高阈值TLow = AT24C02_ReadByte(1);//读取内部存储的低阈值if(THigh > 125 || TLow < -55 || THigh <= TLow){THigh = 20;TLow = 15;}LCD_Init();LCD_ShowString(1,1,"T:");LCD_ShowString(2,1,"TH:");LCD_ShowString(2,9,"TL:");LCD_ShowSignedNum(2,4,THigh,3);LCD_ShowSignedNum(2,12,TLow,3);Timer0_Init();while( 1 ){KeyNum = Key();/*温度读取及显示*/DS18B20_ConvertT();T = DS18B20_ReadT();if(T < 0)//零下{LCD_ShowChar(1,3,'-');TShow = -T;//转为正值}else{LCD_ShowChar(1,3,'+');TShow = T;}LCD_ShowNum(1,4,TShow,3);//整数部分LCD_ShowChar(1,7,'.');LCD_ShowNum(1,8,(unsigned long)(T*100)%100,2);//小数部分/*阈值判断及显示*/if(KeyNum){if(KeyNum == 1)//增加高阈值{THigh++;if(THigh > 125){THigh = 125;}}if(KeyNum == 2)//降低高阈值{THigh--;if(THigh <= TLow){THigh ++;}}if(KeyNum == 3)//增加低阈值{TLow++;if(TLow >= THigh){TLow -- ;}}if(KeyNum == 4)//降低低阈值{TLow--;if(TLow < -55){TLow = -55;}}LCD_ShowSignedNum(2,4,THigh,3);LCD_ShowSignedNum(2,12,TLow,3);AT24C02_WriteByte(0,THigh);//写入高阈值Delay(5);//写周期AT24C02_WriteByte(1,TLow);//写入低阈值Delay(5);//写周期}if(T > THigh){LCD_ShowString(1,13,"OV:H");}else if(T < TLow){LCD_ShowString(1,13,"OV:L");}else{LCD_ShowString(1,13,"OV: ");}}
}//中断函数
void Timer0_Routine() interrupt 1{static unsigned int T0Count;T0Count ++;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值if( T0Count >= 20 ){T0Count = 0;Key_Loop();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643202.shtml

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

相关文章

网络安全B模块(笔记详解)- 文件MD5校验

1.进入虚拟机操作系统:CentOS 6.8中的/root目录,找到test.txt文件,并使用md5sum工具来计算出该文件的md5值,并将计算该文件md5的命令的字符串作为Flag进行提交; 2.进入虚拟机操作系统:CentOS 6.8中的/root目录,找到test.txt文件,并使用md5sum校验工具来计算出该文件的…

一款相对比较强大的国产ARM单片机HC32F4A0

已经用了3年的HC32F4A0&#xff0c;已经对它比较熟悉了&#xff0c;与STM32相比它的外设使用这些的确是挺大大&#xff0c;不像GD32一类的单片机很多都能兼容STM32。用久了之后就更喜欢用HC32F4A0&#xff0c;功能强大&#xff0c;外设使用灵活&#xff0c;用点向FPGA靠拢的感觉…

安全认证机制之JWT

文章目录 前言一、JWT是什么二、为什么要用JWT三、JWT的组成四、JWT的应用场景总结 前言 在我们实际开发中会接触到很多安全认证机制&#xff0c;诸如HTTP Basic Auth、OAuth、Cookie-session Auth、Token Auth、JWT等等&#xff0c;今天我们就来聊一下基于JWT的Token认证机制。…

AI+量化03_股票数据获取

文章目录 思维导图问答之纯小白 vs GPT4 目标: 掌握量化金融知识、使用Python进行量化开发 背景&#xff1a;纯小白 参考资料&#xff1a;https://github.com/datawhalechina/whale-quant 本章是学习了股票数据的获取&#xff1a; 理论层面&#xff1a;包括股票数据的分类和常…

非诚勿扰宝马女起诉离婚事件:物质固然重要,但婚姻不是儿戏,需慎重对待...

媒体报道&#xff0c;近日&#xff0c;曾因《非诚勿扰》节目中一句“宁愿坐在宝马车里哭&#xff0c;也不坐在自行车上笑”而引发广泛争议的马某&#xff0c;如今再次成为舆论的焦点。 她所描述的闪婚后半年内遭受的家暴情况&#xff0c;不仅是对她个人生活的巨大冲击&#xff…

【AIGC】CLIP

CLIP的基本原理 对比学习&#xff1a; Clip使用对比学习来训练模型。对比学习的目标是通过将正样本&#xff08;相似的图像和文本对&#xff09;与负样本&#xff08;不相似的图像和文本对&#xff09;进行比较&#xff0c;从而使模型学会区分不同样本之间的差异。这有助于模型…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术&#xff0c;用于识别文本中每个词的词性&#xff0c;例如名词、动词、形容词等&#xff1b; 词性标注也被称为语法标注或词类消疑&#xff0c;是语料库语言学中将语料库内单词…

【其他-闲谈】关于博客排行榜

今天在学习内核驱动&#xff0c;有个常量不知道什么意思&#xff0c;然后在一篇博客上找到了答案——GFP_KERNEL的作用 偶然注意到作者排行50&#xff0c;然后往下看了看&#xff0c;想知道为什么他排行这么靠前&#xff0c;看这文章数量&#xff0c;估摸着一天一篇&#xff0c…

百度搜索智能精选是什么东西、怎么加入?

百度搜索智能精选是什么&#xff1f; 提问及具体展示如上图&#xff0c;这是白杨SEO一个好友提问的。他是觉得这个入口篇幅这么大&#xff0c;做宣传推广不错&#xff0c;问我是什么&#xff0c;怎么可以加入进去&#xff1f; 其实这就是百度搜索智能精选&#xff0c;只能是P…

浪花 - 查询队伍列表

一、接口设计 1. 请求参数&#xff1a;封装 TeamQuery package com.example.usercenter.model.dto;import com.example.usercenter.common.PageRequest; import lombok.Data;/*** author 乐小鑫* version 1.0* Date 2024-01-22-20:14*/ Data public class TeamQuery extends …

Stable Diffusion学习

参考 Stable Diffusion原理详解_stable diffusion csdn-CSDN博客 Stable Diffusion是stability.ai开源的图像生成模型&#xff0c;可以说Stable Diffusion的发布将AI图像生成提高到了全新高度&#xff0c;其效果和影响不亚于Open AI发布ChatGPT。 图像生成的发展 在Stable D…

【RT-DETR有效改进】轻量化ConvNeXtV2全卷积掩码自编码器网络

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

解决docker desktop 登录不上账号的问题

一、背景 点击“Sign in”&#xff0c;一直卡在Verifying credentials...&#xff0c;重试也没用。 二、解决办法 1、macOS下载并安装Proxifier 2、配置Proxifier 配置Proxies 配置rule 其中的Applications填&#xff1a;"Docker.app"; "Docker"; com.…

Java语言第三篇集合

集合 集合List集合ArrayListLinkedList泛型SetTreeSet集合特点数据结构HashSet集合Map集合HashMapTreeMap可变参数创建不可变集合 集合 集合和数组的对比 数组的长度是不可变的&#xff0c;集合的长度是可变的。数组可以存基本数据类型和引用数据类型。集合只能存引用数据类型…

「nuxt2配置tailwindcss」nuxt2添加tailwindcss详细步骤!解决版本不对称各种报错~~

1.插件下载 官方地址 npm install -D nuxtjs/tailwindcss3.4.3 tailwindcss3.4.1 postcss^8.4.33 autoprefixer10.4.17 2.nuxt.config.js配置 module.exports {// ...buildModules: [nuxtjs/tailwindcss],// ... }3.tailwind.config.js npx tailwindcss init module.exports…

【NVIDIA】Jetson Orin Nano系列:Qt+Gstreamer(02):gstreamer输出图像到Qt控件上

1、pro配置 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++17LIBS +=-lglib-2.0 LIBS +=-lgobject-2.0 LIBS +=

复合机器人颠覆传统上下料,实现高效精准生产

在追求高效、精准生产的现代制造业中&#xff0c;传统的上下料方式已经无法满足企业的需求。复合机器人的出现&#xff0c;为制造业带来了革命性的变革。它不仅提高了生产效率&#xff0c;降低了生产成本&#xff0c;还为企业创造了更大的竞争优势。复合机器人的广泛应用&#…

记录php 生成树

经常用php 生成树形结构&#xff0c;这里记录一遍 有两种方法 第一种是引用调用&#xff0c;特点是运行速度快&#xff0c;只需要循环一遍&#xff0c;但是无法动态修改里面数据 第二种是递归调用&#xff0c;可以动态调用数据 结论&#xff1a; 如果数据在几十条建议使用 …

openssl3.2/test/certs - 023 - EC cert with explicit curve

文章目录 openssl3.2/test/certs - 023 - EC cert with explicit curve概述笔记END openssl3.2/test/certs - 023 - EC cert with explicit curve 概述 openssl3.2 - 官方demo学习 - test - certs 并没有看到指定了椭圆曲线的参数, 还是rsa证书. 可能后面的脚本会生成指定了…

SpringBoot 整合redis

1、添加项目依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test&l…