当前位置:首页 >> 电子/电路 >>

简易超市收银机(程序)

简易超市收银机设计 (程序)
一、数据存储单元的设置及说明 ZANCUN EQU 25H;暂存输入数据 GW EQU 30H;输出显示的个位 SW EQU 31H;输出显示的十位 BW EQU 32H;输出显示的百位 QW EQU 33H;输出显示的千位 FLAG EQU 34H;判断是否松开键盘的标识 CHENG_ZANCUN EQU 35H;乘法暂存 BCDH_ZANCUN EQU 36H;BCD 码转 16 进制暂存 DISPH EQU 37H;暂存输出显示的高八位 DISPL EQU 38H;暂存输出显示的低八位 ERROR_FLAG EQU 39H;错误标识位 X1 EQU 40H;第一操作数的第一位输入 X2 EQU 41H;第一操作数的第二位输入 X EQU 42H;第一操作数的结果 Y1 EQU 43H;第二操作数的第一位输入 Y2 EQU 44H;第二操作数的第二位输入 Y EQU 45H;第二操作数的结果 Z1 EQU 46H;第三操作数的第一位输入 Z2 EQU 47H;第三操作数的第二位输入 Z EQU 48H;第三操作数的结果 XX EQU 49H;第一操作数运算过程中产生的进位 YY EQU 4AH;第二操作数运算过程中产生的进位 需要具体说明的标识如下: FLAG: 判断是否松开键盘的标识。其原理是在初始化程序中将其置 1 以保证 在第一次正确扫描。在主程序循环中,当无按键按下时将其置 1,有按键按下后 将其置 0。在每次扫描按键之后会判断 FLAG 中的值,若为 0 则表示按键按下后

没有松开,输入无效,不执行数据存储,功能键判断等操作,直接返回主程序; 若为 1 则表示中间有检测到松开键盘,输入有效,执行数据存数,功能键判断等 操作。 ERROR_FLAG:错误标识位。初始化程序中将其置 0,在发生溢出的情况下将 其置 1, 在每一次扫描键盘后有一个判定, 若 ERROR_FLAG 为 0, 则程序继续执行, 若 ERROR_FLAG 为 1 则只判断扫描的特征码是否为“清零”的特征码,若是则转 至清零程序,若不是则直接返回主程序。 X1,X2,Y1,Y2,Z1,Z2:三组分别是 X,Y,Z 的第一位输入和第二位输入。 以操作数 X 为例,当输入的是第一位时,即 R2=1 时, ,将 ZANCUN 单元(扫描到 的数据存在 ZANCUN 单元)中的值给 X1 以及 X;若有第二位输入,即 R2=2 时, 将 ZANCUN 单元中的值给 X2,此时 X1 中的值代表的是十位上的数,X2 中的值代 表的是个位上的数,因此需要将 X1 乘以 10H 并加上 X2,结果存至 X。 R2、R3、R4:分别用来对操作数 X,Y,Z 的计数。本设计中操作数最高为两 位数, 因此需要设置这样的标识来判断输入数目的个数。这三个寄存器在初始化 程序均清零。以操作数 X 的输入为例,当输入第一位的时候,R2=1,当输入第二 位的时候,R2=2;当再有连续的数据输入即 R2>2 时,程序选择忽略。这些标志 位在有功能键按下后进行清零。 R5:R5 用来存储符号,若按下“+”则将其置 1;若按下“*”则将其置 2; 在初始化,按下“=”及“清零”时将其置 0。 R6:R6 用来标识乘号所在的位置,即标识是否等待第三操作数。 R5、R6 的状态将影响到操作数的存储,当 R5=0 时,则说明还没有符号被按 下过,操作数存至 X;当 R5=1 时,则说明上一次按下的符号是“+” ,操作数存 至 Y;当 R5=2 时,则说明上一次按下的符号是“*” ,此时需要检测“*”前面的 符号,当 R6=1 时,则说明前面是“+” ,需要等待第三操作数 Z 的输入,此时操 作数存至 Z;当 R6=0 时,则说明前面没有符号,此时操作数存至 Y。

二、程序清单
ORG 0000H LJMP MAIN ORG 0050H MAIN: ZANCUN EQU 25H; 暂存输入 数据 GW EQU 30H; 输出显示的个 位 SW EQU 31H; 输出显示的十

