蓝桥杯模块综合——高质量讲解AT24C02,BS18B20,BS1302,AD/DA(PCF8591),超声波模块

AT24C02——就是一个存储的东西,可以给他写东西,掉电不丢失。

void EEPROM_Write(unsigned char * EEPROM_String,unsigned char addr , unsigned char num)
{
	IIC_Start();
	IIC_SendByte(0xA0);
	IIC_WaitAck();
	
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	while(num--)
	{
		IIC_SendByte(*EEPROM_String++);
		IIC_WaitAck();
		IIC_Delay(200);
	}
	IIC_Stop();
}
void EEPROM_Read(unsigned char * EEPROM_String,unsigned char addr , unsigned char num)
{
	IIC_Start();
	IIC_SendByte(0xA0);
	IIC_WaitAck();
	
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xA1);
	IIC_WaitAck();
	
	while(num--)
	{
		*EEPROM_String++=IIC_RecByte();
		if(num) IIC_SendAck(0);//·¢ËÍÓ¦´ð
		 else IIC_SendAck(1);
	}
	IIC_Stop();
}

这个是这个代码,先开始IIC看他在不在(0xA0)等待应答,然后发送要写的页,和字节。然后发送然后等待 停止。

读——

一样的是先开始,然后找他,等待,然后写入页,然后IIC开始,进入读模式,然后等待。然后将读的东西给,数组。if num==0 就停止应答

下面是测试代码:

#include <STC15F2K60S2.H>
#include <iic.h>
void EEPROM_Write(unsigned char * EEPROM_String,unsigned char addr , unsigned char num);
void EEPROM_Read(unsigned char * EEPROM_String,unsigned char addr , unsigned char num);
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};
unsigned char dat[2]={30,60},keynum;
void Delay(unsigned int t)
{
	while(t--);

}
void suocun(unsigned char n)
{
	switch(n)
	{
		case 4:P2=(P2 & 0x1f)|0x80;break;
		case 5:P2=(P2 & 0x1f)|0xa0;break;
		case 6:P2=(P2 & 0x1f)|0xc0;break;
		case 7:P2=(P2 & 0x1f)|0xe0;break;
	}
}
void smg(unsigned char wei,unsigned char shu)
{
	suocun(6);
	P0=0x01<<wei;
	suocun(7);
	P0=Duan[shu];
	Delay(500);
	P0=0xff;
}
void shuma()
{
	smg(0,dat[0]/10);
	Delay(100);
	smg(1,dat[0]%10);
	Delay(100);
	
	smg(6,dat[1]/10);
	Delay(100);
	smg(7,dat[1]%10);
	Delay(100);
}
void jvzhen()
{
	P30=P31=P32=P33=1;
	P34=P35=P42=1;P44=0;
	if(P33==0){Delay(100);keynum=4;while(P33==0){shuma();}}
	if(P32==0){Delay(100);keynum=5;while(P32==0){shuma();}}
	if(P31==0){Delay(100);keynum=6;while(P31==0){shuma();}}
	if(P30==0){Delay(100);keynum=7;while(P30==0){shuma();}}
}
void zhixing()
{
	if(keynum==4)
	{
		dat[0]+=10;
		keynum=0;
	}
	if(keynum==5)
	{
		dat[0]-=10;
		keynum=0;
	}
	if(keynum==6)
	{
		EEPROM_Write(dat,0,2);
		keynum=0;
	}
	
}
void EEPROM_Write(unsigned char * EEPROM_String,unsigned char addr , unsigned char num)
{
	IIC_Start();
	IIC_SendByte(0xA0);
	IIC_WaitAck();
	
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	while(num--)
	{
		IIC_SendByte(*EEPROM_String++);
		IIC_WaitAck();
		IIC_Delay(200);
	}
	IIC_Stop();
}
void EEPROM_Read(unsigned char * EEPROM_String,unsigned char addr , unsigned char num)
{
	IIC_Start();
	IIC_SendByte(0xA0);
	IIC_WaitAck();
	
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xA1);
	IIC_WaitAck();
	
	while(num--)
	{
		*EEPROM_String++=IIC_RecByte();
		if(num) IIC_SendAck(0);//·¢ËÍÓ¦´ð
		 else IIC_SendAck(1);
	}
	IIC_Stop();
}

