毕业设计 基于STM32的超市扫码结算收银系统


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于STM32的超市扫码结收银系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:5分

🧿 项目分享:见文末!


在这里插入图片描述

设计功能:

  • ✨由STM32 OLED 扫码模块 储存模块组成
  • ✨扫码模块用于扫描商品二维码及结算
  • ✨储存模块存储对应的商品汉字库
  • ✨付款界面识别二维码 价格够付款成功

1 简介

二维码识别系统是集数据采集,识别,以及显示信息于一体的数据系统。已经成为我们日常生产,生活中不可缺少的一部分。被广泛应用于金融支付、电子商务和团购消费领域、防伪溯源领域,以及工业生产领域。有着十分重要的应用意义。 二维码识别过程包含图像数据收集、图像矫正与处理 、信息显示。图像数据处理主要是通过硬件部分的摄像头对图像数据进行采集。经过图像的预处理得到的二维码图像再进行识别,对图像的处理进行了算法的优化。同时对系统的改进相比于原有的识别系统增加了存储模块,提高了存储空间识别效率。

2 扫码识别的一般过程

一维条形码的二进制表示方法

条形码的编码方法比较常规和普遍。即用模板组合的方式进行编制。那么何为模板宽度,谓模板宽度就是组成条形码宽度的一个基本单位。EAN-13前文已经提到,他的组成字符为0-9这10个阿拉伯数字字符。每个数字字符都是由两个条和两个空构成。共占据7个模板宽度。每个条的宽度范围在1到4个模板宽度之间。并且都是模板长的整数倍。1和0分别表示了条形码的条和空部分。

在这里插入图片描述

条码字符集是收集了所有一维条形码的字符集合。他的组成是由三个子集。分别为A子集,B子集,C子集。其部分二进制表示如图9所示。一共组成的编码形式有30种,即每个字符有3个表示形式。至于奇偶形式的表示则由二进制1的个数决定。但是,有三个字符是固定的,分别是条形码的起始符,中间分隔符,终止符。其对应的二进制形式分别是101,01010,101。因此他们三个也不会包含在二进制编码表里面。从图9所示的对应表里面也可以看出,每个数字字符集的奇数子集A和偶数子集C的元素是相反的,偶数子集B和偶数子集C是倒序的。

在这里插入图片描述

识别的相关算法

条形码的自动识别技术可以分为两个结构组成。即扫描和译码两部分。扫描结构顾名思义就是将条形码本身携带的信息用一些特殊的设备和技术将其读取出来。比如利用激光,将光信号转换成了电信号。扫描的最终结果是为了得到模板的宽度,也就是条可空的波形的宽度,其方法就是根据条和空的反射不同的效果进行读取。在前文已经提到,条反射回来的是弱信号,而空反射回来的是强信号。译码的原理是接着扫描操作进行的。就是将扫描得到的一些电信号,用一些特定的方式进行翻译,得到最终的数据信息,并且输入客户终端计算机。再将所得到的信息经过一个比较规则的整流电路进行整流处理,最后得到了我们在生活中总能看到的条形码图形。

本文设计的基础是系统识别相应的条码图像到显示在相应的液晶显示器上。系统的运行过程就是是读入图片到识别图片的过程,所以在分析它的功能的时候就按运行的过程进行模块划分。

在这里插入图片描述

便携式商品条形码识别器,上面提到主要由四大模块组成。激光扫描,单片机,12864液晶显示器,电源模块。其工作的大致原理为,激光扫描到条形码并进行存储。同时蜂鸣器开始鸣响,然后扫描器将数据信息通过串口通信传输给单片机,单片机收到信息后会与事先设定好的程序进行对比,并将对比后的信息传输给12864液晶显示器。显示器也会根据事先设计好的程序进行相应的显示格式,并完成工作。

3 二维码扫描识别模块

GM65 条形码二维码扫描识别模块是一种基于激光扫描头的识别设备

在这里插入图片描述

原理介绍

当GM65模块开始工作时,其内部的激光扫描头会发出一束激光光束,扫描通过镜子透过扫描窗口照射到条形码或二维码上。扫描头将扫描结果转化为电信号,通过模块内置的中央处理器进行解码和校验,最终以数字或文本形式输出结果。不同的码制采用不同的解码算法,因此模块需要具有多种码制解码的能力。

工作流程

工作流程主要包括四个步骤:激光扫描、识别、解码和输出。

激光扫描:当启动GM65 条形码二维码扫描识别模块时,内部的激光扫描头会发出一束激光束扫描条形码或二维码,从而捕捉到码制信息。

  • 识别:扫描到码制信息后,GM65模块开始识别码制类型,包括一维码(如EAN-13、CODE-39、ITF-14等)和二维码(如QR码、Data Matrix码等)。

  • 解码:确定码制类型后,GM65模块会使用相应的解码算法对码制信息进行解码,从而得到正确的数字或文本。

  • 输出:最后,GM65模块将解码后的数字或文本以所设置的输出格式方式(如USB、串口、蓝牙等)输出给外部设备,如电脑、收银机等。

在这里插入图片描述

修改配置

因为是扫描二维码的模块,可以通过扫描技术手册提供的二维码进行修改模块的配置。例如修改波特率

