超市存物箱模拟装置.docx

上传人:牧羊曲112 文档编号:2030851 上传时间:2023-01-02 格式:DOCX 页数:35 大小:329.74KB
返回 下载 相关 举报
超市存物箱模拟装置.docx_第1页
第1页 / 共35页
超市存物箱模拟装置.docx_第2页
第2页 / 共35页
超市存物箱模拟装置.docx_第3页
第3页 / 共35页
超市存物箱模拟装置.docx_第4页
第4页 / 共35页
超市存物箱模拟装置.docx_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《超市存物箱模拟装置.docx》由会员分享,可在线阅读,更多相关《超市存物箱模拟装置.docx(35页珍藏版)》请在三一办公上搜索。

1、超市存物箱模拟装置超市存物箱模拟装置作者:汤伟 单位:南京信息职业技术学院一、 设计的任务与要求利用单片机制作超市存物箱模拟装置,模拟的内容包括:用户存物,用户取物,满箱提示,管理员取物,管理员修改密码,存物时用户密码通过数码管输出,存物箱状态指示灯,自动开关箱,有效按键提示音,密码输入提示,密码正确提示,密码错误提示。二、 硬件电路设计及原理图1、 存物箱模拟装置的面板设计:图(1) 面板设计2、 电路原理图如下: 图(2) 超市存物箱模拟装置原理图如图(2)所示:P0.0P0.7用于接44矩阵键盘;P1口作为四位数码管的数据端口,P3.0P3.3分别作为四位数码管的位选;P2.0P2.7作

2、为存物箱是否存物的状态指示;P3.4接绿色的LED,提示“请输入密码”;P3.5接红色的LED,提示“密码错误”;P3.6接蜂鸣器作为按键提示音的输出。该模拟装置的输入量均来自44矩阵键盘,由程序对相应管脚进行查询并处理,运行结果通过其它管脚以不同的方式输出给用户。程序处理过程以下将详细介绍。三、 存物箱程序流程图及实施细则1、主程序(START):40H单元的8个二进制位对应8个存物箱的存物状态,若某位为0,则说明此位对应的存物箱已存物,反之则为空箱。当40H的8个二进制位都为1(即40H的内容为FF)时,此时8个存物箱都为空箱,程序跳过查询“取”键,按此键无提示音。10H、11H两个单元为

3、四位随机密码产生单元,10H每经过1次查询后内容增1,11H在当10H的第5位为1时内容增1,这样是为了增加密码产生的随机性。若没有按键请求,则两个单元记满重新再记,不断循环计数,直至查询到按键请求计数才停止。2、管理员程序(ADMIN):将立即数00H放入R0中作为管理员使用存物箱的确定,因为本装置的程序多处用到“键盘查询”(KEY)程序,如:管理员密码的输入,用户密码的输入,管理员密码的修改。“键盘查询”为公用的程序段,设有不同的条件转移,(R0)=#00H就是作为管理员密码输入的功能条件。P1口为四位数码管的数据输入口,#40H就是0100 0000,其中的1对应的是八段码的g段。当输入

4、密码的第一位后,CLR P3.3,控制四位数码管最高位显示的位选(2号管脚)从P3.3得到一低电平信号(数码管为共阴),最高位显示“-”;输入密码的第二位后,同理,CLR P3.2,四位数码管的前两位显示“- -”,四位输入完毕,即显示“- - - -”。CLR P3.4将P3.4管脚清0,绿色的LED点亮,提示“请输入密码”。接下来就可以通过键盘查询(KEY)来输入管理员密码了。键盘查询程序开始之前P0口全为高电平,然后先将P0.4管脚清零,依次查询P0.3,P0.2,P0.1(此行P0.0没有接按键),是否也为低电平,没有的话将P0.4置为高电平,接下来再将P0.5管脚清零,同样依次查询P