位 BW EQU 32H; 输出显示的百 位 QW EQU 33H; 输出显示的千 位 FLAG EQU 34H; 判断是否松 开键盘的标识 CHENG_ZANCUN EQU 35H; 乘 法暂存 BCDH_ZANCUN EQU 36H;BCD 码转 16 进制暂存 DISPH EQU 37H;暂存输出显 示的高八位 DISPL EQU 38H;暂存输出显 示的低八位 ERROR_FLAG EQU 39H; 错误 标识位 X1 EQU 40H; 第一操作数的 第一位输入 X2 EQU 41H; 第一操作数的 第二位输入 X EQU 42H;第一操作数的结 果 Y1 EQU 43H; 第二操作数的 第一位输入 Y2 EQU 44H; 第二操作数的 第二位输入 Y EQU 45H;第二操作数的结 果 Z1 EQU 46H; 第三操作数的 第一位输入 Z2 EQU 47H; 第三操作数的 第二位输入 Z EQU 48H;第三操作数的结 果 XX EQU 49H; 第一操作数运 算过程中产生的进位 YY EQU 4AH; 第二操作数运 算过程中产生的进位 ;--------------------初 始 化 -------------------------

MOV CLR MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV

SP,#60H A P2,#0FFH GW,A SW,A BW,A QW,A R0,A R1,A R2,A R3,A R4,A R5,A R6,A R7,A X,A Y,A Z,A X1,A X2,A Y1,A Y2,A Z1,A Z2,A XX,A YY,A FLAG,#01H ERROR_FLAG,A

MOV A,P1 ANL A,#0FH MOV B,A MOV P1,#0F0H MOV A,P1 ANL A,#0F0H ORL A,B MOV R0,ERROR_FLAG CJNE R0,#00H,ERROR_NEXT;----判断有无错误-----CJNE A,#0FFH,YS1 MOV FLAG,#01H RET ERROR_NEXT:;------ 发 生 错误时只扫描键盘的清零 键是否按下----CJNE A,#77H,ERROR_EXIT LCALL CE ERROR_EXIT: RET YS1:MOV R0,FLAG CJNE R0,#01H,KEY_EXIT CJNE A,#77H,YS2 LCALL CE;转清零 YS2:CJNE A,#7DH,YS3 LCALL CHENG; 转 乘号判定 MOV FLAG,#00H RET YS3:CJNE A,#7EH,YS4 LCALL JIA; 转 加 号判定 MOV FLAG,#00H RET YS4:CJNE A,#7BH,YS5 LCALL DENG;转等 号判定 MOV FLAG,#00H

;------------------- 主 程 序 循 环 ----------------------LOOP: LCALL KEY_SCAN LCALL LED_DISPLAY SJMP LOOP ;----------------- 键 盘 扫 描 -------------------------KEY_SCAN: MOV P1,#0FH

RET YS5:CJNE A,#0B7H,YS6 LCALL XING;转星 号子程序 MOV FLAG,#00H RET YS6:CJNE A,#0E7H,KEY_IN LCALL JING;转井 号子程序 MOV FLAG,#00H RET KEY_IN: MOV R0,#0FFH MOV 26H,A MOV DPTR,#KEY_TAB KEY_IN1: INC R0 MOV A,R0 MOVC A,@A+DPTR CJNE A,26H,KEY_IN2 MOV ZANCUN,R0 LCALL QINGLING;------ 有新数据 输入,显示器清零---LCALL CZS SJMP KEY_EXIT KEY_IN2: JNZ KEY_IN1 KEY_EXIT: MOV FLAG,#00H RET ;---------------- 操 作 数 存 储 --------------------------CZS: CJNE R5,#00H,CZS2 CZS1: INC R2;-----------输入两 位数的情况----CLR C CJNE R2,#02H,LL MOV SW,X1 MOV X2,ZANCUN

MOV GW,X2 MOV A,X1;--------------拼成压缩 BCD 码---MOV B,#10H MUL AB ADD A,X2 MOV X,A RET LL:JNC CZS1_EXIT;-------- 输 入 一位数的情况--MOV X1,ZANCUN MOV GW,X1 MOV X,X1 RET CZS1_EXIT: MOV R2,#02H;----R2 保证输入的最多是两位数 -RET CZS2: CJNE R6,#00H,CZS3 INC R3 CLR C CJNE R3,#02H,MM MOV SW,Y1 MOV Y2,ZANCUN MOV GW,Y2 MOV MOV MUL ADD MOV RET A,Y1 B,#10H AB A,Y2 Y,A

RET CZS2_EXIT: MOV R3,#02H RET CZS3: INC R4 CLR C CJNE R4,#02H,NN MOV SW,Z1 MOV Z2,ZANCUN MOV GW,Z2 MOV MOV MUL ADD MOV RET A,Z1 B,#10H AB A,Z2 Z,A