代码示例

//初始化串口和中断
void My_USART3_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,  ENABLE);           //开启GPIOB时钟
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,  ENABLE);            //开启APB2总线复用时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,  ENABLE);  
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,  ENABLE);          //开启USART1时钟
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOB ,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOB ,&GPIO_InitStructure);
	
	USART_InitStructure.USART_BaudRate=9600;//波特率
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//控制流模式
	USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART_InitStructure.USART_Parity=USART_Parity_No;//奇偶效验
	USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;
	USART_Init(USART3,&USART_InitStructure);
	
	USART_Cmd(USART3,ENABLE);//使能串口
	
	USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//打开接收非空中断
	
	NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级为1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//子优先级位为1(响应优先级)
	NVIC_Init(&NVIC_InitStructure);//设置相应的中断为响应优先级和抢占优先级
	
}	
 
//编写中断处理函数
void USART3_IRQHandler(void)      //串口3中断服务程序
{
	uint8_t d;
 
	//检测标志位
	if(USART_GetITStatus(USART3, USART_IT_RXNE)==SET)
	{
		//接收数据
		d = USART_ReceiveData(USART3);
	    //将接收到的数据依次保存到数组里
		uart_buf[uart_cnt++] = d;  
		//GM65模块发完一组数据后会自动发送一个回车符,所以通过检测是否接受到回车来判断数据是否接收完成
		if(d == 0x0D) 
		{
			recv_ok = 1;  //接收完成
		}
	
		//将接收到的数据,通过串口1返发给PC
		USART_SendData(USART1, d);
	    while( USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); //等待发送完成
		USART_ClearFlag(USART1,USART_FLAG_TXE);         //清空标志位
		USART_ClearITPendingBit(USART3,USART_IT_RXNE);	//清空标志位
	}	
} 

主函数

int main()
{
  My_USART3_Init();   //初始化串口3
	uart_init(9600);    //初始化串口1
	LED_Init();      //初始化LED
	OLED_Init();     //初始化OLED
	OLED_Clear();        //OLED清屏
	
	printf("================GM65二维码模块测试=================\r\n");	
	OLED_ShowString(30,0,(u8*)"GM65 TEST!",16);
	OLED_Refresh();
 
    while(1)
    {
		
			if(recv_ok==1)  //接收完成
			{
				OLED_Clear();        //OLED清屏
				OLED_ShowString(30,0,(u8*)"GM65 TEST!",16); 
				//命令判断,当收到D0关灯,D1开灯 
				if(strstr((char*)uart_buf,"D0"))  
				{
					GPIO_SetBits(GPIOE,GPIO_Pin_5);   //关灯
					OLED_ShowString(0,32,(u8*)"LED OFF",16); 
				}
				else if(strstr((char*)uart_buf,"D1"))
				{
					GPIO_ResetBits(GPIOE,GPIO_Pin_5); //开灯
					OLED_ShowString(0,32,(u8*)"LED ON",16); 
				}
				OLED_ShowString(0,16,(u8*)"QRCode:",16); 
				OLED_ShowString(8*7,16,(u8*)uart_buf,16); //显示二维码内容
				OLED_Refresh();      //刷新OLED
				uart_cnt = 0;        //最后清零,重新计数
				recv_ok = 0;         //接收完成标志置0
			}
		
    }
}

4 项目实现效果

毕业设计 STM32超市扫码收银系统

在这里插入图片描述

5 最后

包含内容

在这里插入图片描述

🧿 项目分享:见文末!

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于STM32的智能超市结算系统设计的参考文献一般包括以下几个方面: 1. STM32技术手册及开发资料 - 可以查阅ST公司官方提供的STM32系列芯片的技术手册、应用笔记和开发资料,了解STM32的硬件结构、系统架构以及软件开发流程。 2. 国内外相关研究论文 - 通过检索国内外学术数据库(如CNKI、SCI、Google Scholar等),查找与智能超市结算系统设计、嵌入式系统设计、物联网技术等领域相关的研究论文。例如,可以关注基于STM32的嵌入式系统设计、超市结算系统设计、无线通信技术、RFID技术、物联网应用等方向的论文。 3. STM32开发案例和项目实践报告 - 在各类技术博客、技术论坛、开源社区等平台上,可以找到一些基于STM32的智能超市结算系统的开发案例和项目实践报告。这些案例和报告可以提供具体的设计思路、电路连接、软件架构、算法实现等方面的参考。 4. STM32开发工具和开源代码库 - 对于STM32的软件开发,可以查找相关的开发工具和开源代码库。例如,CubeMX和Keil是常用的STM32开发工具,Github和SourceForge等平台上有很多针对STM32的开源代码库。 5. 相关行业标准和规范 - 在进行智能超市结算系统设计时,需要考虑到行业的一些标准和规范要求,例如支付结算标准、条码识别标准、网络安全标准等。可以参考相关的标准和规范文件。 总之,以上参考文献可以帮助设计者全面理解STM32芯片的特性和功能,了解智能超市结算系统的设计原理和技术要点,并提供实际的项目实践案例和开源资源,为设计者在系统设计中提供思路和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值