5、0.3,P0.2,P0.1,P0.0是否也为低电平,假如P0.1为低电平,则确定为“6”号键被按下,将P0.5和P0.1至为高电平之后,程序将对此次按键进行相应的处理。上面已经提到,键盘查询是公用的,(R0)=#00H为管理员密码输入的功能条件,当查询到第一个数字按键按下时,将按键值放在51H单元的高四位,51H的低四位为0000,按键值也放在52H单元的低四位中,52H单元的高四位为0000,这样做主要是方便使用逻辑“或”将四次按键的值装在两个单元中。45H单元是位数判断的标准,此单元在开始键盘扫描之前的初始值为#00H,当第一次查到按键时,先将45H的内容增1,这样便知道输入的数应该放到第

6、一位(最高位),作为管理员密码输入的第一位数。再次有按键被按下,程序跳至位数判断时,45H内容再增1,45H内容为#02H,输入的数应该放到第二位,这样重复直至增到4,确定输入数为四位密码的最后一位,此后45H清0,由于功能条件(R0)=#00H为管理员密码输入,程序将跳转到四位数字密码输入位数判断,将输入的四位数密码整合到43H和44H两个单元(若(R0)#00H,可判断输入的密码为用户取物密码,则输入的四位数密码整合到30H和31H两个单元,进行用户密码校验)。43H 和44H分别与41H和42H进行比较,41H和42H存放的是真正管理员密码,若四个单元对应的内容不相同,则点亮红色的D2提

7、示“密码错误”并返回主程序。若四个单元对应的内容相同,说明管理员密码输入正确,数码管持续0.5S显示“0000”,表示密码正确。确定管理员身份后,程序执行到管理员的功能选择(CHOOSE),进行“取物”、“修改管理员密码”和“退出管理”的选择。1)如有用户忘记密码,管理员可按下“取物”键,此时管理员取物功能条件为(R2)=#08H,依然通过公用的“键盘查询”程序段。管理员只要输入箱号,对应的箱子就会打开。与其他情况下的“键盘查询”不同的是在查过“8”之后,有个判断转移条件“CJNE R2,#03H,G3”,意思是:R2内容为#03H时将继续查询“9”号键,若R2内容不为#03H,则跳至G3(G

8、3绕过了“9”号键和“0”号键的查询),显然R2内容为#08H而非#03H。因为没有“9”号和“0”号存物箱,所以在管理员取物的情况下要跳过“9”号键和“0”号键的查询。管理员按下1至8号键中的某个后,相应的存物箱将打开,完成之后关此存物箱并跳回管理员的功能选择(CHOOSE)。2)按下“管理员修改密码”(简称“改密”)键后,功能条件为(R1)=#05H,此时通过“键盘查询”输入两次相同的4位的新密码,由功能条件的判断,将第一次输入的四位密码存入33H、34H单元,第二次输入的四位密码存入35H、36H单元。33H和35H比较,34H和36H比较,若对应单元的内容均相同,则将新密码存在41H和

9、42H单元,这将作为管理员的新密码。若对应单元的内容有不同的,提示“密码错误”并返回管理员的功能选择(CHOOSE)。3)管理员按此键即退出管理,跳回主程序(START)。3、存物程序(SAVE):程序由START跳转到SAVE时,10H和11H两个单元停止计数,将两个单元拆分成四位数,每位数用四个二进制位表示,拆分时只将大于9的数进行修正,修正值为初始值与十进制数10的差值,即将A修正为0,B修正为1,F修正为5,小于或等与9的数经修正程序后不发生变化。10H单元的高四位和低四位数修正后分别存放在54H和55H低四位中,11H单元的高四位和低四位数修正后分别存放在56H和57H低四位中。然后

10、再将修正结果重新拼合在10H和11H单元中, 接着把10H单元的数据依次与8个存物箱对应的前两位密码存放单元20H、22H、24H、26H、28H、2AH、2CH、2EH进行比较,如果10H的值与某个单元的值相同,则将(10H)*2+1-(10H),然后返回到SAVE,重新对10H单元修正,如果修正后10H、11H两个单元的值为均等于#00H的情况,那么就将#50H和#21H分别存放在10H和11H中作为密码,然后再返回SAVE。直至10H内容与8个存物箱对应的前两位密码存放单元的内容均不相同为止,密码就确定了。至此用户存物的密码已经确定,将54H、55H、56H和57H的内容依次赋值给A,通

