超市收银系统接口实验报告

合集下载

超市收银实践报告

超市收银实践报告

超市收银实践报告在现代零售业中,超市可以说是一个非常重要的组成部分。

而在超市中,收银员的工作也是至关重要的。

他们是超市业务的末端节点,直接与顾客接触,是超市形象和品牌信誉的代表。

因此,收银员的工作质量直接影响着超市的营业额和市场地位。

为了更好地了解超市收银实践,我对某大型连锁超市进行了调查。

一、收银员培训首先,我参与了该超市新员工的收银员培训课程。

培训课程持续了三天,由专职的资深收银员负责授课。

课程主要分为理论和实践两个部分。

在理论部分,收银员们学习了收银系统的相关知识,包括收银机的基本操作、不同收银方式的应用、退换货流程等等。

此外,他们也接受了关于客服和顾客拓展的专业知识。

在实践部分,收银员们有机会熟悉收银操作,同时也增强了团队协作能力和服务态度。

这样的培训可谓十分专业,能够让新收银员快速适应超市的工作环境并更好地为顾客服务。

二、重新设计收银台在调查过程中,我还发现该超市采用了一种非常特别的设计,在提供良好服务的同时还提高了效率。

具体来说,超市将收银台分为两个功能区域:一个是接受顾客结账的收银区,另一个是放置货物和寄存购物车的立体性货架区。

在这个重新设计的收银台上,收银员能够将物品快速放到货架上,而不是放进购物袋中。

这不仅保持了收银器周围的区域干净,更提高了收银员的效率和客户的满意度。

三、智能货位管理在收银流程中,货位管理也是重要的一环。

这家超市采用了智能货位管理系统,通过物联网技术实现了收银效率的最大化。

系统会根据商品的特定属性定义其适合的货位,以实现优化的存储、拣选和出库。

当客户结账时,收银员只需简单地将商品通过条形码扫描器扫描并放到货架位置即可。

这种智能的货位管理系统不仅大大提升了收银效率,同时也避免了人为差错和库存浪费,提高了顾客的购物体验。

四、收银员交班制度最后,我关注了该超市的收银员交班制度。

该超市的收银员交班方式既提高了效率,又保证了质量。

两位收银员之间会在工作时间交接,把账单和结账机相关的所有信息传递给接班人,从而确保数据的准确性和及时性。

超市收银系统实验报告

超市收银系统实验报告

超市收银系统实验报告摘要:本实验旨在设计和实现一套高效、准确的超市收银系统。

通过对系统的构建和测试,验证其在提高收银效率、减少人工错误以及优化客户体验方面的作用。

本报告将介绍系统的设计思路、开发过程以及最终实施效果。

引言:如今,随着超市行业的蓬勃发展,有效的收银系统成为超市经营成功的一项关键因素。

传统的人工收银方式容易出现繁琐、低效、易发生错误的问题。

因此,设计一套高效的超市收银系统具有重要的实际意义。

本实验通过结合计算机技术和现代管理理念,构建了一套集成化的超市收银系统,实现了快速准确的收银过程和数据管理。

一、系统设计1.1 总体架构本系统采用分层架构,包括客户端、服务器以及数据库层。

客户端负责与用户的交互和业务逻辑处理,服务器负责数据传输和业务处理,数据库层负责数据的存储和管理。

1.2 功能设计超市收银系统的主要功能包括商品管理、销售记录、收银结算、库存管理等。

为了提高系统的可用性和易用性,我们还添加了自动统计报表、会员管理、促销活动等功能。

1.3 数据库设计根据系统的需求,我们设计了相应的数据库结构,包括商品表、销售记录表、库存表、用户表等。

通过合理的数据模型设计,实现了对数据的高效存取和管理。

二、系统实现2.1 开发环境本系统采用Java语言进行开发,使用Eclipse作为开发工具,数据库采用MySQL进行存储。

2.2 技术选型为了实现系统的高效性和可扩展性,我们选择了Spring框架作为系统的开发基础,并结合Hibernate框架进行数据持久化。

前端页面使用HTML、CSS和JavaScript进行设计,并采用Bootstrap框架实现响应式布局。

