基于ARM的餐厅点餐系统的设计与实现

news2024/11/28 16:48:15

基于ARM的餐厅点餐系统的设计与实现

系统简介

        本设计主要将 STM32F103ZET6 芯片作为无线订购系统主要控制芯片,分为顾客终端和厨师终端。顾客通过 LCD 显示屏浏览菜单并点击触摸屏选择自己所需菜单,并经过有线连接到 PC 端上位机,将订餐信息上传到餐厅内部数据库,实现数据更新和存储功能。同时点餐信息经过主蓝牙模块 HC-05 无线通信技术发送到厨师终端,厨师终端通过从蓝牙模块将菜单信息汇总到厨师终端显示屏幕上,然后厨师通过语音模块 LD3320 将处理过的菜单通过语音快速清除,完成餐厅点餐操作系统的整体功能。并经过多次测试,该系统的硬件模块功能和软件上位机及数据库数据的更新、存储功能已完成。

系统综述

        整个设计总体流程为:开始将硬件和软件准确连接,上电做准备工作,然后初始化硬件各个模块,顾客端界面打开,触屏点击选择菜单,菜单分上页和下页,选择完毕后,判断是否点击“确认”按钮,如果点击“确认”按钮,则通过主蓝牙发送,厨师端从蓝牙模块接收,将菜单传送到厨师端显示屏上,否则可以重新选择菜单。厨师端接收到菜单后,可以根据原材料的库存选择是否进行处理,如果原材料充足,厨师处理后,可以通过语音模块进行菜单清除,如果厨师选择不处理,可以进行反馈。最后将顾客菜单通过有线连接到点餐信息上位机上,进行菜单信息存储,物料剩余情况对比,更新,修改等操作,最终结束整个设计模块的工作。
在这里插入图片描述

系统流程

        本设计主要由五部分组成,分别为:STM32F103zet6战舰板控制板、TFT-LCD液晶显示器、蓝牙传输模块、语音模块、上位机。其中主控制器以 STM32F103zet6芯片作为主控模块,完成菜单点餐、信息传送和接收、信息确认等功能,保证点餐系统能够完整实现。TFTLCD显示屏运用Ili9341芯片进行管理的,主要是控制TFT-LCD显示屏上面显示点餐菜单信息、菜单确认信息、菜单传送信息(仅限于与蓝牙一定距离内);蓝牙传输模块hc-05实现客户方和厨师方之间的相接,进行点餐信息传达,完成菜单的传送、接收功能。语音模块LD3200是实现厨师端将处理过的菜单,通过语音将其菜单进行取消,更便于厨师端处理菜单,完成菜单处理过程。上位机实现餐厅管理员登录和密码修改功能,连接下位机配置环境、查询历史菜单、消费菜品等功能。
在这里插入图片描述

材料

硬件材料

  • 两块正点原子战舰V3开发板(带显示屏)
  • 两块HC05蓝牙模块
  • LD3320语音模块

软件材料

  • Keil 5
  • VS2017
  • MySQL数据库

展示视频

下位机视频

基于ARM的餐厅点餐系统下位机

上位机视频

基于ARM的餐厅点餐系统的设计与实现上位机

制作

        下位机使用的芯片是STM32F103ZET6,软件使用的是Keil,语言是C。

硬件连接

  1. LD3320语音模块连接
    在这里插入图片描述
  2. 客户端蓝牙连接USART3
  3. 厨师端蓝牙连接USART1
  4. 上位机连接客户端硬件(T口线。跳线帽要插上)