11、过A的值进行查表,将表中可让8段数码显示数字的8位二进制代码通过P1口传送给数码管,同时结合数码管位选信号的控制将四位密码输出给用户,动态显示时间持续3秒左右即停止。用户获取密码后,程序将对8个存物箱的存物状态依次进行查询,8个状态是通过P2口储存在40H单元中的,查询是从40H单元8个二进制位的最低位开始,查到第一个为“1”的二进制位时,即确定与该二进制位对应的箱子为此次存物箱。通过开关箱程序使该箱的指示灯闪烁,提示箱子已开,关箱后此箱的指示灯保持点亮状态,本制作中关箱不做重点设计,自动完成。关箱后查询是否还有空箱,若没有空箱,即40H单元的8个二进制位均为0,此时跳转至“满箱提醒”;若有空

12、箱,则返回“主程序”。“满箱提醒”时,只查询“管理员”和“取”这两个按键,没有按键按下数码管始终显示“FULL”,有则跳转处理。8个存物箱对应的密码存放单元有8组,每组两个单元,如下表:箱号 密码存放单元箱号 密码存放单元120H、21H528H、29H222H、23H62AH、2BH324H、25H72CH、2DH426H、27H82EH、2FH*说明:为更方便程序查询,选了连续地址单元20H2FH4、取物程序(TAKE): 进入取物程序(TAKE)后,键盘查询后功能条件打乱,如:(R0)=#00H为管理员功能条件; (R1)=#05H为管理员修改密码功能条件;(R2)=#08H为管理员取物

13、功能条件。在TAKE 程序的开始将他们重新赋值,这样在公用的“键盘查询”后便可判断出此次查询的目的是用户取物,键盘输入四位数字,由功能条件的判断,将输入的四位数密码整合到30H和31H两个单元中与8个存物箱对应的8组密码存放单元依次比较。当30H、31H单元与所有组对应的两个单元内容不同时,提示密码错误,然后自动返回主程序;当30H、31H单元与某一组的两个单元内容相同时,即确定该用户的存物箱的号码,接着转至开关箱程序,将用户存物的箱子打开。最后关上该箱,跳回主程序。四、超市存物箱模拟装置汇编语言程序 - 34 - ORG 0000H MAIN:MOV P0,#0FFH MOV P1,#0FF

14、H MOV P2,#0FFH MOV P3,#0FFH MOV 41H,#88H MOV 42H,#88H MOV 40H,P2 MOV 45H,#00H;=主程序= START:CLR P0.5 JB P0.0,N1 LCALL D1 JB P0.0,N1 LCALL RING SETB P0.0 SETB P0.5 AJMP ADMIN N1:SETB P0.5 CLR P0.7 JB P0.3,N2 LCALL D1 JB P0.3,N2 LCALL RING SETB P0.3 SETB P0.7 LJMP SAVE N2:MOV 60H,A MOV A,40H CJNE A,#0FF

15、H,G1 MOV A,60H SJMP N3 G1:MOV A,60H JB P0.1,N3 LCALL D1 JB P0.1,N3 LCALL RING SETB P0.1 SETB P0.7 LJMP TAKE N3:SETB P0.7 INC 10H MOV A,10H JNB ACC.5,G2 INC 11H G2:SJMP START;=管理员程序= ADMIN:MOV R0,#00H MOV P1,#40H CLR P3.4;=键盘查询= KEY: CLR P0.4 JB P0.3,N4 LCALL D1 JB P0.3,N4 LCALL RING SETB P0.3 SETB P

16、0.4 AJMP K1 N4:JB P0.2,N5 LCALL D1 JB P0.2,N5 LCALL RING SETB P0.2 SETB P0.4 AJMP K2 N5:JB P0.1,N6 LCALL D1 JB P0.1,N6 LCALL RING SETB P0.1 SETB P0.4 AJMP K3 N6:SETB P0.4 CLR P0.5 JB P0.3,N7 LCALL D1 JB P0.3,N7 LCALL RING SETB P0.3 SETB P0.5 AJMP K4 N7:JB P0.2,N8 LCALL D1 JB P0.2,N8 LCALL RING SETB