NN:JNC CZS3_EXIT MOV Z1,ZANCUN MOV GW,Z1 MOV Z,Z1 RET CZS3_EXIT: MOV R4,#02H RET ;----------------- 各 功 能 键 判 断 ----------------;----R5 用来存储符号,加 号表示为 1,乘号表示为 2, 当等于 0 时表示还没有符号 位按下过--;----R6 用来标识乘号所在 的位置,即标识是否等待第 三操作数----CHENG: CJNE R5,#01H,CHENG_EXIT MOV R6,#01H CHENG_EXIT:MOV R5,#02H

MM:JNC MOV MOV MOV

CZS2_EXIT Y1,ZANCUN GW,Y1 Y,Y1

MOV R4,#00H MOV R3,#00H RET JIA: CLR C CJNE R5,#01H,JIA1 LCALL JIAFA SJMP JIA_EXIT JIA1: JC JIA_EXIT CJNE R6,#00H,JIA2 LCALL CHENGFA SJMP JIA_EXIT JIA2: LCALL CHENGFA1 LCALL JIAFA MOV R6,#00H JIA_EXIT: MOV R5,#01H MOV R3,#00H MOV R4,#00H RET DENG: CJNE R5,#01H,DENG1 LCALL JIAFA SJMP DENG_EXIT DENG1: JC DENG_EXIT CJNE R6,#00H,DENG2 LCALL CHENGFA SJMP DENG_EXIT DENG2: LCALL CHENGFA1 LCALL JIAFA DENG_EXIT: MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV R5,#00H MOV R6,#00H RET

CE:LJMP MAIN XING: MOV GW,#0EH MOV SW,#13H MOV BW,#00H MOV QW,#10H RET JING: MOV GW,#07H MOV SW,#07H MOV BW,#06H MOV QW,#02H RET ;--------------- 加 法 子 程 序 -----------------------JIAFA: PUSH PSW CLR C MOV A,X ADD A,Y DA A MOV X,A MOV A,XX ADDC A,YY DA A JNC JIAFA_NEXT LJMP ERROR JIAFA_NEXT: MOV XX,A MOV YY,#00H MOV DISPH,XX MOV DISPL,X LCALL TODISP POP PSW RET ;----------------- 乘 法 子 程 序 ---------------------CHENGFA:

MOV A,X LCALL BCDH MOV CHENG_ZANCUN,A MOV A,Y LCALL BCDH MOV B,CHENG_ZANCUN MUL AB LCALL HBCD MOV XX,DISPH MOV X,DISPL LCALL TODISP RET CHENGFA1: MOV A,Y LCALL BCDH MOV CHENG_ZANCUN,A MOV A,Z LCALL BCDH MOV B,CHENG_ZANCUN MUL AB LCALL HBCD MOV YY,DISPH MOV Y,DISPL LCALL TODISP RET ;---------------BCD 转十 六 进 制 -------------------------------BCDH: PUSH PSW MOV BCDH_ZANCUN,A SWAP A ANL A,#0FH MOV B,#06H MUL AB MOV B,A MOV A,BCDH_ZANCUN CLR C SUBB A,B POP PSW RET ;-------------- 十六进制

转 BCD---------------------------------HBCD: PUSH PSW CLR RS0 SETB RS1 MOV R2,A MOV R3,B MOV A, R3 ANL A, #0FCH ; 取高字节的高 6 位 RR A RR A ; 除以 4 MOV R5,A ; 有多少个 1024,放入 R5, ADD A, R5 ADD A, R5 ; 乘以 3 MOV R7,A ;1024 的个数乘 以 3,放入 R7 MOV A, R2 ANL A, #3 ; 取低字节的低 2 位,高 6 位 为0 MOV R6,A ; 低字节的低两位放入 R6 XRL A, R3 ; 高字节与低字节低 2 位异或, 高 6 位为高字节的 ANL A, #3 ; 高字节与低字节低 2 位与, 高 6 位为 0 XRL A, R2 ; 低 2 位为高字节的低 2 位, 高 6 位为低字节的高 6 位 RR A ; RR A ; 两字节 中从高字节低 2 位到低字节 高 6 位的组成的一个字节 ADD A, R7 ; 下面的步骤求出有多少个 4