下位机制作

        本系统是以Cortex-M3 STM32F103zet6为主要控制芯片设计的餐厅点餐系统。硬件各个模块连接主要通过 USB串行口连接电脑电源给STM32F103zet6芯片供电,然后运用杜邦线将蓝牙主传输模块HC-05与顾客端控制器进行连接,控制点餐菜单的确认和发送。蓝牙从模块与厨师端控制器进行连接,将传输信息实时显示在TFTLCD液晶显示屏上,同时将语音模块也连接起来,两蓝牙之间可以进行无线菜单通信,并将顾客菜单信息传送到上位机,同时控制实时时钟将菜单点餐时间同步上传,组成完整的模拟餐厅点餐硬件系统。全部体系的硬件和软件系统测试是经由与PC机连线相结合的方法来完成的。软件通过运用Keil5软件进行C语言代码编写,编译完成之后通过USB转TTL串口调试工具,进行一键下载将程序烧录在STM32F103zet6芯片上,从STM32F103zet6派生的引脚连接到硬件外围设备,控制各部件正常工作。

在这里插入图片描述

蓝牙连接

        本设计核心就是使用蓝牙完成两个板子的菜单的信息传递功能,顾客进行点餐,与其相连的主蓝牙模块将菜单数据发送出去,然后通过与厨师端连接的从蓝牙模块的接收,将点餐的菜单显示到厨师端显示屏上,完成主从蓝牙模块的菜单通讯功能。

本设计通过AT指令设置将两蓝牙上电自动配对。 参考https://blog.csdn.net/weixin_42320020/article/details/88562539

AT    					进入AT指令模式
AT+RESET   				重启设备
AT+ORGL    				恢复默认状态
AT+ADDR?   			获取模块蓝牙地址(记下来像下边那样 两个)
AT+ROLE?   			查询模块角色
AT+ROLE=1或者AT+ROLE=0  一个设置为主角色  一个设置位从角色
AT+BIND=2018,12,140851  绑定蓝牙地址 注意是逗号  两个设备分别绑定对方地址
AT+CMODE=0   			两个设备都设置为指定蓝牙连接模式
AT+LINK=2018,12,141598  主设备去连接从设备 连接蓝牙地址  注意逗号

模块1+ADDR:2018:12:140851(不同设备ADDR地址不同,此地址为演示地址)
模块2+ADDR:2018:12:141598

按顺序输入以上指令即可。
请务必保证两蓝牙连接成功!!!代码中没有关于蓝牙的设置。

语音模块设计

        LD3320工作时,首先开始语言的ASR识别过程,由微程序控制器发出复位标志RSTB和中断标识。为了防止由于硬件问题导致识别的不正常,需要多次启动ASR识别过程来保证语言模块的识别过程可以正确的运行。然后进行初始化ASRLD_AsrStart()识别模块,初始化每个寄存器。将要识别的菜名词语添加到LD3320芯片识别列表中,发动识别并准备中断回应功能,以开启中断启用程序。若是芯片内部不正常,就重启语音识别芯片,重新初始化LD3320位置寄存器的识别流程。通过BA寄存器存储点餐菜单,并在数字寄存器和C5寄存器中搜索答案与原有寄存器存储的菜名词语进行比对,找到正确答案,完成菜单识别流程。

在这里插入图片描述
语音识别部分代码:

static uint8 LD_AsrAddFixed(void)
{
	uint8 k, flag;
	uint8 nAsrAddLength;
	#define DATE_A 9    //数组二维数值
	#define DATE_B 23		//数组一维数值
	//添加关键词,用户修改
	uint8  sRecog[DATE_A][DATE_B] = {
	 			"qing zheng pang xie",\
				"yang rou chuan",\
				"mu tang dan gao",\
				"la zi ji kuai",\
				"xi hong shi chao ji dan",\
				"qing cai ji dan mian",\
				"fu shou yu",\
				"zi shu zhou"\
		
	};	
	uint8  pCode[DATE_A] = {
	 															CODE_QZ,	\
																CODE_YR,	\
																CODE_MT,\
																CODE_LA,	\
																CODE_XH,		\
																CODE_QC, \
																CODE_FS, \
																CODE_ZS \
	};	//添加识别码,用户修改
	flag = 1;
	for (k=0; k<DATE_A; k++)
	{			
		if(LD_Check_ASRBusyFlag_b2() == 0)
		{
			flag = 0;
			break;
		}

		LD_WriteReg(0xc1, pCode[k] );
		LD_WriteReg(0xc3, 0);
		LD_WriteReg(0x08, 0x04);
		LD3320_delay(1);
		LD_WriteReg(0x08, 0x00);
		LD3320_delay(1);

		for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
		{
			if (sRecog[k][nAsrAddLength] == 0)
				break;
			LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
		}
		LD_WriteReg(0xb9, nAsrAddLength);
		LD_WriteReg(0xb2, 0xff);
		LD_WriteReg(0x37, 0x04);
	}	 
	return flag;
}
下位机整体逻辑软件设计