17、P0.2 SETB P0.5 AJMP K5 N8:JB P0.1,N9 LCALL D1 JB P0.1,N9 LCALL RING SETB P0.1 SETB P0.5 AJMP K6 N9:JB P0.0,N10 LCALL D1 JB P0.0,N10 LCALL RING SETB P0.0 SETB P0.5 AJMP START N10:SETB P0.5 CLR P0.6 JB P0.3,N11 LCALL D1 JB P0.3,N11 LCALL RING SETB P0.3 SETB P0.6 AJMP K7 N11:JB P0.2,N12 LCALL D1 JB P0.

18、2,N12 LCALL RING SETB P0.2 SETB P0.6 AJMP K8 N12:CJNE R2,#03H,G3 JB P0.1,N13 LCALL D1 JB P0.1,N13 LCALL RING SETB P0.1 SETB P0.6 AJMP K9 N13:SETB P0.6 CLR P0.7 JB P0.2,G3 LCALL D1 JB P0.2,G3 LCALL RING SETB P0.2 SETB P0.7 AJMP K0 G3:SETB P0.7 CLR P0.5 JB P0.0,N14 LCALL D1 JB P0.0,N14 LCALL RING SETB

19、 P0.0 SETB P0.5 AJMP START N14:SETB P0.5 AJMP KEY K1:MOV 50H,#10H MOV 51H,#01H CJNE R1,#05H,N15 AJMP JUD2 N15:CJNE R2,#08H,N16 SETB P2.0 LJMP CLOSE1 N16:AJMP JUD1 K2:MOV 50H,#20H MOV 51H,#02H CJNE R1,#05H,N17 AJMP JUD2 N17:CJNE R2,#08H,N18 SETB P2.1 LJMP CLOSE1 N18:AJMP JUD1 K3:MOV 50H,#30H MOV 51H,

20、#03H CJNE R1,#05H,N19 AJMP JUD2 N19:CJNE R2,#08H,N20 SETB P2.2 LJMP CLOSE1 N20:AJMP JUD1 K4:MOV 50H,#40H MOV 51H,#04H CJNE R1,#05H,N21 AJMP JUD2 N21:CJNE R2,#08H,N22 SETB P2.3 LJMP CLOSE1 N22:AJMP JUD1 K5:MOV 50H,#50H MOV 51H,#05H CJNE R1,#05H,N23 AJMP JUD2 N23:CJNE R2,#08H,N24 SETB P2.4 LJMP CLOSE1

21、 N24:AJMP JUD1 K6:MOV 50H,#60H MOV 51H,#06H CJNE R1,#05H,N25 AJMP JUD2 N25:CJNE R2,#08H,N26 SETB P2.5 LJMP CLOSE1 N26:AJMP JUD1 K7:MOV 50H,#70H MOV 51H,#07H CJNE R1,#05H,N27 AJMP JUD2 N27:CJNE R2,#08H,N28 SETB P2.6 LJMP CLOSE1 N28:AJMP JUD1 K8:MOV 50H,#80H MOV 51H,#08H CJNE R1,#05H,N29 AJMP JUD2 N29

22、:CJNE R2,#08H,N30 SETB P2.7 LJMP CLOSE1 N30:AJMP JUD1 K9:MOV 50H,#90H MOV 51H,#09H CJNE R1,#05H,N31 AJMP JUD2 N31:AJMP JUD1 K0:MOV 50H,#00H MOV 51H,#00H CJNE R1,#05H,N32 AJMP JUD2N32:AJMP JUD1;=4位密码位数判断= JUD1: INC 45H CLR CY MOV A,45H SUBB A,#01H JZ T11 CLR CY MOV A,45H SUBB A,#02H JZ T12 CLR CY MOV

23、 A,45H SUBB A,#03H JZ T13 CLR CY MOV A,45H SUBB A,#04H JZ T14;=四位密码存入单元= T11:CLR P3.3 CJNE R0,#00H,A11 MOV 43H,50H AJMP KEY A11:MOV 30H,50H AJMP KEYT12:CLR P3.2 CJNE R0,#00H,A12 MOV A,43H ORL A,51H MOV 43H,A AJMP KEY A12:MOV A,30H ORL A,51H MOV 30H,A AJMP KEY T13:CLR P3.1 CJNE R0,#00H,A13 MOV 44H,50