JNC L2 ; 也就可以求出这么多个 1024 中含有的 4 的个数 INC R5 ; 逢 256 个 4,超过 1000,1000 个数加 1 ADD A, #6 ; 由于 250X4=1000,多出了 6 个,4 的个数要加上 6 L2: ADD A, R7 ;A 中存放的是 4 的个数, MOV B, #25 JNC L3 INC R5 ; ADD A, #6 ; 与上次加法运算的原理相 同 DIV AB SJMP L4 L3: DIV AB ; 至此 A 中存放的是 4 的个数,除 以 25,也就是 100 的个数 CJNE A, #10, L4 INC R5 ;如果 超过 25X10 个 4,R5 需加 1; 至此 R5 中存放 1000 的个数 CLR A ; 剩余的个 数不超过 25 L4: MOV R7,A ;100 的个 数入 R7 MOV A, #10 XCH A, B ;余数入 A,前面求出 1000 和 100 的 个数,剩余的 4 的个数用于 求十位和个位。 ADD A, #L5 ADD A,#(-$-3) MOVC A, @A+PC ; 依据余数取 数 ADD A, R6 ;加上低两位

DA A 整 XCH ; 十进制调

A, R5 ; 十位个位放 入 R5,A 中的是 1000 的个数 DIV AB ; 除以 10,商也就是 10000 的 个数,余数为 1000 的个数 XCH A, R7 ;10000 的个数 放入 R7,A 中为 100 的个数 SWAP A ;100 个数 放高半字节 ORL A, B ;1000 的个数 低半字节 SWAP A ;交换 MOV R6,A ;放入 R6 MOV DISPH,R6 MOV DISPL,R5 POP PSW RET L5: DB 00H, 04H, 08H, 12H, 16H DB 20H, 24H, 28H, 32H, 36H DB 40H, 44H, 48H, 52H, 56H DB 60H, 64H, 68H, 72H, 76H DB 80H, 84H, 88H, 92H, 96H ;-------------- 错误处理 子 程 序 --------------------ERROR: MOV GW,#0EH MOV SW,#0EH

MOV BW,#0EH MOV QW,#0EH MOV ERROR_FLAG,#01H MOV R7,#250 ERROR_STEP: CLR P2.7 ACALL DELAY1 DJNZ R7,ERROR_STEP LJMP LOOP ;-------- 将结果转存到个 位十位百位千位通过七段 数码管显示-----TODISP: MOV A,DISPH SWAP A ANL A,#0FH MOV QW,A MOV A,DISPH ANL A,#0FH MOV BW,A MOV A,DISPL SWAP A ANL A,#0FH MOV SW,A MOV A,DISPL ANL A,#0FH MOV GW,A RET ;------------- 七 段 数 码 管 显 示 子 程 序 -------------LED_DISPLAY: MOV R1,#0FEH MOV R0,#30H MOV R7,#04H MOV DPTR,#LED_TAB LED_LOOP: MOV A,@R0 MOVC A,@A+DPTR MOV P0,A MOV A,R1 MOV P2,A RL A MOV R1,A

INC R0 ACALL DELAY DJNZ R7,LED_LOOP RET ;----------------- 延 时 子程序-------------DELAY: PUSH 07H PUSH 06H MOV R6,#50H DELAY_STEP: MOV R7,#02H DJNZ R7,$ DJNZ R6,DELAY_STEP POP 06H POP 07H RET DELAY1: PUSH 07H PUSH 06H MOV R6,#00H DELAY1_STEP: MOV R7,#00H DJNZ R7,$ DJNZ R6,DELAY_STEP POP 06H POP 07H RET ;---------- 显示中间清零 子程序-------------QINGLING: MOV GW,#00H MOV SW,#00H MOV BW,#00H MOV QW,#00H RET ;----------------- 键 盘 表 及 七 段 管 转 换 表 ------------KEY_TAB:DB 0D7H,0EBH,0DBH,0BBH,0ED H;0,1,2,3,4 DB

0DDH,0BDH,0EEH,0DEH,0BE H;5,6,7,8,9 DB 00H;返回 LED_TAB:DB 0C0H,0F9H,0A4H,0B0H,99H; 0,1,2,3,4 DB 92H,82H,0F8H,80H,90H; 5,6,7,8,9 DB 88H,83H,0C6H,0A1H,86H; A,b,C,d,E DB 8EH,0C7H,89H,8CH,0C1H; F,L,H,P,U DB 0CEH,91H,00H,0FFH; r,y,亮,灭 END