客户端点餐->厨师端收到->语音消除

整体逻辑部分代码:

void LD3320_main(void)
{
	LD3320_init();	  
	LCD_Clear(WHITE);	
	nAsrStatus = LD_ASR_NONE;//初始状态:没有在作ASR
	while(1)
	{
		sprintf(k_id,"%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d",bz[0],bz[1],bz[2],bz[3],bz[4],bz[5],bz[6],bz[7],bz[8],bz[9],bz[10],bz[11],bz[12],bz[13],bz[14],bz[15],bz[16],bz[17],bz[18],bz[19]);
		//LCD_ShowString(0,5,210,16,16,k_id);//点菜状态
		LCD_ShowString(0,5,210,16,16,"  Welcome come !");
		display();
		switch(nAsrStatus)
		{
			case LD_ASR_RUNING:
			case LD_ASR_ERROR:		
					break;
			case LD_ASR_NONE:
					nAsrStatus=LD_ASR_RUNING;
					if (RunASR()==0)//启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算
					{		
						nAsrStatus = LD_ASR_ERROR;
					}
					break;
			case LD_ASR_FOUNDOK:
					 nAsrRes = LD_GetResult( );//一次ASR识别流程结束,去取ASR识别结果										 
					 //printf("\r\n识别码:%d", nAsrRes);			 
					 switch(nAsrRes)		   			//对结果执行相关操作,客户修改
						{
							case CODE_QZ:					
										if(bz[1]>0)bz[1]--;
															 break;
							case CODE_YR:	 					
										if(bz[2]>0)bz[2]--;
															 break;
							case CODE_MT:				
											if(bz[3]>0)bz[3]--;
															break;
							case CODE_LA:				
											if(bz[4]>0)bz[4]--;
															break;
							case CODE_XH:					
											if(bz[5]>0)bz[5]--;
															break;
							case CODE_QC:					
											if(bz[6]>0)bz[6]--;
															break;
							case CODE_FS:				
											if(bz[7]>0)bz[7]--;
															break;
							case CODE_ZS:				
											if(bz[8]>0)bz[8]--;
															break;
							default:break;
						}	
						LCD_Clear(WHITE);	
					nAsrStatus = LD_ASR_NONE;
					break;
			case LD_ASR_FOUNDZERO:
			default:
					nAsrStatus = LD_ASR_NONE;
					break;
			}//switch
		//开发板测试
		Board_text(nAsrRes );
	}// while
}

数据库制作

        数据库采用的是MySQL数据库。本设计上位机进行的数据更新需要连接名为本地服务器,数据库为“vs”。其中密码登陆界面和修改界面建立表“keytable”,包括数据类型name表示管理员用户名,PASSWORD表示餐厅管理员设置的密码;在工作区更新数据库饭菜品种时建立表“menu”,其中包含数据类型price表示每个对应菜品的价格,name
是菜的名字,Material表示做此菜品需要消耗的主要原材料,num便是该菜品耗损原材料所必要的数目;同时历史点菜记录建立表“Sales”,其中数据类型time表示顾客点餐菜单时间,name表示点餐菜名;建立表“Surplus”表示剩余原料,提供管理员有效的餐厅原材料储存情况,其中数据类型num表示剩余材料数量,name表示剩余材料名称;sumfood表就是餐厅顾客每个菜品点餐的总数量,num表示每个菜品点餐总数量,name表示菜品名称;建立表“shop”表示购物建议,num表示要进材料的数量,即也是消费的总数量,name表示要进材料的名称。同时在点击“已进货”选项时,剩余材料就会更新到初始原材料总的数量表示已进货。当点击“更新数据库”时,全表的数据也会更新,完成数据库数据的修改、存储功能。