24、H AJMP KEY A13:MOV 31H,50H AJMP KEY T14:MOV 45H,#00H CLR P3.0 CJNE R0,#00H,A14 MOV A,44H ORL A,51H MOV 44H,A AJMP TEXT1 A14:MOV A,31H ORL A,51H MOV 31H,A AJMP TEXT2;=管理员密码校验= TEXT1:MOV A,41H CLR CY SUBB A,43H JZ RIGHT1 AJMP WRONG1RIGHT1:CLR CY MOV A,42H SUBB A,44H JZ RIGHT2WRONG1:SETB P3.4 CLR P3.5

25、LCALL D2 ORL P3,#0FH SETB P3.5 AJMP STARTRIGHT2:LCALL D2 MOV P1,#3FH LCALL D2 SETB P3.4 ORL P3,#0FH;=管理员功能选择= CHOOSE:CLR P0.6 JB P0.0,N33 LCALL D1 JB P0.0,N33 LCALL RING SETB P0.6 SETB P0.0 MOV R2,#08H AJMP KEY N33:SETB P0.6 CLR P0.7 JB P0.0,N34 LCALL D1 JB P0.0,N34 LCALL RING SETB P0.7 SETB P0.0 MO

26、V R1,#05H AJMP KEY N34:SETB P0.7 CLR P0.5 JB P0.0,N35 LCALL D1 JB P0.0,N35 LCALL RING SETB P0.5 SETB P0.0 MOV R0,#01H AJMP START N35:SETB P0.5 AJMP CHOOSE;=8位密码位数判断= JUD2: INC 45H CLR CY MOV A,45H SUBB A,#01H JZ T21 CLR CY MOV A,45H SUBB A,#02H JZ T22 CLR CY MOV A,45H SUBB A,#03H JZ T23 CLR CY MOV A

27、,45H SUBB A,#04H JZ T24 CLR CY MOV A,45H SUBB A,#05H JZ T25 CLR CY MOV A,45H SUBB A,#06H JZ T26 CLR CY MOV A,45H SUBB A,#07H JZ T27 CLR CY MOV A,45H SUBB A,#08H JZ T28;=新密码存入单元= T21:CLR P3.3 MOV 33H,50H AJMP KEY T22:CLR P3.2 MOV A,33H ORL A,51H MOV 33H,A AJMP KEY T23:CLR P3.1 MOV 34H,50H AJMP KEY T2

28、4:CLR P3.0 MOV A,34H ORL A,51H MOV 34H,A SETB P3.4 MOV P1,#3FH LCALL D2 ORL P3,#0FH CLR P3.4 AJMP KEY T25:CLR P3.3 MOV 35H,50H AJMP KEY T26:CLR P3.2 MOV A,35H ORL A,51H MOV 35H,A AJMP KEY T27:CLR P3.1 MOV 36H,50H AJMP KEY T28:CLR P3.0 MOV A,36H ORL A,51H MOV 36H,A SETB P3.4 MOV 45H,#00H AJMP TEXT3;=

29、修改新密码校验= TEXT3:MOV A,33H SUBB A,35H JZ RIGHT3 AJMP WRONG2RIGHT3:MOV A,34H CLR CY SUBB A,36H JZ RIGHT4WRONG2:CLR P3.5 LCALL D3 SETB P3.5 MOV R1,#00H AJMP CHOOSERIGHT4:MOV 41H,33H MOV 42H,34H SETB P3.4 MOV P1,#3FH LCALL D2 ORL P3,#0FH MOV R1,#00H AJMP CHOOSE;=存物程序= SAVE: MOV 52H,10H MOV A,52H ANL A,#0

30、F0H SWAP A LCALL CHAGE MOV 54H,A MOV A,52H ANL A,#0FH LCALL CHAGE MOV 55H,A MOV 53H,11H MOV A,53H ANL A,#0F0H SWAP A LCALL CHAGE MOV 56H,A MOV A,53H ANL A,#0FH LCALL CHAGE MOV 57H,A;=10H11H赋修正值=MOV A,54H SWAP A ORL A,55H MOV 62H,A MOV A,56H SWAP A ORL A,57H MOV 63H,A MOV 10H,62H MOV 11H,63H;=查询密码是否存