void main()
{
	EEPROM_Read(dat,0,2);
	while(1)
	{
		shuma();
		jvzhen();
		zhixing();
	}
}



 DS18B20——温度读取

float read_t()
{
	unsigned char low,high;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);

	low = Read_DS18B20();
	high = Read_DS18B20();
	return ((high<<8)|low)/16.0;
	
}

下面是测试代码,可能会有温度显示不正常,一直是85,就是DS18B20的Delay不正常,要在里面有一句 t*=12

#include <STC15F2K60S2.H>
#include <onewire.h>
#include <intrins.h>
sbit s0 = P3^0;
sbit s1 = P3^1;
sbit s2 = P3^2;
sbit s3 = P3^3;

sbit r0 = P3^4;
sbit r1 = P3^5;
sbit r2 = P4^2;
sbit r3 = P4^4;
float t=31.5;
unsigned char keynum;
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};
void Delay750ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 35;
	j = 51;
	k = 182;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void Delaysmg(unsigned int t)
{
	while(t--);
}
void Delayjan(unsigned char t)
{
	while(t--);
}
void suocun(unsigned char n)
{
	switch(n)
	{
		case 4:P2 = (P2 & 0x1f) | 0x80; break;
		case 5:P2 = (P2 & 0x1f) | 0xa0; break;
		case 6:P2 = (P2 & 0x1f) | 0xc0; break;
		case 7:P2 = (P2 & 0x1f) | 0xe0; break;
		case 0:P2 = (P2 & 0x1f) | 0x00; break;
	}
}
void shuma(unsigned char wei,unsigned char shu)
{
	suocun(6);
	P0=0x01<<wei;
	suocun(0);
	suocun(7);
	P0=Duan[shu];
	Delaysmg(1000);
	P0=0xff;
	suocun(0);
}
void shumadong()
{
	t = read_t();
	shuma(5,(int)t/10%10);
	Delaysmg(500);
	shuma(6,(int)t%10);
	Delaysmg(500);
	shuma(7,(int)(t*10)%10);
	Delaysmg(500);
	
}
void Delay_Key(unsigned char t)
{
	while(t--);
}
void jvzhen()
{
	s0=0;
	s1=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r3==0)
	{
		while(r3==0);
		keynum=0;
		shumadong();
	}
//=============================
	s0=0;
	s1=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r2==0)
	{
		while(r2==0);
		keynum=1;
		shumadong();
	}
//=============================
	s0=0;
	s1=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r1==0)
	{
		while(r1==0);
		keynum=2;
		shumadong();
	}
//=============================
	s0=0;
	s1=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r2==0)
	{
		while(r2==0);
		keynum=2;
		shumadong();
	}
//=========================================================
	s1=0;
	s0=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r3==0)
	{
		while(r3==0);
		keynum=3;
		shumadong();
	}
//=============
	s1=0;
	s0=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r2==0)
	{
		while(r2==0);
		keynum=4;
		shumadong();
	}
//=============
	s1=0;
	s0=s2=s3=1;
	r0=r1=r2=r3=1;
	if(r1==0)
	{
		while(r1==0);
		keynum=5;
		shumadong();
	}
//====================================
	s2=0;
	s0=s1=s3=1;
	r0=r1=r2=r3=1;
	if(r3==0)
	{
		while(r3==0);
		keynum=6;
		shumadong();
	}
//===================
	s2=0;
	s0=s1=s3=1;
	r0=r1=r2=r3=1;
	if(r2==0)
	{
		while(r2==0);
		keynum=7;
		shumadong();
	}