相关文章:
简易超市收银机(程序).doc
简易超市收银机(程序) - 简易超市收银机设计 (程序) 一、数据存储单元的设置
D简易超市收银机.doc
D 题 简易超市收银机一. 任务 采用广州周立功单片机发展有限公司赞助的 ARM2138 ...简易超市收银机(程序) 暂无评价 7页 免费 超市收银机品牌 2页 免费 简易POS超...
简易超市收银系统毕业设计.doc
使用 SD 卡扩 展系统存储资源、扩展微型汉字打印机等实现简易超市收银机的制作。...图 3.4 ? 测温程序流程 打印机部分程序设计流程 温度传感器我们采用的是 DS...
基于单片机的简易收款机的设计 (1).doc
本设计正是基于此,研究超市现在流行的 简易收款机。 (二)本设计的目的和意义 ...四、系统软件程序设计本设计程序共分成五个部分:键盘处理程序、LCD 显示程序、...
超市收银机.doc
简易超市收银机 目录 摘要 ………6 一、 方案论证………...C。DS18B20 测温程序流程如下图: 图 3.5 DS18B20 测温程序(部分) : DS18B20 程序设计方案 /***...
2006电子设计竞赛优秀作品选登(D题1).doc
系统组成框图如下: 显示器 简易超市收银机 其他 功能 PHILIPS ARM 2138 实验...日历时钟程序流程 // P0.17 连接捕获 1.2,其余连接 GPIO // 分频系数 //...
Visual Basic程序设计教程第一章 VB程序设计入门_图文.ppt
Visual Basic程序设计教程第一章 VB程序设计入门_...设计一个简单超市收银机程序。收银员可以输入 商品...
山东省2006年全国大学生电子设计竞赛题目.pdf
6)实现和PC机通讯,通过PC机串口直接对显示信息进行更新(须做PC机 客户程序); 7...系统组成框图如下: D题 简易超市收银机 PHILIPS ARM 2138 实验开发仪 打印机 ...
毕业设计(论文)任务书 倪冰.doc
毕业设计(论文)任务书 倪冰 - 毕业设计(论文)任务书 课题名称 院 (系) 专姓学业名号 简易超市收银机 南京工业大学 电子信息工程 倪冰 5371213111 2014.6 ...
第一章VB程序设计入门_图文.ppt
设计一个简单超市收银机程序。收银员可以输入商品的名称、单价、数量,及折扣率,输出购买商 品的清单,并为顾客计算出所购商品总价。 ? 程序设计的一般过程 ①②...
最新超市收银流程及职责.doc
收银机操作及简单故障的排除。 ⑦顾客投诉处理技巧。 (二)收银员的主要工作...营业结束后作业流程暂停收银 班结程序 现金或凭证票据 现金室送存现金 填写班结...
电子类毕业设计 题目大全.doc
1、家用防盗报警(电路图,程序,论文) 2、防盗拨号报警(电路图,程序,论文) 3...2. 发挥部分 (1) 简易超市收银机具有可设置 1000 个商品价目表(PLU) ,并...
超市收银工作流程安排.doc
超市收银工作流程安排 收银工作的内容繁杂而琐碎,除了有每日的例行工作之外,还有...4、 收银机开机程序: UPS 电源, 开 显示屏、 主机, 将显示屏及客户屏调整到...
电气专业的一些毕业设计题目_图文.doc
+程序+论文) 45、简易超市收银机(JPG 格式电路+程序+论文) 46、简易数字显示交流毫伏表(JPG 格式电路+程序+论文) 47、空调红外遥控器设计(JPG 格式电路+程序+...
电子类毕业设计-题目大全.doc
1、家用防盗报警(电路图,程序,论文) 2、防盗拨号报警(电路图,程序,论文) 3...完成第(6)项 其他 总分 简易超市收银机一. 任务 设计制作一个简易超市收银机。...
超市收银员流程.doc
了解收银操作的基本规范,掌握好收银机的操 作和简单故障排除,熟练地进行收银操作...(二)收款程序的运行原则 连锁店收银,原则上要求收银员收款过程中,缴款过程中都...
收银人员软件简单操作流程 - 百度文库.txt
通用超市收银软件简单操作流程 专业文档 专业文档是百度文库认证用户/机构上传的...3、收银机的开关程序: 开机程序:电源(URS电源)→主机→显示屏→打印机 关机...
电气专业的毕业设计题目大全_图文.doc
+程序+论文) 45、简易超市收银机(JPG 格式电路+程序+论文) 46、简易数字显示交流毫伏表(JPG 格式电路+程序+论文) 47、空调红外遥控器设计(JPG 格式电路+程序+...
C++超市收银机程序设计报告.doc
2.本题提高 本题只是简单地模拟一个收银机的运行流程,可以在本题的基础上对其做一定的修改: (1) 对于超市收银机,应该还有会员优惠政策程序; (2) 应该有更好的...
山东省2006年全国大学生电子设计竞赛题目.doc
通过 PC 机串口直接对显示信息进行更新(须做 PC 机客户程序) ; 7)其他发挥...D 题 简易超市收银机一. 任务 采用广州周立功单片机发展有限公司赞助的 ARM2138 ...