2.3 功能实现在系统的开发过程中,我们依据需求设计相应的功能模块,并进行逐一实现。

编写了商品管理模块、销售记录模块、收银结算模块以及库存管理模块等。

通过与数据库的交互,实现了数据的准确读取和写入。

三、系统测试3.1 单元测试针对系统的各个功能模块进行了单元测试,通过输入不同的测试用例,验证系统的边界情况和异常处理能力。

超市收银实践报告8篇

超市收银实践报告8篇

超市收银实践报告8篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作总结、工作计划、述职报告、合同协议、心得体会、规章制度、应急预案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as work summaries, work plans, job reports, contract agreements, personal experiences, rules and regulations, emergency plans, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!超市收银实践报告8篇只有反复思考实践的过程,这样记录的实践报告才是有实际意义的,符合自己能力的实践报告是要经过我们的仔细斟酌的,下面是本店铺为您分享的超市收银实践报告8篇,感谢您的参阅。

超市收银实践报告

超市收银实践报告

超市收银实践报告超市收银是一项重要的工作,它涉及到货款的管理、客户的服务以及信息的记录。

在过去的一段时间里,我有幸参与了超市收银的实践工作,并获得了一些宝贵的经验。

本文将对我在超市收银实践中的所见所闻进行总结和分享。

一、实践环境和流程我所参与的超市收银实践位于一家大型连锁超市。

早上8点,我准时到达超市,完成上班前的准备工作,如检查收银机的运行状态和清点零钱。

随后,我与同事们一起进行日常例行的早会,了解当天的促销活动和注意事项。

上岗后,我开始执行收银工作。

首先,我会向顾客展示微笑,并亲切地问候他们。

然后,我迅速扫描商品条码,并将价格显示在收银机上。

在顾客付款后,我将商品放入塑料袋中,并递交购物小票。

除了收银工作,我还需要偶尔处理退货、调价和价格查询等特殊情况。

在高峰时段,超市常常会出现排队现象,因此我需要保持高效并且井然有序。

二、收银技巧和客户服务在超市收银的过程中,一些技巧和良好的客户服务是非常重要的。

首先,快速、准确地处理商品。

我发现,熟悉商品的摆放位置和条码将会帮助我提高收银速度。

此外,良好的注意力和手眼协调也能增加准确性。

其次,友善地与客户沟通。

在收银过程中,我会主动与顾客交流,询问他们是否需要帮助或者参与超市的活动。

这种亲切的服务不仅可以提高顾客的满意度,还能增加销售额。

另外,当顾客遇到问题或者投诉时,我会耐心倾听并提供合适的解决方案。

解决问题的同时,我会以礼貌的方式处理,以确保顾客离开时感到满意。

三、信息记录和反馈在超市收银实践中,信息记录是非常重要的。

每天,我需要记录每个顾客的购买清单、支付方式以及购物总额等。

这些信息有助于超市进行销售数据分析和库存管理。

此外,我也会定期向上级主管反馈有关超市收银工作的情况和建议。

例如,我观察到某些产品的销售量有所下降,我会向主管提出建议,如增加促销力度或者重新摆放商品位置等。

四、个人感悟和收获通过参与超市收银实践,我不仅提高了个人的工作效率和准确性,还学到了一些关于人际沟通和服务技巧的经验。

超市收银系统实验报告

超市收银系统实验报告

超市收银系统实验报告1. 简介本实验报告旨在介绍并评估超市收银系统的设计与实施情况。

超市收银系统是一个用于管理商品销售和收银操作的软件系统,通过自动化的方式提升了超市的工作效率和顾客购物体验。

本报告将围绕系统的功能、性能和用户体验三个方面进行讨论与分析。

2. 功能分析超市收银系统的主要功能包括商品管理、库存管理、收银操作和数据分析。

商品管理模块负责记录和维护超市的商品信息,包括商品名称、价格、库存等;库存管理模块实时监控商品库存情况,并在库存不足时及时提醒;收银操作模块用于处理顾客的购物结算,支持条形码扫描和手动输入商品信息的方式;数据分析模块通过统计和分析数据来提供超市的经营决策支持。

