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

简易超市收银机(程序)

简易超市收银机设计 (程序)
一、数据存储单元的设置及说明 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
简易超市收银机(程序) - 简易超市收银机设计 (程序) 一、数据存储单元的设置
小型超市如何正确使用超市收银系统软件.doc
小型超市如何正确使用超市收银系统软件_财务管理_经管营销_专业资料。如何正确使用超市收银系统软件?小型超市如何利用收银系统软件更改商店信息、设置库存商品数据,从而...
简易超市收银系统毕业设计.doc
这种设计方案电路设计非常的简单,但是软件的编写要考虑软件 去抖等,会比较复杂...使用 SD 卡扩 展系统存储资源、扩展微型汉字打印机等实现简易超市收银机的制作。...
D简易超市收银机.doc
D简易超市收银机 - D 题 简易超市收银机 一. 任务 采用广州周立功单片机发展有限公司赞助的 ARM2138 实验开发仪为主机板, 设计制作一个简易超市收银机。系统组成...
C#简单超市收银系统源码.doc
C#简单超市收银系统源码_计算机软件及应用_IT/计算机_专业资料。C#简单超市收银系统源码 using System; using System.Collections.Generic; using System.Linq; using ...
最新超市收银流程及职责.doc
最新超市收银流程及职责_生产/经营管理_经管营销_专业资料。超市经营必备 ...营业结束后作业流程暂停收银 班结程序 现金或凭证票据 现金室送存现金 填写班结...
基于单片机的简易收款机的设计 (1).doc
本设计正是基于此,研究超市现在流行的 简易收款机。 (二)本设计的目的和意义 ...四、系统软件程序设计本设计程序共分成五个部分:键盘处理程序、LCD 显示程序、...
超市收银机.doc
超市收银机 - 简易超市收银机 目录 摘要 ………6 一、 方案论证………...
c#控制台简单超市收银系统.doc
c#控制台简单超市收银系统_计算机软件及应用_IT/计算机_专业资料。///商品
超市收银工作流程安排.doc
超市收银工作流程安排 收银工作的内容繁杂而琐碎,除了有每日的例行工作之外,还有...4、 收银机开机程序: UPS 电源, 开 显示屏、 主机, 将显示屏及客户屏调整到...
免费超市收银软件.doc
免费超市收银软件_计算机软件及应用_IT/计算机_专业资料。杭州腾纵科技有限公司 很多超市都有在用收银软件,虽然名字是说叫收银软件,但是所有的超市收 银软件功能都...
超市收银员流程.doc
收银员操作流程 收银工作是超市营运工作中相当重要的一环,收银台是物流、资金流...(二)收款程序的运行原则 连锁店收银,原则上要求收银员收款过程中,缴款过程中都...
小型超市如何正确使用超市收银系统软件.doc
小型超市如何正确使用超市收银系统软件_计算机软件及应用_IT/计算机_专业资料。小型超市如何正确使用超市收银系统软件 超市行业的竞争已经日益激烈, 特别是众多外资超市...
超市收银程序 (JAVA课程设计 2011).doc
超市收银程序 (JAVA课程设计 2011)_工学_高等教育_教育专区。辽宁工程技术大学超市收银程序 (JAVA课程设计 2011) 软件学院 课程设计报告书 课程名称 设计题目 专业...
超市收银工作流程培训资料_图文.ppt
超市收银工作流程培训资料_销售/营销_经管营销_专业资料。收银部日常工作培训 培训目的明确收银岗位的重要性, 掌握收银程序及要领, 提高顾客服务质量。 授课内容一、...
C++超市收银机程序设计报告.doc
C++超市收银机程序设计报告 - 南京师范大学 《面向对象程序设计》课程设计报告 姓学题 名: 院: 目: 汤云 学 号: 06080511 计算机科学与技术学院 超市收银机 ...
超市收银系统开发文档.doc
引言 1.1 编写目的 此需求规格说明书对“超市收银系统”做了全面细致的用户需求分析,明确所要开发的 软件应具有的功能、 性能与界面, 使系统分析人员及软件开发...
超市收银管理程序的设计与实现.doc
数据结构 课程设计 超市收银管理程序的设计与实现 武汉理工大学《数据结构》课程设计说明书 超市收银管理程序的设计与实现 摘要:该程序主要部分有:①登陆超市商品管理...
超市POS前台收银系统的开发应用.doc
超市POS前台收银系统的开发应用_计算机软件及应用_IT/计算机_专业资料。龙源期刊网 http://www.qikan.com.cn 超市 POS 前台收银系统的开发应用 作者:杨俊 来源:...
超市收银工作流程培训资料_图文.ppt
超市收银工作流程培训资料_理学_高等教育_教育专区。收银部日常工作培训 培训目的 ? ? 明确收银岗位的重要性, 掌握收银程序及要领, ? 提高顾客服务质量。 授课内容...