数据库
在这里插入图片描述
数据库表
在这里插入图片描述在这里插入图片描述

上位机制作

        软件设计主要通过Visual Studio 2017软件编写餐厅管理系统上位机,连接数据库名字为“vs”。餐厅点餐管理系统上位机的设计首先需要进行闪屏欢迎界面,进行账号密码登陆,如果管理员名称和密码正确,就进入餐厅菜单主界面,而主界面又分为显示区和数据区,显示栏主要包括选择按钮,选择要查询的项目,如查询餐厅最近销售账单、最受欢迎菜品、历史账单等。而数据区主要完成数据的修改、更新操作。即当下位机顾客端进行点菜,消耗了餐厅原材料,通过有线连接到上位机,进行数据库数据的比对,对原有的数据需要进行增加、减少等更新操作,并最终显示出来,这就是上位机的工作区所承担的责任。完成整个系统操作,就结束了上位机软件的设计工作。

在这里插入图片描述

串口配置连接设计

        PC端和单片机数据传输需要通过串口连接。首先需要通过函数 toolstripTextBox1.Text 进行串口连接设置,检测串口连接所需的端口,可以进行端口选择,本设计连接的端口为“COM8”端口,设置的波特率与主顾客点餐端的波特率保持一致,为115200。当进行串口连接时,点击“打开串口”,如果连接成功,就提示“串口连接成功”,若是连接失败,就会提示“连接失败”,需要重新连接。假如连接出错,点击“断开连接”,窗口会提示“确定断开连接”如果确定,点击“是”,如果不确定,点击“否”就可以完成串口配置过程。
串口设计部分代码:

