基于485总线的食堂刷卡系统_第1页
基于485总线的食堂刷卡系统_第2页
基于485总线的食堂刷卡系统_第3页
基于485总线的食堂刷卡系统_第4页
基于485总线的食堂刷卡系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、传感器与检测应用设计报告目 录摘要 1一 设计名称 2二 设计目的及思路 2三 主要功能 3四 设计原理 34.1 485总线介绍 4.1.1 485总线概述 4.1.2 485总线特点4.2 食堂刷卡功能模块 4.2.1 设计原理 五 设计步骤 65.1 485总线核心代码5.2 食堂刷卡模块核心代码5.3 设计结果截图六 心得体会 10七 参考文献 12摘 要 像现在学校,大型企业都有食堂,食堂基本上都是打卡消费,这样确实很方便,省时间;但也存在一些问题,比如:要是丢失的卡被他人拾到,卡里的钱有可能短时间内被他人刷光,还有就是有时候食堂工作人员没注意把5块钱刷成50块钱,等刷完显示余额的时

2、候学生才发现刷错了,虽然现在这种情况在学生卡管理系统中能查到,但很不方便,如果食堂的刷卡机能显示所有的刷卡记录就可以很方便地发现这种情况了。所以设计一个更先进的食堂消费系统是很必要的(这里以学校食堂消费系统为例)。食堂是一个集体单位、企业等不可缺少的一部分,尤其是学校,学校一直以 来都是人群集中比较密集的地方,再随着高校的扩招,学生的密集程度更是急剧增长,故高校食堂的增多是不可避免的。再加上学生没有经济来源,去餐馆消费是几乎消费不起的,所以食堂的存在给广大的学生们带来了很多的方便及好处,同时也给提供餐饮方带来了极大的方便。一、设计名称 基于485总线的食堂刷卡系统二、设计目的及思路 传统的食堂

3、刷卡管理现在已经很难应对当今社会对食堂的管理要求,它与现在的基于计算机技术发展起来的食堂信息管理系统对比,有以下几大不同: 便捷性方面:传统的人工对食堂信息进行管理,如:顾客信息管理,消费信息管理和记账信息管理,都是很繁琐的过程,其中的任何一部过程都要浪费大量的时间,而随着计算机技术的发展,这些原本繁琐的问题就会变得轻而易举。 安全性方面:传统的纸质记录方式查询起来很麻烦,而且保密性很差,并且容易磨损丢失,对于金钱的管理是十分不利的。但是如果采用的是电子文档的方式进行数据得保存,这一切都变得非常便捷。你可以方便的对数据信息进行备份查询,并且数据的安全性可以得到最大程度的保证。 准确性方面:传统

4、的人工记账容易出错,如果采用这种方式来处理现在的还有打折信息得消费结算会使得工作量很大,如果计算出错,将严重影响自己的声誉。而如果使用软件系统,这些问题都将不会出现,计算机的错误率几乎为零。 鉴于以上传统的人工管理方式的种种缺陷,我们设计了方便工厂食堂,学校食堂使用的应用程序,通过它,管理者可以基本解决以上所遇到的种种问题,而且对于金钱的计算有很大的方便。 实验思路:三、主要功能 刷卡显示卡号及余额,有充值模式和消费模式。四、设计内容 4.1 485总线介绍4.1.1 485总线概述485(一般称作 RS485/EIA-485)是隶属于 OSI 模型物理层的电气特性规定为 2 线,半双工, 多

5、点通信的标准。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。 RS485 仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。硬件设计在这里使用的串口通讯芯片是常规芯片MXA485,RS485 串口通讯电路是一个很成熟的电路,电路大家都熟悉了(参考原理图纸)。从图中可以看出芯片1#管脚是数据接收端,4#管脚是数据发送端;2#、3#管脚是发送/接收状态转换控制端。如图4.1.2 RS485 的特点包括:1、 接口电平低,不易损坏芯片。RS485 的电气特性:逻辑“1”以两线间的电压差为+(26)V表示;逻辑“0”以两线间的电压差为-(26)V 表示。接

