智能超市
来源:互联网 发布:京东方怎么样 知乎 编辑:程序博客网 时间:2024/05/19 20:44
简介
智能超市是融合射频识别技术、计算机通信网络、数据库管理技术于一体的现代化超市,采用高性能HRFID 技术以及防碰撞算法,使商品结算速度很快,只要几秒钟,而准确率却很高,几乎没有差错。而货架的智能信息采集同样方便快捷,实现价格的实时更新和商品补给的提醒,低功耗设计使得功耗更低更低碳环保。
控制器件
智能货架使用80C52控制,智能结账柜台使用STM32进行控制。
STM32F103xC增强型系列使用高性能的ARM Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达512K字节的闪存和64K字节的SRAM),丰富的增强I/O端口和连接到两条APB总线的外设。包含3个12位的ADC、4个通用16位定时器和2个PWM定时器,还包含标准和先进的通信接口:多大2个I2C、3个SPI、2个I2S、1个SDIO、5个USART、1个USB和1个CAN。STM32F103xC增强型系列工作于-40℃至+105℃的温度范围,供电电压2.0V至3.6V,一系列的省电模式保证低功耗应用的要求。
硬件设计
主要由智能货架和智能结账柜台两部分构成。
智能货架:
智能结账柜台:
算法简介
防碰撞算法研究是智能超市RFID 系统研究的最关键问题,也是难点,是制约RFID 系统在超市应用的重要因素。防碰撞问题的研究主要解决两个问题:一是如何避免或减少阅读器与标签之问的冲突问题。二是避免或减少阅读器之间的干扰碰撞问题。
二进制搜索算法是最常用的RFID 系统防冲突算法,其算法非常灵活,不会发生防冲突失败的情况。这种算法的基本思想就是读写器判断出标签的序列号发送时产生的数据冲突位置,然后强制地命令那些在冲突位置发送信息为“0”或者为“1”的标签退出冲突。当N-1个应答器退出冲突后信道就会被剩下的一个标签完全占有并被读来。对于N 个标签发生冲突的情况,只需要一定次数的防碰撞循环就能将适合的标签准确的识别出来。
软件设计
这里只粘贴几个简单的函数。
/********************************************************************************函数名: dis_price*功能: 在OLED上显示商品价格 *参数: (unsigned char)x,y--显示数字的起始坐标;* double price --要显示的数字 *******************************************************************************/void dis_price(unsigned char x,unsigned char y,double price){unsigned int price_int=price;unsigned int price_decimal=(price-price_int)*10;unsigned char pricearray[5];unsigned char count=0,i=0;if(price==0)LCD_8x16(x,y,"0");while(price_int){ pricearray[count]=price_int%10; price_int/=10; ++count;}//判断是否需要显示小数if(price_decimal){LCD_8x16(x+8*count,y,".");//显示小数点dis_int_8x16(x+8+8*count,y,price_decimal);}for(i=0;i<count;i++){dis_int_8x16(x+8*i,y,pricearray[count-1-i]);}}
/********************************************************************************函数名: ReadCard*功能:读射频卡号 *返回值: 返回所读射频卡的序号 *******************************************************************************/int ReadCard(void){ int i; int cardnumber=0x00000000,temp; while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET){} USART_ReceiveData(USART3);//卡类型及状态 for(i=3;i>=0;i--) {while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET){} temp=(u8)USART_ReceiveData(USART3); cardnumber+=temp<<i*8; } switch(cardnumber) { case 5827: return 0; break; case 5886: return 1; break; case 1005245: return 2; break; default: return 11; break; }}
/********************************************************************************函数名:CheckOut *功能: 计算消费者所取商品的总价格 *******************************************************************************/void CheckOut(void){char KEY;u8 cardflag=0;u32 CardNumber;u8 i;u8 KEY_count=0; while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET){} KEY=USART_ReceiveData(USART3); if( KEY == 0xFF ) {while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET){}while(USART_ReceiveData(USART3) == 0xFF ){while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET){}++KEY_count;} }if(KEY_count == 4) {cardflag=1;CardNumber=ReadCard(); //读取商品序列号 }///////////////////////////////////////////////////////////if(cardflag){for(i=0;i<Card_count;i++) {if( CardNumber == CardNumber_array[i] )//若已读过,则忽略 break; } if( i == Card_count ) {++Card_count;CardNumber_array[i] = CardNumber;TotalPrice+=PriceArray[CardNumber];Dis_Cardnumber(0,i*2,CardID[CardNumber]);//显示卡号Dis_SinglePrice(64,i*2,PriceArray[CardNumber]); }} //////////////////////////////////////////////////KEY_count=0;Dis_SinglePrice(64,6,TotalPrice);LCD_P8x16Str(0,6,"Price :");}
/********************************************************************************函数名:DeductMoney (刷卡付账模块) *功能: 结算所买东西价钱,核对无误后刷卡付账。 *******************************************************************************/void DeductMoney(void){u8 data[8]={0x40,0x07,0x00,0x01,0x00,0x00,0x00,0x0D};int a=0;char KEY;u32 CardNumber,CardNumber_array[CardNumMax+1]={0};u8 i;for(a=0;a<8;a++){USART_SendData(UART4,data[a]);while(USART_GetFlagStatus(UART4, USART_FLAG_TXE) == RESET){} //等待发送完毕}while(USART_GetFlagStatus(UART4, USART_FLAG_RXNE) == RESET){}KEY=USART_ReceiveData(UART4);if( KEY == 0x40 ){for(i=0;i<=6;i++){while(USART_GetFlagStatus(UART4, USART_FLAG_RXNE) == RESET){}KEY=USART_ReceiveData(UART4);}if(KEY==0x08){while(USART_GetFlagStatus(UART4, USART_FLAG_RXNE) == RESET){}USART_ReceiveData(UART4);CardNumber=ReadCard(); }if(CardNumber==0){Dis_Cardnumber(20,2,CardID[CardNumber]);LCD_P8x16Str(20,4,"Successful");LCD_FullFill(0x00);}else{LCD_P8x16Str(20,3,"No Card");LCD_FullFill(0x00);}}}
- 智能超市
- 联华超市构建商业智能系统
- 超市
- 超市
- 超市
- 无人新零售智能系统开发定制无人便利店超市系统开发
- 超市开业
- 宝宝超市
- 超市购物
- 超市打折
- 超市管理?
- 超市抽奖
- 超市换购
- 【美萍超市管理系统】汉码盘点机无缝对接 金蝶盘点机条码数据采集器智能终端PDA
- c#之超市系统之超市仓库
- C#学习超市系统之超市前台
- C#学习超市系统之超市商品
- 网页设计超市
- 谷歌中一些十分有趣的特效现象
- 开发组长职责分析
- vlc-android为何播放不了red5的直播流
- 重庆崽儿,啷个能不回重庆撒!
- Linux-Ubuntu之一
- 智能超市
- 安装CKEditor中的问题
- Unity 输出调试信息到界面
- 实验室创业
- 打印圣诞树
- ubuntu下挂载移动硬盘失败:Not Authorized
- js prototype __proto__
- 开源编译器学习笔记02(VC6 词法扫描器 ——GetToken)——2014_1_29
- [C++编译]field has incomplete type