3. 性能评估为了评估超市收银系统的性能,我们进行了一系列实验。

首先,我们测试了系统在并发操作下的响应速度。

通过模拟多个顾客同时结账的情况,我们发现系统能够在保持较低的响应时间的同时完成高并发操作。

其次,我们测试了系统的稳定性和容错性。

在模拟网络故障和系统崩溃的情况下,系统能够及时恢复并完成未完成的操作,没有导致数据丢失或损坏。

最后,我们评估了系统的可扩展性。

通过在系统中增加大量商品信息和顾客信息,并进行大规模数据处理,我们发现系统仍能快速响应和处理大规模数据。

4. 用户体验分析超市收银系统在用户体验方面做出了一系列改进。

首先,界面友好且操作简单,使得收银员能够快速上手并熟练操作系统。

其次,系统提供了实时的库存信息,可以帮助收银员及时了解商品的库存状况,减少了遗漏出售和顾客投诉的情况。

此外,系统支持条形码扫描,大大提高了结账的效率和准确性,减少了人工输入产生的错误。

5. 结论通过本次实验我们对超市收银系统进行了全面的功能分析、性能评估和用户体验分析。

实验结果表明,超市收银系统具备较高的功能完整性、良好的性能和出色的用户体验。

系统能够快速响应和处理并发操作,具备较高的稳定性和容错性。

用户对系统的操作界面和功能给出了积极的反馈。

超市收银系统实验报告

超市收银系统实验报告

超市收银系统实验报告一、引言超市收银系统是现代化商业中不可或缺的重要组成部分,随着科技的不断进步和发展,超市收银系统也不断进行升级和改良,以适应消费市场的不断变化和发展。

本文将对超市收银系统进行实验报告,以探讨其结构、功能和优缺点。

二、系统结构超市收银系统的结构可分为硬件和软件两部分,硬件部分包括计算机主机、表明屏、扫描仪、打印机、报警器等,软件部分则由收银软件、库存软件、销售分析软件和管理软件等构成。

三、功能介绍1、收银功能超市收银系统的主要功能就是实现收银结算,根据货品的条形码进行扫描识别,统计商品数量和价格,生成相应的票据并进行打印,实现商品的销售和财务的结算。

2、库存管理超市收银系统可以通过扫描货品的条形码进行库存管理,实现商品的进货、销售、退货、盘点等,可以掌握实时库存信息,降低过多的库存和库存不足的情况,提高经营效率。

3、销售分析超市收银系统可以通过销售分析软件进行销售数据的统计和分析,掌握商品销售情况,如商品销售量、销售额、毛利润等,为商家提供数据支持,帮助商家进行业务决策。

4、功能优缺点优点:收银操作简单、实现快捷、准确;库存信息实时更新,可以降低超市过多的库存,提高工作效率;销售分析数据完全可以用来帮助经营决策,提高超市的利润。

缺点:收银系统对于条形码的要求很高,一旦这个识别码有误,就会影响到整个系统;同时,软件也存在一些缺陷,如操作界面不够流畅、数据的可操作性也存在局限。

四、实验过程我们在超市进行了实验,包括对超市收银系统进行结构和功能分析,以及在实际使用中的应用。

1、系统结构分析我们对超市收银系统的硬件和软件进行了分析,并对其各部分的功能和相互联系进行了深入了解,以确保在实际操作中可以熟练地使用超市收银系统。

2、功能测试我们对超市收银系统的各项功能进行了测试,如收银结算、库存管理、销售分析等,以确认其操作流畅、故障率低,并在实际效果中对系统进行完善和改进。

3、实际使用我们将超市收银系统放在超市中进行实际使用,如超市会员卡的付款方式、新商品编号的修改等,对其进行了修改和升级,不断地适应和满足市场需求。

超市收银系统实验报告

超市收银系统实验报告

超市收银系统实验报告一、引言超市作为零售行业的重要组成部分,其收银系统的性能对于提高工作效率和顾客体验具有至关重要的作用。

本实验旨在评估超市收银系统的性能,并提出相应的改进建议。

二、实验目的1. 评估超市收银系统的稳定性和可靠性。

2. 分析超市收银系统的运行效率。