31、在=G4:MOV 12H,R0 MOV 13H,R1 MOV R0,#20H MOV R1,#08HG5:MOV A,10H SUBB A,R0 JZ G6 INC R0 INC R0 DJNZ R1,G5 MOV R0,12H MOV R1,13H AJMP G7G6:MOV A,10HRL A INC A MOV 10H,A SJMP SAVE;=判断密码是否都为0=G7:MOV A,54H CLR CY CJNEA,#00H,DISP MOV A,55H CLR CY CJNE A,#00H,DISP MOV A,56H CLR CY CJNE A,#00H,DISP MOV A,57H

32、 CLR CY CJNE A,#00H,DISP MOV 10H,#50H MOV 11H,#21H AJMP SAVE;=密码显示= DISPLAY:MOV R3,#150 DIS:MOV A,54H LCALL TABLE CLR P3.3 MOV P1,A LCALL D0 SETB P3.3 MOV A,55H LCALL TABLE CLR P3.2 MOV P1,A LCALL D0 SETB P3.2 MOV A,56H LCALL TABLE CLR P3.1 MOV P1,A LCALL D0 SETB P3.1 MOV A,57H LCALL TABLE CLR P3.0

33、MOV P1,A LCALL D0 SETB P3.0 DJNZ R3,DIS ;=寻找空箱= ORL P3,#0FH MOV A,40H JB ACC.0,NO_1 JB ACC.1,NO_2 JB ACC.2,NO_3 JB ACC.3,NO_4 JB ACC.4,NO_5 JB ACC.5,NO_6 JB ACC.6,NO_7 JB ACC.7,NO_8 NO_1:MOV 20H,62H MOV 21H,63H CLR P2.0 AJMP CLOSE2 NO_2:MOV 22H,62H MOV 23H,63H CLR P2.1 AJMP CLOSE2 NO_3:MOV 24H,62H M

34、OV 25H,63H CLR P2.2 AJMP CLOSE2 NO_4:MOV 26H,62H MOV 27H,63H CLR P2.3 AJMP CLOSE2 NO_5:MOV 28H,62H MOV 29H,63H CLR P2.4 AJMP CLOSE2 NO_6:MOV 2AH,62H MOV 2BH,63H CLR P2.5 AJMP CLOSE2 NO_7:MOV 2CH,62H MOV 2DH,63H CLR P2.6 AJMP CLOSE2 NO_8:MOV 2EH,62H MOV 2FH,63H CLR P2.7 AJMP CLOSE2;=开关箱1= CLOSE1:MOV

35、R4,#6 MOV 32H,40H CLOS1:LCALL D2 MOV 40H,P2 MOV P2,32H LCALL D2 MOV P2,40H DJNZ R4,CLOS1 LJMP CHOOSE;=开关箱2= CLOSE2:MOV R4,#6 MOV 32H,40H CLO2:LCALL D2 MOV 40H,P2 MOV P2,32H LCALL D2 MOV P2,40H DJNZ R4,CLO2 MOV A,40H CLR CY SUBB A,#00H JZ FULL LJMP START;=箱满提醒= FULL:SETB P0.7 SETB P0.1;=显示FULL= CLR P

36、3.3 MOV P1,#71H LCALL D0 SETB P3.3 CLR P3.2 MOV P1,#3EH LCALL D0 SETB P3.2 CLR P3.1 MOV P1,#38H LCALL D0 SETB P3.1 CLR P3.0 MOV P1,#38H LCALL D0 SETB P3.0;=查询“管”,“取”= CLR P0.5 JB P0.0,N36 LCALL D1 JB P0.0,N36 LCALL RING SETB P0.0 SETB P1.5 ORL P3,#0FH LJMP ADMIN N36:SETB P0.5 CLR P0.7 JB P0.1,FULL LCALL D1 JB P0.1,FULL LCALL RING SETB P0.1 SETB P0.7 ORL P3,#0FH LJMP TAKE;=取物程序= TAKE:MOV R0,#03H MOV R1,#03H MOV R2,#03H MOV P1,#40H CLR P3.4 LJMP KEY;=用户取物密码校验=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号