private void toolStripTextBox1_Click(object sender, EventArgs e)
{
    if (toolStripTextBox1.Text == "打开串口")
    {
        try
        {
            serialPort1.PortName = toolStripComboBox1.Text;
            serialPort1.BaudRate = Convert.ToInt32(toolStripComboBox2.Text);
            serialPort1.Open();
            toolStripTextBox1.Text = "关闭串口";
            MessageBox.Show("串口连接成功!");
        }
        catch
        {
            MessageBox.Show("连接串口失败!请检查端口!", "错误!");
        }                
    }
    else
    {
        if (MessageBox.Show("确认断开连接?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
        {
            try
            {
                serialPort1.Close();
                toolStripTextBox1.Text = "打开串口";
            }
            catch
            {
                MessageBox.Show("连接关闭失败!请检查端口!", "错误!");
            }
        }
    }                
}
连接数据库

连接数据库部分代码:

string Connectstr = "Data Source=.;Initial Catalog=vs;Integrated Security=True";
mysql = new SqlConnection(Connectstr);
SqlCommand Mycomm = new SqlCommand("Select * From keytable", mysql);
mysql.Open();
int intcont = Convert.ToInt32(Mycomm.ExecuteScalar());
mysql.Close();
if (intcont > 0)
{
    mysql.Open();
    SqlDataReader dr = Mycomm.ExecuteReader();
    if (dr.Read())
    {
        f1.Password = dr["password"].ToString().Trim();
        //label5.Text = f1.Password;
    }
    dr.Close();
    mysql.Close();
}

更新数据库部分代码:

SqlCommand Mycomm1 = new SqlCommand("update Surplus set num = 20 where name = '" + name + "'", mysql);
mysql.Close();
mysql.Open();
int i = Mycomm1.ExecuteNonQuery();
mysql.Close();
Mycomm1 = new SqlCommand("update Surplus set num = 5 where name ='鱼'", mysql);
mysql.Open();
Mycomm1.ExecuteNonQuery();
mysql.Close();
Mycomm1 = new SqlCommand("update Surplus set num = 5 where name = '紫薯'", mysql);
mysql.Open();
Mycomm1.ExecuteNonQuery();
mysql.Close();
上位机整体逻辑

        软件上位机功能实现有餐厅点餐管理员密码登陆,同时也能够进行密码更改。完成管理员密码登陆后,进行串口配置,连接成功后,才算完成了PC端与单片机的连接。然后进行剩余材料,历史菜单记录,购物建议,点菜总量、销售记录五个项目的查询,更新数据库操作。在此过程中,由于有历史菜单的记录,导致近期菜单记录需要进行搜索才能看到,因此在管理中加入了清空历史记录功能,可以更明确地看到最近餐厅的消费情况。最终完成数据库修改、增添、更新功能。

整体逻辑部分代码:

if (comboBox1.Text == "购物建议")
{
    int[] nd = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 };
    for (int m = 0; m < 8; m++)
    {
        string name = "青青子衿";
        if (m == 0) { name = "螃蟹"; }
        else if (m == 1) { name = "羊肉"; }
        else if (m == 2) { name = "鸡蛋"; }
        else if (m == 3) { name = "鸡肉"; }
        else if (m == 4) { name = "西红柿"; }
        else if (m == 5) { name = "面"; }
        else if (m == 6) { name = "鱼"; }
        else if (m == 7) { name = "紫薯"; }
        
        SqlCommand Mycomm = new SqlCommand("Select * From shop where name = '" + name + "'", mysql);
        mysql.Close();
        mysql.Open();
        int intcont = Convert.ToInt32(Mycomm.ExecuteScalar());
        mysql.Close();
        if (intcont >= 0)
        {
            mysql.Open();
            SqlDataReader dr = Mycomm.ExecuteReader();
            if (dr.Read())
            {
                nd[m] = Convert.ToInt16(dr["num"]);
                nd[m] = nd[m] + id2[m];
                id2[m] = 0;
                //textBox2.AppendText(nd[m].ToString() + " ");
            }
            dr.Close();
            mysql.Close();
            //textBox1.Text = "update shop set num = " + nd[m] + " where name = '" + name + "'";
            SqlCommand Mycomm1 = new SqlCommand("update shop set num = " + nd[m] + " where name = '" + name + "'", mysql);
            //label6.Text = textBox3.Text.Trim();
            mysql.Open();
            int i = Mycomm1.ExecuteNonQuery();
            mysql.Close();
        }
        else
        {
            MessageBox.Show("查询失败", "错误!");
        }
    }
}

总结

        在本设计中,完成了顾客通过LCD显示屏浏览菜单,并通过手指触摸点击屏幕选择菜单点餐,将点餐菜单消息传送到上位机,进行上位机连接,查询餐厅历史点餐记录,餐厅原材料的存储以及余额情况,根据餐厅销售状况,提供购买原材料建议完成数据库的数据更新和储存功能。同时顾客点餐信息通过主蓝牙模块发送到厨师端,厨师终端通过从蓝牙模块的接收,将点餐信息汇总到显示屏上,并通过语音模块将处理的菜单报出菜名进行清除,完成顾客菜单处理过程。本设计完成了该餐厅点餐系统简单的基础功能,还存在着需要完善提高的地方。例如,顾客终端的选择菜单界面,需要通过更精密的计算,将选择菜单按钮进行优化,实现点击菜名就可以完成菜名选择功能。同时顾客终端和厨师终端菜单的显示也有限,不能进行超过两页菜名的显示,需要进一步完善菜名显示,达到能够多页显示菜名,丰富餐厅菜单的选择。餐厅两终端的通讯距离也需要进一步改善,需要通过选择WIFI或者nrf2401增大通讯距离,能够使该系统应用到大型餐厅,确保菜单传输通信快速、高效。同时在软件设计中,界面只完成了简单的基本连接、查询功能,只有餐厅信息,没有与顾客的互动。在这里可以添加餐厅与客户的信息交流平台,提供客户反馈平台,接收客户对餐厅合理性意见等问题。该系统还存在着一些其它需要完善改进的地方,在今后的学习过程中,需要更全面、更细致的去完善。

资料源码地址https://download.csdn.net/download/weixin_42320020/88790551

禁止转载!!!

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

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

相关文章

人工智能基础-Numpy矩阵运算-聚合操作

加、减、乘、除、整除 幂、取余、倒数、绝对值 三角函数 e的x次方、3的x次方、logx、log2为底、log10为底 矩阵运算 加、减、乘&#xff08;对应数相乘&#xff09;、矩阵相乘运算、转至 向量和矩阵的运算 加法 对应相加 改变维度后相加 乘法 矩阵的逆 聚合操作 …

单元测试实践

一、写在开始写单元测试前 1.1 背景 我们开发都知道单元测试的重要性&#xff0c;而且每个开发都有要写单元测试的意识单元测试和代码编写结构息息相关&#xff0c;业界常用专业名词TDD&#xff08;测试驱动开发&#xff09;&#xff0c;言外之意我们开始编写代码的时候就已经…

如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

自学Java的第54、55、56、57天

多线程 创建方式一 写法 注意&#xff1a; 创建方法二 写法 写法 简化&#xff1a; 创建方法三 写法 Thread的常用方法 写法 线程安全 用程序模拟 解决方法&#xff1a;线程同步 方法一 同步代码块 写法 方法二 同步方法 写法 方法三 Lock锁 写法 线程通信&#xff08;了解&…

壹[1],Xamarin开发环境配置

1&#xff0c;环境 VS2022 注&#xff1a; 1&#xff0c;本来计划使用AndroidStudio&#xff0c;但是也是一堆莫名的配置让人搞得很神伤&#xff0c;还是回归C#。 2&#xff0c;MAUI操作类似&#xff0c;但是很多错误解来解去&#xff0c;且调试起来很卡。 3&#xff0c;最…

企业计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密流程

网络是一把双刃剑&#xff0c;随着网络技术的不断发展与应用&#xff0c;企业的生产效率大大提升&#xff0c;企业的数据安全关乎着企业的发展&#xff0c;保护好企业的数据直观重要&#xff0c;近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服…

Mistral-7B本地运行【Ollama】

Mistral AI 目前提供两种类型的大型语言模型访问方式&#xff1a; 提供按使用量付费访问最新模型的 API&#xff0c;开源模型可在 Apache 2.0 许可证下使用&#xff0c;可在 Hugging Face 上或直接从文档中获取。 在本指南中&#xff0c;我们概述了 Mistral 7B LLM 以及如何提…

多核CPU 缓存一致性(总线嗅探、MESI协议)

内存与CPU缓存的写一致性 CPU Cache 通常分为三级缓存&#xff1a;L1 Cache、L2 Cache、L3 Cache&#xff0c;级别越低的离 CPU 核心越近&#xff0c;访问速度也快&#xff0c;但是存储容量相对就会越小。其中&#xff0c;在多核心的 CPU 里&#xff0c;每个核心都有各自的 L1/…

孪生卷积神经网络(Siamese Convolutional Neural Network)的设计思路

孪生卷积神经网络&#xff08;Siamese Convolutional Neural Network&#xff09;是一种特殊类型的卷积神经网络&#xff0c;主要用于处理需要成对比较的数据&#xff0c;例如判断两个输入是否相似。 以下是孪生卷积神经网络的基本结构&#xff1a; 输入层&#xff1a;这一层…

python IDLE无法打开,提示错误#10051 向一个无法连接的网络尝试了一个套接字操作。

系统&#xff1a;Windows 10 软件&#xff1a;python 3.9.13 打开软件提示错误#10051 向一个无法连接的网络尝试了一个套接字操作。软件自动闪退。 解决方法&#xff1a; 可能是系统自动更新的问题或其他问题&#xff0c;导致防火墙阻止python连接本地端口。在防火墙上建立通…

win10使用IE访问某些特殊地址的极简办法(成功有效)

前言&#xff1a;看了好多其它办法&#xff0c;都没什么作用~ 1、打开win10默认的Edge浏览器的设置&#xff1a;点击右上角的三个点&#xff0c;然后里面有个设置选项 2、找到默认浏览器选项 3、添加你要访问的地址 5、在Edge中去访问你要访问的地址&#xff0c;就好了

非接触式激光测厚仪 单点/三点/多点在线测厚设备

关键字: 非接触式激光测厚仪, 板材厚度检测,激光测厚仪,单点测厚仪,三点测厚仪,多点测厚仪,扫描式激光测厚仪, 厚度是各类板材品质必检的尺寸之一 在实际测量中&#xff0c;板材厚度的测量&#xff0c;尤其是宽板中间位置的厚度尺寸测量&#xff0c;是一项较为困难的工作。为此…

揭秘二进制之谜:为何-128与+128的二进制表示相同,都是1000 0000?

8位有符号整数-128的二进制码是1000 0000&#xff0c;而128的二进制码也是1000 0000&#xff0c;你是不是觉得很奇怪&#xff1f; 下面就让我来解释一下。 从-128到127的跨越 8位二进制数能够表示2^8共256个不同的值&#xff0c;从0000 0000到1111 1111。在8位有符号整数的世…

【2024】大三寒假再回首:缺乏自我意识是毒药,反思和回顾是解药

2024年初&#xff0c;学习状态回顾 开稿时间&#xff1a;2024-1-23 归家百里去&#xff0c;飘雪送客迟。 搁笔日又久&#xff0c;一顾迷惘时。 我们饱含着过去的习惯&#xff0c;缺乏自我意识是毒药&#xff0c;反思和回顾是解药。 文章目录 2024年初&#xff0c;学习状态回顾一…

带大家详细了解msvcr120.dll丢失的原因,msvcr120.dll丢失怎样修复的方法

在使用电脑和运行应用程序时&#xff0c;我们经常会遇到与动态链接库&#xff08;Dynamic Link Library, DLL&#xff09;文件相关的错误。其中之一是 "msvcr120.dll 丢失" 的错误提示。今天我们就来详细的了解一下msvcr120.dll这个文件和分享msvcr120.dll丢失怎样修…

18- OpenCV:基于距离变换与分水岭的图像分割

目录 1、图像分割的含义 2、常见的图像分割方法 3、距离变换与分水岭介绍 4、相关API 5、代码演示 1、图像分割的含义 图像分割是指将一幅图像划分为若干个具有独立语义的区域或对象的过程。其目标是通过对图像进行像素级别的分类&#xff0c;将图像中不同的区域或对象分离…

MySQL原理(四)索引(3)索引失效与索引区分度

一、索引失效&#xff1a; 首先未使用索引列作为查询条件索引是肯定会生效的&#xff0c;还有其他的情况&#xff0c;索引列做为了查询条件也失效了&#xff1a; ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(NAME, age, pos); 1、select 语句、order by语句&#xf…

TensorFlow2实战-系列教程5:猫狗识别2------数据增强

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 猫狗识别1 数据增强 猫狗识别2------数据增强 猫狗识别3------迁移学习 1、猫狗识别任…

国家级专精特新“小巨人”第一至五批名单

国家级专精特新“小巨人”第一至五批名单 1、来源&#xff1a;工信部 2、样本量&#xff1a;1.29W第一批企业共248家&#xff0c;A股上市35家&#xff1b;第二批企业共1744家&#xff0c;A股上市157家&#xff1b;第三批企业共2930家&#xff0c;A股上市119家&#xff1b;第四…

【C++干货铺】哈希结构在C++中的应用

目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 1.unordered_map的构造 2. unordered_map的容量 3. unordered_map的迭代器 4. unordered_map的元素访问 5. unordered_map的查询 6. unordered_map的修改操作 7. unordered_map的桶操作 底层结构 …