3. 检验超市收银系统的交易准确性。

4. 探讨超市收银系统的用户界面设计和用户体验。

三、实验材料和方法1. 实验材料:超市收银系统软件、测试数据、计算机设备。

2. 实验方法:使用模拟交易场景进行实验,记录系统运行的各项指标并进行统计分析。

四、实验过程和结果1. 稳定性和可靠性评估在进行模拟交易时,系统是否出现崩溃或卡顿的情况进行观察和记录。

实验结果显示,超市收银系统在大部分情况下运行稳定可靠,但在高峰时段出现了少量的卡顿现象,需要进一步优化。

2. 运行效率分析通过记录交易处理时间和系统响应时间,评估超市收银系统的运行效率。

结果显示,在大部分情况下,系统的运行效率较高,但在处理大量商品或者同时存在多个交易时,系统响应时间略有延迟。

3. 交易准确性检验在进行一定数量的交易操作后,检查系统生成的交易数据和实际数据是否一致。

结果显示,超市收银系统的交易准确性较高,与实际数据基本一致。

4. 用户界面设计和用户体验通过观察用户在操作系统时的行为和表情,评估超市收银系统的用户界面设计和用户体验。

结果显示,用户界面设计简洁清晰、操作流程合理,用户体验较好。

五、实验改进建议1. 优化系统性能:进一步改进系统的稳定性和可靠性,减少卡顿现象的发生。

2. 提升运行效率:优化系统的响应时间,提高处理大量商品和多个交易的能力。

3. 持续提高交易准确性:加强数据校验机制,确保系统生成的交易数据准确无误。

4. 不断改进用户界面设计:根据用户反馈,进一步优化用户界面,提升用户体验。

六、结论通过实验评估,超市收银系统在稳定性、可靠性、运行效率、交易准确性和用户体验等方面表现出良好的性能。

超市收银系统实验报告

超市收银系统实验报告

超市收银系统实验报告一、实验背景与目的超市收银系统是现代零售业中不可或缺的一部分,它通过计算机技术对商品的销售和库存进行管理。

本实验旨在通过实际操作超市收银系统,熟悉其功能和流程,并分析其对超市经营效率的影响。

二、实验过程1. 实验器材准备:1.1 超市收银系统软件1.2 计算机及相关设备1.3 商品条码扫描枪1.4 收款机1.5 收据打印机1.6 客户模拟器2. 实验步骤:2.1 启动超市收银系统软件并登录系统。

2.2 扫描商品条码,实现购物车添加商品功能。

2.3 客户模拟器选择支付方式,并完成支付。

2.4 系统生成收据并打印。

2.5 更新库存信息。

三、实验结果通过对超市收银系统的实际操作,我们获得了以下实验结果:1. 系统的操作界面友好,便于收银员操作和学习。

2. 扫描商品条码的速度快,准确率高,减少了收银员手工输入的错误。

3. 系统能够自动计算商品总价和找零金额,提高了结账的效率和准确度。

4. 支付方式多样化,包括现金、刷卡、移动支付等方式,方便了顾客的支付。

5. 收据打印清晰,内容完整,方便了消费者退换货以及个人账务管理。

6. 系统能够及时更新库存信息,提供准确的商品销售和库存管理数据。

四、实验分析与总结1. 超市收银系统的引入使得超市营业效率大幅提升,提高了收银速度,减少了人工错误,节省了顾客等候时间。

2. 收银系统将销售数据自动录入电子数据库中,提供了全面、准确的销售和库存统计,帮助超市管理人员更好地进行销售预测和库存补充。

3. 超市收银系统为超市提供了更多的支付方式,方便了顾客的购物体验,也扩大了超市的顾客群体。

4. 系统的自动化操作减少了人为因素的干扰,提高了操作准确度和效率。

5. 超市收银系统的实施需要对软件和硬件设备进行定期维护和更新,以确保系统的稳定性和安全性。

综上所述,超市收银系统的引进对超市经营管理起到了积极的促进作用。