//====================
	s2=0;
	s0=s1=s3=1;
	r0=r1=r2=r3=1;
	if(r1==0)
	{
		while(r1==0);
		keynum=8;
		shumadong();
	}
//=================================
	s3=0;
	s0=s1=s2=1;
	r0=r1=r2=r3=1;
	if(r3==0)
	{
		while(r3==0);
		keynum=9;
		shumadong();
	}
}
void main()
{
	while(1)
	{
		shumadong();
	}
}

DS1302——时间的计时

unsigned char wirter[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char read[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//20Äê18ÈÕ  ÖÜÁù 23.59.24
unsigned char Timer[7]={0x24,0x59,0x23,0x18,0x04,0x06,0x20};
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};
void Delaysmg(unsigned int t)
{
	while(t--);
}
void Ds1302()
{
	char i;
	Write_Ds1302_Byte(0x8e,0x00);
	for (i=0;i<7;i++)
	{
		Write_Ds1302_Byte(wirter[i],Timer[i]);
	}
	Write_Ds1302_Byte(0x8e,0x80);
}
void readds()
{
	char i;
	for(i=0;i<7;i++)
	{
		Timer[i]=Read_Ds1302_Byte(read[i]);
	}
}

 写入有七个地址,读也是七个,然后存入数据 ,,上面我是 2020年周六4月18日,23分59分24秒

刚刚好七位,就是分别写入七个地址。

下面是测试代码:

#include <STC15F2K60S2.H>
#include <ds1302.h>
unsigned char wirter[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char read[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//20Äê18ÈÕ  ÖÜÁù 23.59.24
unsigned char Timer[7]={0x24,0x59,0x23,0x18,0x04,0x06,0x20};
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};
void Delaysmg(unsigned int t)
{
	while(t--);
}
void Ds1302()
{
	char i;
	Write_Ds1302_Byte(0x8e,0x00);
	for (i=0;i<7;i++)
	{
		Write_Ds1302_Byte(wirter[i],Timer[i]);
	}
	Write_Ds1302_Byte(0x8e,0x80);
}
void readds()
{
	char i;
	for(i=0;i<7;i++)
	{
		Timer[i]=Read_Ds1302_Byte(read[i]);
	}
}
void suocun(unsigned char n)
{
	switch(n)
	{
		case 4:P2=(P2 & 0x1f)|0x80;break;
		case 5:P2=(P2 & 0x1f)|0xa0;break;
		case 6:P2=(P2 & 0x1f)|0xc0;break;
		case 7:P2=(P2 & 0x1f)|0xe0;break;
		case 0:P2=(P2 & 0x1f)|0x00;break;
	}
}
void smg(unsigned char wei,unsigned char shu)
{
	suocun(6);
	P0=0x01<<wei;
	suocun(7);
	P0=Duan[shu];
	Delaysmg(500);
	P0=0xff;
}
void xianshi()
{
	smg(0,Timer[2]/16);
	Delaysmg(100);
	smg(1,Timer[2]%16);
	Delaysmg(100);
	
	smg(3,Timer[1]/16);
	Delaysmg(100);
	smg(4,Timer[1]%16);
	Delaysmg(100);
	
	smg(6,Timer[0]/16);
	Delaysmg(100);
	smg(7,Timer[0]%16);
	Delaysmg(100);

}
void main()
{
	 Ds1302();
	while(1)
	{
		readds();
		 xianshi();
	}
}

PCF8591——数模转换 AD/DA

unsigned char Ad_read(unsigned char addr)
{
	unsigned char temp;
	IIC_Start();
	IIC_SendByte(0x90);//дÈë
	IIC_WaitAck();
	IIC_SendByte(addr);//Òª¶ÁµÄÊÇ
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0x91);//¶Á
	IIC_WaitAck();
	temp = IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	return temp;
}

void Da_write(unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(0x90);//дÈë
	IIC_WaitAck();
	IIC_SendByte(0x41);//ʹÄÜDAC
	IIC_WaitAck();
	IIC_SendByte(dat);//дÈë
	IIC_WaitAck();
	IIC_Stop();
}

经典的IIC。

读——

开始IIC,发送找到模块(0x90),等待,然后从哪里读数据,等待,然后IIC开始读,停止响应,然后IIC停止。

写——

开始 写数据,写入到0x41(0x43)等待响应,写入,然后写入。

测试代码:

#include <STC15F2K60S2.H>
#include <iic.h>
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};
unsigned char dat;
void Delay(unsigned int t)
{
	while(t--);
}
void suocun(unsigned char n)
{
	switch(n)
	{
		case 4:P2=(P2 & 0x1f)|0x80;break;
		case 5:P2=(P2 & 0x1f)|0xa0;break;
		case 6:P2=(P2 & 0x1f)|0xc0;break;
		case 7:P2=(P2 & 0x1f)|0xe0;break;
		
	}	
}
void shuma(unsigned char wei,unsigned char shu)
{
	suocun(6);
	P0=0x01<<wei;
	suocun(7);
	P0=Duan[shu];
	Delay(500);
	P0=0xff;
}
void xianshi()
{
	shuma(1,1);
	Delay(100);
	shuma(2,2);
	Delay(100);
}
void chuli()
{
	dat=Ad_read(0x43);
	shuma(0,dat/100%10);
	Delay(100);
	shuma(1,dat/10%10);
	Delay(100);
	shuma(2,dat%10);
	Delay(100);

}
void main()
{
	
	while(1)
	{
		chuli();
	}
}

