




免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计设计题目 简易收银机学生姓名 张重庆学 号 20072358专业班级 通信工程07-1班 指导教师 王琼 吴从中2010年9月9日简易收银机一、任务与要求: 1、设计目的: 利用MCS-51单片机及相关芯片构成简易收银机。 2、设计要求: 系统实现如下功能: 具有可扩展键盘用以实现数字和“”、“”、“”的输入。 可循环实现单个用户消费总金额的计算。 具有复位、清零、找零和小数点显示等扩展的功能。二、设计过程: 1、方案论证: (A)工作流程: 通电后收银机数码管的初始显示状态为:最右边的数码管显示“0”,其他数码管不亮。按数字键键入商品单价和数量,键入数字时先高位后低位,单价按元的十位、个位、1/10位、1/100位依次键入,数量按件的十位、个位依次键入。计算商品的金额时,先键入商品单价,再键入商品的数量。键入单价第一个数字时,最右边的数码管由原来的“0”变为这个数字,以后键入新的数字时,老的数字依次逐位左移,最后一位是新键入的数字。按“”键再键入商品的数量,此时,原商品的单价显示不变,等待商品数量键入。当键入商品的数量时,数码管单价显示立即消失,转为逐位显示商品的数量。按“”键后将计算出最近一笔商品的金额。如有“乘数量”标志,便进行这笔商品单价乘以数量的运算,运算的乘积金额累加到此前各笔商品累计的总金额中去,数码管显示最新累计的总金额。如无“乘数量”标志位,就直接把这笔商品的单价累加到以前的总金额中去,得出最新累计的总金额。按过“”键后,再键入下一笔商品的单价时,刚才数码管显示的总金额消失,转为逐位显示键入商品的单价。最后的操作时按“”键。“”键与“”键的作用相似,差别在于当前“最新累计的总金额”已是最终“累计的总金额”了,至此,一位顾客的累计结束,不再等待下一笔商品单价的键入。在键入单价或数量时,如按错数字可以按清零键重新输入,初始化时小数点为亮的,在输入数字键时,小数点消失。最终结果小数点是为亮的。 收银机一位顾客的累计结束,可按复位键,回到初始显示状态,也是准备接待下一位顾客。(B)硬件系统说明与电路原理图:根据收银机的工作流程可知只需运用“单片机试验系统”教学试验箱上的8279、键盘及LED显示电路即可实现所有的功能。其原理图如图1所示。其中8279可按其功能分为:键盘功能块、显示功能块、控制功能块、与CPU接口功能块。控制功能块包括控制和定时寄存器、定时和控制、扫描计数器三部分,它主要用来控制键盘和显示功能块工作。显示地址寄存器保存当前CPU读或写的那个RAM地址,以及正显示着的那两个4位半字节的地址,读写地址由CPU命令编程,也可置为每次读写后地址自动加1的工作方式,在设置了正确的工作方式后,显示RAM可直接由CPU读出,半字节A和半字节B地址自动由8279更新,以适应由CPU送入的数据,A和B半字节可独立送入,也可作为一个字送入,随CPU所设置的工作方式而定。当键盘上出现有效的输入时,键输入数据讲自动进入8279的键盘RAM存储器,并向MCS-51单片机请求中断,单片机响应中断读取键盘RAM中的键输入数据,并进入中断服务程序进行相应的处理,最后将数据返送到8279的显示RAM中,通过74LS138选通与六个存储字节相对应的LED并显示。若要更新显示器输出,仅需改变8279中显示RAM中的内容。 2、设计原理:在单片机内部RAM分配的6个单元显示缓冲区为39H3EH,数码管自右至左分别显示39H3EH单元内容;商品单价输入后自高到低存放在30H和33H单元中,商品数量输入后存放在34H35H单元中;还要为总金额存放分配50H55H,称为和缓冲区,总金额自高到低存放在里面。在键盘的中断服务程序中将“单片机试验系统”教学试验箱键盘中的“A”、“B”、“C”、“D”、“E”、“F”分别扩展为“*”、“+”、“清零”、“找零”、“=”和“复位”键。收银机的显示器上要显示单价、数量、金额等数字,实验装置LED显示器有6个数码管,如将最右边两位分别认作角、分,则六位可以表示的总金额不大于9999.99元,与此对应,每件商品的单价和数量也要有一定限制;故规定单价只可为0.01元-99.99元,数量只可为1件-99件。 在单片机内RAM的位单元中分配5个标志位,01H标志位代表是否输入符号键,即输入“+”、“*”、“找零”键时,01H置1;02H代表是否指向数量位,即当02H为0时,代表指向单价位,为1时代表指向数量位;03H代表是否按完乘号键;04H代表按完乘号键的第一次输入,若为非零则置1;05H代表是否按过“=”,按过则置1。图1 简易收银机电路原理图三、软件主要模块流程图、源程序及注释1、软件环境:Windows2000、Keil22、程序思想: (1)首先进行8279的初始化,内存清零,使最右边显示为0,其他不显示;(2)等待键值,看是否键入“复位”,若键入“复位”,则调用复位功能;若没键入“复位”键,则看是否键入“+”键,若键入“+”,则调用加号功能,然后等待键入数字;若没键入“+”键,则看是否键入“*”键。若键入“*”键,则调用乘号功能,然后等待键入数字;若没键入“*”键,看是否键入“清零”键。若键入“清零”键,则调用“清零”功能,然后等待键入数字;若没键入“清零”键,则看是否键入“=”键。若按过“=”键,则调用等号功能,然后等待键入数字;若没键入“=”键,则看是否键入“找零键”。若按过“找零”键,则调用找零功能,然后等待键入数字;若没键入“找零”键,则将显示缓冲区39H3EH的内容显示出来。 3、源程序清单: ORG 0000H LJMP MAIN ORG 0013H LJMP INT1PMAIN: MOV SP,#60H SETB EX1 NOP MOV DPTR,#5FFFH MOV A,#0DCH MOVX DPTR,ALP: MOVX A,DPTR JB ACC.7,LP;等待清屏 MOV A,#00H MOVX DPTR,A MOV A,#34H;时钟编程 MOVX DPTR,A CLR IT1;触发方式设定 NOP SETB EA NOP LCALL CLCQC10: LCALL DISY LJMP QC10CLC: MOV 59H,#1;复位59H置1,使能判断是否要将待机时的0重写,而不是左移 MOV R0,#3AH;使显示RAM中只有一 MOV R7,#05H MOV 39H,#0H LAP2: MOV R0,#23 INC R0 DJNZ R7,LAP2 MOV R0,#50H;清空结果存放空间 MOV R7,#6LAP3:MOV R0,#0 INC R0 DJNZ R7,LAP3 MOV R0,#30H;清空单价地址存放空间 MOV R7,#5LAP4:MOV R0,#0 INC R0 DJNZ R7,LAP4 MOV 35H,#1;乘数空间初始值至少为1,因为买东西至少买1件 CLR 01H;01h是按完+号或“*”号的标志位,按下其中之一便置1 CLR 02H;02h用于判断是否指向乘数地址单元,02h为1时36h指向乘数地址 ,为0是指向单 CLR 03H;判断是否按完乘号 CLR 04H; CLR 05H;判断是否按下了“=” RETINT1P: PUSH ACC PUSH DPH PUSH DPL MOV DPTR,#5EFFH MOVX A,DPTR CJNE A,#0FH,NF;如按F,则复位LCALL CLC LJMP EXIT;复位完毕NF: CJNE A,#0BH,NPLUS1;如按B,则代表“+” LJMP JIAN1NPLUS1: LJMP NPLUSJIAN1: SETB 01H;按下符号键了CLR 02H;指向单价地址M4: CLR 03H CLR 04H MOV R0,#39H; 将数码管全部熄灭等待目前总金额的出现 MOV R7,#06HLLPA: MOV R0,#23 INC R0 DJNZ R7,LLPA MOV A, 34H;将十位数提出了运算RL ARL ARL AADD A,34HADD A,34H;将第一次这个数左移3次,相当于乘以8,再加上自身2次,效果等同于此数于10相乘;(个位数乘以10不会溢出)ADD A,35H;将个位数加入 MOV 34H,A MOV R2,34H;乘法采用多次加法的办法,因此乘数初始值应当为1M2: MOV R4,#4MOV R0,#55HMOV R1,#33HCLR CM1: MOV A,R0ADDC A,R1 DA AMOV C,ACC.4 ;调整后,A如果有进位,一定是ACC.4为1(两个个位数相加不可能超过19),没进位则ACC.4为0ANL A,#0FH ;6位结果存储字节存放的都是非压缩的BCD码,高四位应该始终为0MOV R0,ADEC R0DEC R1DJNZ R4,M1MOV A,R0ADDC A,#0DA AMOV C,ACC.4ANL A,#0FHMOV R0,ADEC R0MOV A,R0ADDC A,#0DA AANL A,#0FHMOV R0,ADJNZ R2,M2;循环乘数次MOV 40H,50HMOV 41H,51HMOV 42H,52HMOV 43H,53HMOV 44H,54HMOV 45H,55H MOV R0,#40H;若遇到最高位为零,则是它? MOV R5,#03HWW: CJNE R0,#0,QQ MOV R0,#23 INC R0 DJNZ R5,WWQQ: MOV 3EH,40H;将计算的结果存入显示RAM,从而显示出来MOV 3DH,41HMOV 3CH,42HMOV 3BH,43HMOV 3AH,44HMOV 39H,45HMOV R0,#30H;清空单价和乘数地址存放空间MOV R7,#5LLP5: MOV R0,#0INC R0DJNZ R7,LLP5 MOV 35H,#1;加法运算以后各位默认为一,因为买东西不输入数量默认为1件LJMP EXIT;加法内容完毕NPLUS: CJNE A,#0AH,NMUL;如按A,则代表“*” SETB 01H SETB 02H;指向乘数地址 SETB 03H MOV 35H,#0;如要进行乘法,必须先将成数空间清零 MOV 34H,#0 LJMP EXIT;乘法内容完毕NMUL: CJNE A,#0CH,NDT;按C后可以清除本次输 MOV 59H,#1 MOV R0,#3AH;使显示RAM中只有一个0亮 MOV R7,#05H MOV 39H,#0H LZP2: MOV R0,#23 INC R0 DJNZ R7,LZP2JB 05H,APIN;判断是否是清除输入金额 JB 02H,CMUL MOV R0,#30H;清空单价地址存放空间MOV R7,#4LQP4:MOV R0,#0INC R0DJNZ R7,LQP4LJMP L3APIN: MOV R0,#29H;清空输入金额地址存放空间MOV R7,#6LQP8: MOV R0,#0INC R0DJNZ R7,LQP8 L3: LJMP EXITCMUL: MOV 34H,#0 MOV 35H,#0 LJMP EXIT MOV R0,#3AH;使显示RAM中只有一个0亮 MOV R7,#05H MOV 39H,#0H LBP2: MOV R0,#23 INC R0 DJNZ R7,LBP2NDT: CJNE A,#0EH,NEQ;如按E,则代表“=” SETB 01HSETB 05HMOV R0,#29H;清空输入金额地址存放空间MOV R7,#6LQP9: MOV R0,#0INC R0DJNZ R7,LQP9 LJMP M4 NEQ: CJNE A,#0DH,NCR;如按D,则代表“找零键”MOV R0,#39H;使显示RAM中全灭 MOV R7,#06H LLAP2:MOV R0,#23 INC R0 DJNZ R7,LLAP2 MOV R7,#6CLR CMOV R0,#29HMOV R1,#55HTXT:MOV A,R0SUBB A,R1JC CII AJMP TOTCII: SUBB A,#05H;因为此时Cy一定为1,所以调整时只需减5 ANL A,#0FH SETB CTOT: MOV R1,A INC R0 DEC R1 DJNZ R7,TXT MOV R0,#50H;若遇到最高位为零,则是它? MOV R5,#03HWW1: CJNE R0,#0,QQ1 MOV R0,#23INC R0 DJNZ R5,WW1QQ1:MOV 3EH,50H;将计算的结果存入显示RAM,从而显示出来MOV 3DH,51HMOV 3CH,52HMOV 3BH,53HMOV 3AH,54HMOV 39H,55H LJMP EXITNCR: JB 05H,QINQIN JB 02H,CC0 MOV 30H,31H MOV 31H,32H MOV 32H,33H MOV 33H,A LJMP CC1CC0: MOV 34H,35H MOV 35H,ALJMP CC1QINQIN: MOV 2EH,2DHMOV 2DH,2CHMOV 2CH,2BHMOV 2BH,2AHMOV 2AH,29HMOV 29H,A CC1: JB 01H,AFTER DJNZ 59H,L1 LJMP L2L1: MOV 3EH,3DH MOV 3DH,3CH MOV 3CH,3BH MOV 3BH,3AH MOV 3AH,39HL2: MOV 39H,A LJMP EXITAFTER: JB 03H,AM LJMP NMAM: SETB 04HNM: MOV R0,#3AH MOV R7,#05H MOV 39H,A LJMP LLP6 LLP6: MOV R0,#23 INC R0 DJNZ R7,LLP6 CLR 01HEXIT: LCALL DISY POP DPL POP DPH POP ACC RETIDISY: MOV R2,#06H MOV A,#92H MOV DPTR,#5FFFH MOVX DPTR,A MOV R0,#39HTY11: MOV A,R0 MOV DPTR,#TABL MOVC A,A+DPTR MOV DPTR,#5EFFH CJNE R2,#4,Q1 JB 04H,Q1 ANL A,#7FHQ1: MOVX DPTR,A INC R0 DJNZ R2,TY11 RETTABL: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H DB 83H,0C6H,0A1H,86H,8EH,8CH DB 0C1H,89H,0C7H,0BFH,91H DB 00H,0FFH END 四、调试过程:将试验箱的控制开关KC拨至上状态,并将编译好的程序成功导入试验箱中,可观察的6个数码管最右侧显示零,其他什么都不显示,这时可以按顾客的结账流程从键盘输入单价、数量和相应的符号键,验证得数码管显示结果正确且可实现复位、清零、找零功能。五、课程设计总结: 程序的整体思路是循环调用显示程序,不断刷新显示缓冲区中的内容,每次按键都会对改变显示缓冲区中的内容,从而能即时地在数码管上显示出来。而最核心的总金额累计模块采取的是以商品数量为循环次数,不断累加商品单价的思想。 在实现收银机基本功能的基础上,为了完善系统,我又增加了一些扩展功能:清零功能、找零功能、复位功能。为了提高系统的健壮性,考虑了很多在实际操作过程中会遇到的问题:1.不按顺序按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国有研所属国合通测春季校园招聘笔试题库历年考点版附带答案详解版
- 2025年骨科骨折急救演练模拟试卷答案及解析
- 2025年无人配送行业技术创新与商业模式研究报告
- 2025年汽车工业行业数字化供应链管理研究报告
- 2025年信息安全行业网络攻防技术应用与安全威胁分析报告
- 2025年新零售行业社交电商新兴模式研究报告
- 2025年交通物流行业智慧物流技术应用研究报告
- 2025年生物科技行业创新技术与生物医药应用研究报告
- 诺贝尔课件教学课件
- 2025安徽蚌埠市五河县卫健系统招聘副院长、临床科室主任人才笔试模拟试题及答案解析
- 打井设备成套转让协议书
- 组织结构的权力与权威
- 宠物急救标准化流程
- 2025届广东广州地铁集团有限公司校园招聘笔试参考题库附带答案详解(10套)
- 教师信息技术数字资源开发计划
- 低钾血症护理常规业务学习
- 送货服务方案
- 2025年中国AMOLED半导体显示面板行业发展前景预测及投资战略研究报告
- 湖南省2025年普通高等学校对口招生考试种植类专业综合知识试题
- JG/T 368-2012钢筋桁架楼承板
- 预包装中药管理制度
评论
0/150
提交评论