在未来的发展中,我们需要不断提升系统的功能和性能,以满足顾客和超市管理者的需求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机接口课程设计试验报告――超市收银系统计算机0211班江浩学号:012002014309一.课程设计目的,要求及条件:掌握接口硬件开发平台的使用方法,利用现有的实验平台和PC机,组成一个微机模拟应用系统;掌握基本接口电路的综合应用掌握接口电路的驱动程序和界面软件的设计与编制,学会调试与测试接口软件的一般方法;结合实际应用,设计一微机应用系统,要求该系统综合应用并行接口、串行接口,时间接口、中断接口、模拟接口,等等,实现微机系统对模拟信号的采集、转换、并行输入,输出,远距离传送,以及远程控制、检测并显示.二.设计内容根据以上任务,需进行如下工作:◆数据采集系统接口设计(包括电路和程序设计与实现)◆微机并行通信接口设计(包括电路和程序设计与实现)◆微机时间远程监督并显示(包括电路和程序设计与实现)◆双机串行通信设计(包括电路和程序设计与实现)◆远程控制﹑检测﹑显示接口及界面的设计与实现.题目35 设计完成超市收银系统一个主控机对应多个下位机,主控机存储商品资料,并输出相关信息,下位机从执行部件读入商品号,到主控机查询资料,并显示资料.商品查询成功有声音提示,收银统计时有音乐背景.输入商品号,在主机上查询商品价格并发回给终端,由主机计价,终端机可以打印数据,交易结束,有主机向终端发送总价.三.设计要求◆自行设计可以根据自己的设计,适当增加元、器件,自己设计电路,配合实验台使用,实现预定功能。

编程语言可采用汇编语言或C/C++。

自选。

编程环境采用MF集成开发环境。

MF在系统机上已经安装好。

◆8255接口端口地址分配:PA口为300H,PB口为301H,PC口为302H,命令口为303H。

◆8251接口端口地址分配:命令/状态口为309H,数据(出/入)口为308H。

◆8253/8254定时接口端口地址分配:T0=304H,T1=305H,T2=306H,命令口=307H。

◆开关,音乐发生器四.设计步骤主要分成上位机和下位机。

上位机主要是一个数据库的作用,用来接收下位机传过来的商品号,返回商品信息。

下位机输入数据,并显示信息,播放音乐。

首先完成串口的设计,让两台机子能进行简单的通信,然后设计上位机和下位机的主要程序,再在下位机上添加8255的控制,最后再连接音乐发生器。

五.设计思想首先用8255作为主控,口c下连接一个开关,下位机判断8255的0x302口的输入,如果按下,程序才能继续执行。

然后是8251的串口传输。

先判断是否键盘有案件,如果是esc,则推出,如果是其他,则传送,没有键盘输入时,为接收状态。

字符sletter接收键盘输入,检查8253的TXRDY状态,如果准备好,从8251输出。

上位机接收到商品号,判断后,执行不同的函数。

在上位机中,存储商品信息的是一个结构体数组,上位机将每个结构数组中的信息以单个字符的形式传送到下位机。

如果下位机输入的是“y”,说明这次交易结束,上位机判断后,调用totle函数,返回总价。

在传送总价是,先要吧总价int型转换成字符数组,然后从8251传送,下位机接到数组后,直接显示。

同时,上位机返回一个z字符,下位机接收到这个字符后,开始播放音乐。