超声波——

左边发松所以左边为TX ,右边为RX

void Ut_Wave_init()
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		TX=1;
		Delay12us();
		TX=0;
		Delay12us();
	}
}
unsigned char Ut_Wave_Data()
{
	unsigned int time;
	TMOD &= 0x0f;
	TH1=TL1=0;
	Ut_Wave_init();
	TR1=1;
	while((RX==1)&&(TF1 == 0));
	TR1=0;
	if(TF1==0)
	{
		time = TH1<<8|TL1;
		return (time*0.017);
	}
	else
	{
		TF1=0;
		return 0;
	}
}

发送一个方波信号,

然后就是用定时器1去完成,波的计算。发送完成之后开启定时器,然后等待,如果RX==0 或者计数溢出(TF1=1)就会退出,停止计数。得到TH1和TL1。然后输出距离.

实例代码:

#include <STC15F2K60S2.H>
#include <intrins.h>
sbit TX = P1^0;
sbit RX = P1^1;
float
	jvli;
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};

void Delay12us()		//@12.000MHz
{
	unsigned char i;

	_nop_();
	_nop_();
	i = 33;
	while (--i);
}
void Delay(unsigned int t)
{
	while(t--);
}
void suocun(unsigned char n)
{
	switch(n)
	{
		case 4:P2= (P2 & 0x1f)|0x80;break;
		case 5:P2= (P2 & 0x1f)|0xa0;break;
		case 6:P2= (P2 & 0x1f)|0xc0;break;
		case 7:P2= (P2 & 0x1f)|0xe0;break;
	}
}
void smg(unsigned char wei,unsigned char shu)
{
	suocun(6);
	P0=0x01<<wei;
	suocun(7);
	P0=Duan[shu];
	Delay(500);
	P0=0xff;
}
void Ut_Wave_init()
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		TX=1;
		Delay12us();
		TX=0;
		Delay12us();
	}
}
unsigned char Ut_Wave_Data()
{
	unsigned int time;
	TMOD &= 0x0f;
	TH1=TL1=0;
	Ut_Wave_init();
	TR1=1;
	while((RX==1)&&(TF1 == 0));
	TR1=0;
	if(TF1==0)
	{
		time = TH1<<8|TL1;
		return (time*0.017);
	}
	else
	{
		TF1=0;
		return 0;
	}
}
void xianshi()
{
	smg(1,(int)jvli/100%10);
	Delay(100);
	smg(2,(int)jvli/10%10);
	Delay(100);
	smg(3,(int)jvli%10);
	Delay(100);

}
void main()
{
	while(1)
	{
	jvli=Ut_Wave_Data();
		xianshi();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

奶牛均分

解法&#xff1a; 假设编号从左到右递增&#xff0c;奶牛每次只能去往左边的牛圈。因此等分最大奶牛数小于等于最右边牛圈奶牛数&#xff0c;不妨设数为k&#xff0c;那么a[i]>k&#xff0c;a[i-1]>2k。。。 做后缀和二分答案就可找到k #include<iostream> #inc…

字符串筛选排序 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 输入一个由n个大小写字母组成的字符串&#xff0c; 按照 ASCII 码值从小到大的排序规则&#xff0c;查找字符串中第 k 个最小ASCII 码值的字母(k>1) , 输出该…

CSS学习(3)-浮动和定位

一、浮动 1. 元素浮动后的特点 脱离文档流。不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽可能小&#xff09;&#xff0c;而且可以设置宽 高。不会独占一行&#xff0c;可以与其他元素共用一行。不会 margin 合并&#xff0c;…

C语言易错知识点

1、数组长度及所占字节数 char x[] {"Hello"},y[]{H,e,l,l,o}; x数组的长度为5&#xff0c;y的长度也是5 x、y数组所占字符串为6为 51(\0)6 strlen&#xff08;&#xff09;函数得到的是数组的长度 2、%%与%的优先级 #include<stdio.h> int main(){ int a…

HarmonyOS4.0—自定义渐变导航栏开发教程

前言 今天要分享的是一个自定义渐变导航栏&#xff0c;本项目基于鸿蒙4.0。 先看效果&#xff1a; 这种导航栏在开发中也比较常见&#xff0c;特点是导航栏背景色从透明到不透明的渐变&#xff0c;以及导航栏标题和按钮颜色的变化。 系统的导航栏无法满足要求&#xff0c;我们…

Visual Studio 2013 - 高亮设置括号匹配 (方括号)

Visual Studio 2013 - 高亮设置括号匹配 [方括号] 1. 高亮设置 括号匹配 (方括号)References 1. 高亮设置 括号匹配 (方括号) 工具 -> 选项… -> 环境 -> 字体和颜色 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

基于信号分解的几种一维时间序列降噪方法(MATLAB R2021B)

自适应信号分解算法是一种适合对非平稳信号分析的方法&#xff0c;它将一个信号分解为多个模态叠加的形式&#xff0c;进而可以准确反应信号中所包含的频率分量以及瞬时频率随时间变化的规律。自适应信号分解算法与众多“刚性”方法(如傅里叶变换&#xff0c;小波变换)不同&…

R语言实现多要素偏相关分析

偏相关分析是指当两个变量同时与第三个变量相关时&#xff0c;将第三个变量的影响剔除&#xff0c;只分析另外两个变量之间相关程度的过程&#xff0c;判定指标是相关系数的R值。 在GIS中&#xff0c;偏相关分析也十分常见&#xff0c;我们经常需要分析某一个指数与相关环境参…

浅谈一下对于DDD模式的理解2

浅谈一下对于DDD模式的理解&#xff0c;相互学习交流&#xff0c;不对之处欢迎大家指正。 在说到DDD(Domain-Driven Design)设计模式之前&#xff0c;先要说下我们在对系统进行架构设时需要遵循的几个原则&#xff1a; 单一职责&#xff08;SRP&#xff09; "单一职责原则…

原来这才是帕金森症状得到缓解的秘诀!

帕金森是一种影响神经系统的慢性疾病&#xff0c;主要症状包括震颤、肌肉僵硬和运动缓慢。如不及时治疗控制&#xff0c;症状可能会逐渐加重&#xff0c;严重影响生活质量。患者可能丧失自理能力&#xff0c;出现跌倒、骨折等并发症&#xff0c;还可能伴随认知障碍和情绪问题。…

考研数学|汤家凤《1800题》什么阶段做?值不值得做?

1800总的来说还是一本对基础不太好的同学一本不错的习题册&#xff0c;当然他可能对基础较好的同学来说题目量过大 考研数学备考&#xff0c;刷1800题是否必要&#xff1f;从我的经验来看&#xff0c;刷1800题并不是绝对必要的&#xff0c;而且传统习题册存在一些问题&#xf…

计算机组成原理 — 计算机的运算方法

计算机的运算方法 计算机的运算方法无符号数和有符号数概念有符号数有符号数又分真值和机器数原码表示法补码表示法反码表示法三种机器数的特点移码表示法 数的定点表示和浮点表示定点表示浮点表示 定点运算移位运算算数移位规则加法与减法运算乘法运算除法运算概述恢复余数法加…

ChatGPT人工智能对话系统源码 电脑版+手机端+小程序三合一 带完整的安装代码包以及搭建教程

ChatGPT人工智能对话系统的研发&#xff0c;源于对自然语言处理技术的深入研究和探索。在人工智能领域&#xff0c;自然语言处理是实现人机交互的关键技术之一。通过模拟人类的自然语言交流方式&#xff0c;对话系统能够理解用户的意图和需求&#xff0c;并给出相应的回应。 以…

【Qt学习笔记】(三)--编写上位机软件(ui设置、样式表serialport串口接收数据、Qchart显示波形)

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    这段时间大部分都是在学Qt&#xff0c;前面想着跟着书一章章的学&#xff0c;但是发现这个效率极低&#xff0c;所以就改变了学习的方法&#xff0c;那…

QT6实现创建与操作sqlite数据库及读取实例(一)

一.Qt为SQL数据库提供支持的基本模块&#xff08;Qt SQL&#xff09; Qt SQL的API分为不同层&#xff1a; 驱动层 SQL API层 用户接口层 1.驱动层 对于Qt 是基于C来实现的框架&#xff0c;该层主要包括QSqlDriver&#xff0c;QSqlDriverCreator,QSqlDriverCreatorBase,QSqlPlug…

初识GO语言

是由google公司推出的一门编程语言&#xff0c;12年推出的第一个版本 Go的特点 Go为什么能在最近的IT领域炙手可热 集python简洁&C语言的性能于一身 21世纪的C语言 顺应容器化时代的到来 区块链的崛起 学习一门编程语言可以划分为下面这三个步骤 安装 编译器 or 解…

C语言种sizeof()和strlen的区别

sizeof 是 C 语言内置的操作符关键字&#xff0c;而 strlen 是 C 语言库函数&#xff1b; sizeof 仅用于计算数据类型的大小或者变量的大小&#xff0c;而 strlen 只能以结尾为 \0 的字符串作为参数&#xff1b; 编译器在编译时就计算出了 sizeof 的结果&#xff0c;而 strlen …

【内核内存管理、动态分配及IO访问、LED驱动】

一、内核内存管理框架 内核将物理内存等分成N块4KB&#xff0c;称之为一页&#xff0c;每页都用一个struct page来表示&#xff0c;采用伙伴关系算法维护 内核地址空间划分图&#xff1a; 3G~3G896M&#xff1a;低端内存&#xff0c;直接映射 虚拟地址 3G 物理地址 ​ 细…

YOLOv8独家改进:block改进 | RepViTBlock和C2f进行结合实现二次创新 | CVPR2024清华RepViT

💡💡💡本文独家改进:CVPR2024 清华提出RepViT:轻量级新主干!从ViT角度重新审视移动CNN,RepViTBlock和C2f进行结合实现二次创新 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡…

UML学习体会

1. 水在前面 本来写作的水平就很一般&#xff0c;平时写的也少。最近看到一些文章说学习最好的方式是输出&#xff0c;刚好又重温了一遍UML方面的基础&#xff0c;所以想记录点学习心得。而且说实话这玩意平时基本不怎么用&#xff08;偶尔倒是看看别人的成果&#xff09;&…