6、口信号电平比 RS232 降低了,不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。2、传输速率高。10 米时,RS485 的数据最高传输速率可达 35Mbps,在 1200m 时,传输速度可达 100Kbps。3、抗干扰能力强。RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。4、传输距离远,支持节点多。RS485 总线最长可以传输 1200m 以上(速率100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,最大的可以支持到 400 个节点。4.2食堂刷卡功能

7、模块4.2.1工作原理每个食堂有很多台刷卡机,于是食堂需要一台计算机来和这些刷卡机通信, 当食堂的工作人员通过数字按键(例如一碗粉5块,当他按下5.00,并按确定后),该扣钱信息便向机房的计算机发送命令。当你把饭卡放到刷卡机上后(注意:饭卡离刷卡机3cm内,刷卡机才能感应到),首先读卡器读取卡上的信息( 学号、卡号、金额等) ,再将信息转发到计算机上确定卡的合法性.如果不合法(卡到期、卡挂失、卡禁用)时,会发出嘀嘀嘀滴的报警声;如果卡可以用,则计算机根据这个帐号调出数据库(里面存储着你的使用信息和余额信息等),然后判断你的卡上余额是否足够扣除,如果足够扣除,则再根据刚刚接到的工作人员所发出扣除

8、信号,迅速扣除相应金额(同时发出一声滴的响声),并迅速将你的卡上余额返回刷卡机的显示窗口,同时更新数据库的金额信息,最后退出系统;如果不够扣除,便会发出嘀嘀嘀的连续响声,以警告卡上余额不足。如果你的卡在刷卡机没有放好,刷卡及没能读出你的卡上信息,便没有相应的扣除你的金额,这时,当你收回卡时,刷卡机也会发出连续的嘀嘀嘀声,警告饭卡没有刷上。当工作人员没有输入扣钱金额,即刷卡机便没有给计算机发送扣钱的指令信息,这时当学生把卡放在刷卡机上时,刷卡机读取卡号信息并立即传给计算机,然后计算机将该卡的卡上余额信息返送给刷卡机并显示余额五、实验步骤5.1 485总线核心代码int main(void) ui

9、nt8_t RcvCh; uint8_t TxBuffer = " 神州系列开发板 RS485总线收发实验rn" SZ_STM32_LEDInit(LED1); SZ_STM32_LEDInit(LED2); SZ_STM32_LEDInit(LED3); SZ_STM32_LEDInit(LED4);SZ_STM32_RS485();RS485_SET_RX_Mode();SZ_STM32_SysTickInit(1000);SZ_STM32_COMInit(COM2, 9600);xPxprintf("nr-n "); xprintf("n

10、r STM32神州系列开发板 RS485总线收发实验 n"); xprintf("nr按KEY1按键设置神州开发板设置为RS485发送端 n"); xprintf("nr按KEY2按键设置神州开发板设置为RS485接收端 n"); xprintf("nr-n "); xprintf("nnr 提示: 当前显示的窗口为串口1/COM1/USART1。rn"); xprintf("nnr 串口2/COM2/USART2作为RS485,请将J14和J12跳到1<->2侧。rn")

11、; SZ_STM32_KEYInit(KEY1, BUTTON_MODE_GPIO); SZ_STM32_KEYInit(KEY2, BUTTON_MODE_GPIO); SZ_STM32_KEYInit(KEY3, BUTTON_MODE_GPIO); SZ_STM32_KEYInit(KEY4, BUTTON_MODE_GPIO);while(RS485_Mode = IDLE) RS485_MODE_SET(); while (1) if(RS485_Mode = RX_MODE)/RXģʽ while(USART_GetFlagStatus(

12、SZ_STM32_COM2, USART_FLAG_RXNE) = RESET) RcvCh = (int)SZ_STM32_COM2->DR & 0xFF; xprintf("%c", RcvCh); else if(RS485_Mode = TX_MODE) xprintf("nr正在发送数据: %s", TxBuffer);printf("%s", TxBuffer); delay(60000000); else RS485_MODE_SET(); void RS485_SET_RX_Mode(void)RS485

13、OBB = 0;void RS485_SET_TX_Mode(void) RS485OBB = 1;void RS485_MODE_SET(void) uint32_t KeyNum = 0; while(!(KeyNum = SZ_STM32_KEYScan() if(1 = KeyNum) RS485_Mode = TX_MODE; xprintf("nrRS485 发送模式设置成功"); RS485_SET_TX_Mode(); SZ_STM32_LEDOn(LED1); SZ_STM32_LEDOff(LED2); else if(2 = KeyNum) RS485

14、_Mode = RX_MODE; xprintf("nrRS485 接收模式设置成功"); xprintf("nr等待接收数据nr"); SZ_STM32_LEDOff(LED1); SZ_STM32_LEDOn(LED2); RS485_SET_RX_Mode(); else RS485_Mode = IDLE; SZ_STM32_LEDOff(LED1); SZ_STM32_LEDOff(LED2); xprintf("nr 推出发送接收 请重新设置工作模式"); xprintf("nr USER1按键:设置RS485为

15、接收模式"); xprintf("nr USER2按键:设置RS485为发送模式"); *本工程为从机,先给从机上电int main(void) uiUSART2_Config(); USART1_Config(); nt8_t temp;printf("rn485实验从机rn"); while(1) GPIO_ResetBits(GPIOB,GPIO_Pin_5); /进入接收模式 while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)!= SET); temp = USART_ReceiveDat

16、a(USART2); printf("rn接收到的数据为%d rn",temp); temp+; /把temp的值加1后再发送给主机 GPIO_SetBits(GPIOB,GPIO_Pin_5); /进入发送模式 USART_SendData(USART2, temp); /发送数据 while (USART_GetFlagStatus(USART2,USART_FLAG_TC) !=SET); printf("rn发送数据成功!rn"); *本工程为主机,实验时先给从机上电 int main(void) uint8_t temp = 0; /* USA

17、RT2 config */ USART2_Config(); /串口2用于收发485的数据 USART1_Config(); /串口1用于输出调试信息 printf("rn485实验主机rn"); while(1) GPIO_SetBits(GPIOB,GPIO_Pin_5); /进入发送模式 USART_SendData(USART2, temp); /发送数据 while (USART_GetFlagStatus(USART2,USART_FLAG_TC) !=SET); printf("rn发送数据成功!rn"); /使用串口1打印调试信息到终端

18、GPIO_ResetBits(GPIOB,GPIO_Pin_5);/进入接收模式 while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)!= SET); temp = USART_ReceiveData(USART2); printf("接收到的数据为%d rn",temp); 5.2食堂刷卡模块核心代码int main(void)InitRc522();USART1_Config();LED_GPIO_Config();NVIC_Configuration();LED1( ON ); LED2( ON );printf(&quo

19、t;rn the user is: IC Card rn"); USART_Send8(0x15); while(1) find_card();Card_Write(2);u8 ReadData(u8 addr,u8 *pKey,u8 *pSnr,u8 *dataout)u8 status,k;status=0x02;/k=5;do status=PcdAuthState(PICC_AUTHENT1A,addr,pKey,pSnr);k-;/printf("AuthState is wrongn"); while(status!=MI_OK &&

20、k>0);status=0x02;/k=5;do status=PcdRead(addr,dataout);k-; while(status!=MI_OK && k>0);return status;u8 WriteData(u8 addr,u8 *pKey,u8 *pSnr,u8 *datain)u8 status,k;status=0x02;/k=5;do status=PcdAuthState(PICC_AUTHENT1A,addr,pKey,pSnr);k-; while(status!=MI_OK && k>0);status=0x0

21、2;/k=5;do status=PcdWrite(addr,datain);k-;/printf("ReadData is wrongn"); while(status!=MI_OK && k>0);return status;void Card_Write(unsigned char sum) unsigned char status; data10 = sum; data14 = sum; data18 = sum; status = PcdWrite(1, data1); if (status = MI_OK) LED1( OFF ); LED

22、2( OFF ); InforStore6 = CardRead(); printf("余额:"); printf("%d rn", InforStore6 ); u8 CardRead() unsigned char status; unsigned char sum; status = PcdRead(1,SN); if (status = MI_OK) sum = SN0; return sum; u8 find_card()unsigned char status;u8 j;u8 c;status = PcdRequest(PICC_REQALL

23、,CT);status = PcdAnticoll(SN);if (status=MI_OK)LED1( ON ); LED2( OFF );printf("rn The Card ID is:rn");for(j=0;j<4;j+) c=SNj; printf ("%dt", c);5.3设计结果截图六、心得体会通过此次课程设计,使我更加扎实的掌握了有关485总线方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论