设计结构图如下:本次实验中我主要负责界面设计以及下位机程序调试下位机程序流程图:六.源程序下位机的程序如下:#include <conio.h> //kbhit();#include <stdio.h> //printf();#include <dos.h> //delay();#include <stdlib.h> //exit(0);#define data51 0x308 //8251A数据口#define ctrl51 0x309 //8251A命令/状态口#define ctrl55 0x303 //8255命令口#define timer2 0x306 //8253的2号计数器端口#define timctl 0x307 //8253命令口#define factor 16 //波特率因子16unsigned long int clk = 1193182;//8251输入时钟频率(十六进制表示)int tc_table[8]={110, // 0=110bps150, // 1=150b/s300, // 2=300b/s600, // 3=600b/s1200, // 4=1200b/s2400, // 5=2400b/s4800, // 6=4800b/s9600 // 1=9600b/s};const unsigned long CLK = 1193180; // 声明时钟频率const unsigned char INTR = 0X1C; // 声明中断号short int *pFreq; // 声明音频指针short int *pTimeDelay; // 声明延时指针short int nFreq[] = {//声明歌曲“两个老虎”的音乐频率262,294,330,262,262,294,330,262,330,349,392,330,349,392,392,440,392,349,330,262,392,440,392,349,330,262,294,196,262,294,196,262,};short int nTimeDelay[] = {//声明歌曲“两个老虎”的音乐延时8,8,8,8,8,8,8,8,8,8,16,8,8,16,4,4,4,4,8,8,4,4,4,4,8,8,8,8,16,8,8,16};void Playing(void){ outportb( 0x303, 0x80); // 初始化8255outportb( 0x303, 0x0c); // 置pc6=0 禁止8253通道2的gate引脚 outportb( 0x303, 0x00); // 置pc0=0 禁止7408outportb( 0x307, 0xb6); // 初始化8253pFreq = nFreq; // 取歌曲的第一个音频pTimeDelay = nTimeDelay; // 取歌曲的第一个时延while (*pFreq&&!kbhit()){outportb( 0x306, (unsigned char)(CLK / *pFreq % 256));// 先送低字节outportb( 0x306, (unsigned char)(CLK / *pFreq / 256));// 再送高字节// 以上置8253通道2 的计数初值outportb( 0x303, 0x01);outportb( 0x303, 0x0d); // 开扬声器delay(*pTimeDelay*30); //等待延时到outportb( 0x303, 0x0c);outportb( 0x303, 0x00); // 关闭扬声器pFreq++; // 获取下一个音频pTimeDelay++; // 获取下一个延时} // 歌曲结束或按了任意键outportb( 0x303, 0x0c);outportb( 0x303, 0x00); // 再次关闭扬声器}void int51(); //初始化8251avoid set_bps(int bps); //8253-5记数初值计算与装入void main(){int getvalue=3;int temp=-1;int sletter,rletter,status,s;int c55;temp = getvalue - '0';int51();printf("\n input commodity number\n");outportb(0x303,0x8a);for(;;){if(kbhit()) getch();c55=inportb(0x302);if(!(c55&0x20)) {for(;;)//判断是否Esc键{if (kbhit()){//若无键按下,则转接收 //这里是输出if((sletter=getche())==0x1b)//是ESC?是,则退出,并返回DOS {outport(ctrl55,0x0c);//关闭8253return;}else{status=inportb(ctrl51);//获取8253 TXRDY 状态if((status&0x01)!=0)//已准备好,则将键入的字符发送出去{outportb(data51,sletter);printf("\t");}}}else{ //接收status=inportb(ctrl51);//已准备好,即有数据传送过来,则接收1个字符if((status&0x02)!=0){rletter=inportb(data51);if(rletter=='z') Playing();else printf("%c",rletter);}}}}}}void int51(){outportb(ctrl51,0x00);delay(100);outportb(ctrl51,0x40);//8251复位delay(100);outportb(ctrl51,0x4e);//8251A方式命令delay(100);outportb(ctrl51,0x27);//8251A工作命令}void set_bps(int bps){int i,sendhigh,sendlow;i=clk/bps;i=i/factor;//计算计数初值sendhigh = (i>>8)&0x00ff;sendlow = i & 0x00ff;outportb(timctl,0xb6);outportb(timer2,sendlow);//装计数初值低字节outportb(timer2,sendhigh);//装计数初值高字节}上位机的源程序如下:#include <conio.h> //kbhit();#include <stdio.h> //printf();#include <dos.h> //delay();#define data51 0x308 //8251A数据口#define ctrl51 0x309 //8251A命令/状态口#define ctrl55 0x303 //8255命令口#define timer2 0x306 //8253的2号计数器端口#define timctl 0x307 //8253命令口#define factor 16 //波特率因子16unsigned long int clk = 1193182;//8251输入时钟频率(十六进制表示)int tc_table[8]={110, // 0=110bps150, // 1=150b/s300, // 2=300b/s600, // 3=600b/s1200, // 4=1200b/s2400, // 5=2400b/s4800, // 6=4800b/s9600 // 1=9600b/s};char trans[3];struct goods{ int num;char name[20];char price;}a1[3]={{1,"book",8},{2,"pen",9},{3,"food",5} }; void numbertostring(int num, char* p){int dec=num/10;p[0]=dec+48;p[1]=(num-dec*10)+48;p[2]='\0';}int stringtonum(char *p){int all;all=(p[0]-48)*10+(p[1]-48);return all;}void int51(); //初始化8251avoid set_bps(int bps); //8253-5记数初值计算与装入int sletter,status,sum=0;void out1(){ //接收到‘1’时char *p;int i,digit;char price1;p=a1[0].name;price1=a1[0].price;for (i=0;i<10;i++){sletter=*(p+i);status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51);//已准备好,则将键入的字符发送出去{outportb(data51,sletter);}}status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,'\t');status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,price1+48);status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,'\n');digit=price1;sum=sum+digit;}void out2(){char *p;int i,digit;char price1;p=a1[1].name;price1=a1[1].price;for (i=0;i<10;i++){sletter=*(p+i);status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51);{outportb(data51,sletter);}}status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,'\t');status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,price1+48);status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,'\n');digit=price1;sum=sum+digit;}void out3(){char *p;int i,digit;char price1;p=a1[2].name;price1=a1[2].price;for (i=0;i<10;i++){sletter=*(p+i);status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51);{outportb(data51,sletter);}}status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,'\t');status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,price1+48);status=inportb(ctrl51);while((status&0x01)==0) status=inportb(ctrl51); outportb(data51,'\n');digit=price1;sum=sum+digit;}void totle() //接收到‘y’时,统计总价{numbertostring(sum, trans);status=inportb(ctrl51);while((status&0x01)==0)status=inportb(ctrl51);outportb(data51,trans[0]);status=inportb(ctrl51);while((status&0x01)==0)status=inportb(ctrl51);outportb(data51,trans[1]);status=inportb(ctrl51);while((status&0x01)==0)status=inportb(ctrl51);outportb(data51,'\n');sum=0;}void main(){int getvalue=3;int temp=-1;int rletter;for(;;){clrscr();break;}temp = getvalue - '0';set_bps(tc_table[temp]);int51();printf("\n waitting input \n");outportb(0x303,0x80);//置PC6=1,打开8253-5的GATE2,开始输出方波outportb(0x303,0x0d);for(;;)//判断是否Esc键{if (kbhit()){//有键按下if((sletter=getche())==0x1b)//是ESC?是,则退出,并返回DOS {outport(ctrl55,0x0c);//关闭8253return;}else{status=inportb(ctrl51);//获取8253 TXRDY 状态if((status&0x01)!=0)//已准备好,则将键入的字符发送出去{outportb(data51,sletter);}}}else{ //接收status=inportb(ctrl51);//已准备好,即有数据传送过来,则接收1个字符if((status&0x02)!=0){rletter=inportb(data51);printf("%c",rletter);switch(rletter){case '1': out1();printf("\n");break;case '2': out2();printf("\n");break;case '3': out3();printf("\n");break;case 'y': totle();printf("\n"); break;}}}}}void int51(){outportb(ctrl51,0x00);delay(100);outportb(ctrl51,0x40);//8251复位delay(100);outportb(ctrl51,0x4e);//8251A方式命令delay(100);outportb(ctrl51,0x27);//8251A工作命令}void set_bps(int bps){int i,sendhigh,sendlow;i=clk/bps;i=i/factor;//计算计数初值sendhigh = (i>>8)&0x00ff;sendlow = i & 0x00ff;outportb(timctl,0xb6);outportb(timer2,sendlow);//装计数初值低字节outportb(timer2,sendhigh);//装计数初值高字节}下位机程序运行过程中,一开始能顺利的接受上位机信号,并能进行正确的运算并得出结果,但是添加的音乐程序却无法正常工作,调试过程中在下位机接受到上位机发过来的数组之后,同时接受一个字符z,然后根据是否接受字符z来判断是否播放音乐,避免了以接受数组信息为音乐播放判断信号带来的不便,程序得以正确运行。

相关文档
最新文档