您好,欢迎访问三七文档
超市存物箱模拟装置-1-超市存物箱模拟装置作者:汤伟单位:南京信息职业技术学院一、设计的任务与要求利用单片机制作超市存物箱模拟装置,模拟的内容包括:用户存物,用户取物,满箱提示,管理员取物,管理员修改密码,存物时用户密码通过数码管输出,存物箱状态指示灯,自动开关箱,有效按键提示音,密码输入提示,密码正确提示,密码错误提示。二、硬件电路设计及原理图1、存物箱模拟装置的面板设计:图(1)面板设计超市存物箱模拟装置-2-2、电路原理图如下:图(2)超市存物箱模拟装置原理图如图(2)所示:P0.0~P0.7用于接4×4矩阵键盘;P1口作为四位数码管的数据端口,P3.0~P3.3分别作为四位数码管的位选;P2.0~P2.7作为存物箱是否存物的状态指示;P3.4接绿色的LED,提示“请输入密码”;P3.5接红色的LED,提示“密码错误”;P3.6接蜂鸣器作为按键提示音的输出。该模拟装置的输入量均来自4×4矩阵键盘,由程序对相应管脚进行查询并处理,运行结果通过其它管脚以不同的方式输出给用户。程序处理过程以下将详细介绍。超市存物箱模拟装置-3-三、存物箱程序流程图及实施细则1、主程序(START):40H单元的8个二进制位对应8个存物箱的存物状态,若某位为0,则说明此位对应的存物箱已存物,反之则为空箱。当40H的8个二进制位都为1(即40H的内容为FF)时,此时8个存物箱都为空箱,程序跳过查询“取”键,按此键无提示音。10H、11H两个单元为四位随机密码产生单元,10H每经过1次查询后内容增1,11H在当10H的第5位为1时内容增1,这样是为超市存物箱模拟装置-4-了增加密码产生的随机性。若没有按键请求,则两个单元记满重新再记,不断循环计数,直至查询到按键请求计数才停止。2、管理员程序(ADMIN):将立即数00H放入R0中作为管理员使用存物箱的确定,因为本装置的程序多处用到“键盘查询”(KEY)程序,如:管理员密码的输入,用户密码的输入,管理员密码的修改。“键盘查询”为公用的程序段,设有不同的条件转移,(R0)=#00H就是作为管理员密码输入的功能条件。P1口为四位数码管的数据输入口,#40H就是01000000,其中的1对应的是八段码的g段。当输入密码的第一位后,CLRP3.3,超市存物箱模拟装置-5-控制四位数码管最高位显示的位选(2号管脚)从P3.3得到一低电平信号(数码管为共阴),最高位显示“-”;输入密码的第二位后,同理,CLRP3.2,四位数码管的前两位显示“--”,四位输入完毕,即显示“----”。CLRP3.4将P3.4管脚清0,绿色的LED点亮,提示“请输入密码”。接下来就可以通过键盘查询(KEY)来输入管理员密码了。键盘查询程序开始之前P0口全为高电平,然后先将P0.4管脚清零,依次查询P0.3,P0.2,P0.1(此行P0.0没有接按键),是否也为低电平,没有的话将P0.4置为高电平,接下来再将P0.5管脚清零,同样依次查询P0.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,这样便知道输入的数应该放到第一位(最高位),作为管理员密码输入的第一位数。再次有按键被按下,程序跳至位数判断时,45H内容再增1,45H内容为#02H,输入的数应该放到第二位,这样重复直至增到4,确定输入数为四位密码的最后一位,此后超市存物箱模拟装置-6-45H清0,由于功能条件(R0)=#00H为管理员密码输入,程序将跳转到四位数字密码输入位数判断,将输入的四位数密码整合到43H和44H两个单元(若(R0)≠#00H,可判断输入的密码为用户取物密码,则输入的四位数密码整合到30H和31H两个单元,进行用户密码校验)。43H和44H分别与41H和42H进行比较,41H和42H存放的是真正管理员密码,若四个单元对应的内容不相同,则点亮红色的D2提示“密码错误”并返回主程序。若四个单元对应的内容相同,说明管理员密码输入正确,数码管持续0.5S显示“0000”,表示密码正确。确定管理员身份后,程序执行到管理员的功能选择(CHOOSE),进行“取物”、“修改管理员密码”和“退出管理”的选择。1)如有用户忘记密码,管理员可按下“取物”键,此时管理员取物功能条件为(R2)=#08H,依然通过公用的“键盘查询”程序段。管理员只要输入箱号,对应的箱子就会打开。与其他情况下的“键盘查询”不同的是在查过“8”之后,有个判断转移条件“CJNER2,#03H,G3”,意思是:R2内容为#03H时将继续查询“9”号键,若R2内容不为#03H,则跳至G3(G3绕过了“9”号键和“0”号键的查询),显然R2内容为#08H而非#03H。因为没有“9”号和“0”号存物箱,所以在管理员取物的情况下要跳过“9”号键和“0”号键的查询。管理员按下1至8号键中的某个后,相应的存物箱将打开,完成之后关此存物箱并跳回管理员的功能选择(CHOOSE)。2)按下“管理员修改密码”(简称“改密”)键后,功能条件为超市存物箱模拟装置-7-(R1)=#05H,此时通过“键盘查询”输入两次相同的4位的新密码,由功能条件的判断,将第一次输入的四位密码存入33H、34H单元,第二次输入的四位密码存入35H、36H单元。33H和35H比较,34H和36H比较,若对应单元的内容均相同,则将新密码存在41H和42H单元,这将作为管理员的新密码。若对应单元的内容有不同的,提示“密码错误”并返回管理员的功能选择(CHOOSE)。3)管理员按此键即退出管理,跳回主程序(START)。3、存物程序(SAVE):超市存物箱模拟装置-8-程序由START跳转到SAVE时,10H和11H两个单元停止计数,将两个单元拆分成四位数,每位数用四个二进制位表示,拆分时只将大于9的数进行修正,修正值为初始值与十进制数10的差值,即将A修正为0,B修正为1,……F修正为5,小于或等与9的数经修正程序后不发生变化。10H单元的高四位和低四位数修正后分别存放在54H和55H低四位中,11H单元的高四位和低四位数修正后分别存放在56H和57H低四位中。然后再将修正结果重新拼合在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,通过A的值进行查表,将表中可让8段数码显示数字的8位二进制代码通过P1口传送给数码管,同时结合数码管位选信号的控制将四位密码输出给用户,动态显示时间持续3秒左右即停止。用户获取密码后,程序将对8个存物箱的存物状态依次进行查询,8个状态是通过P2口储存在40H单元中的,查询是从40H单元8个二进制位的最低位开始,查到第一个为“1”的二进制位时,即确定超市存物箱模拟装置-9-与该二进制位对应的箱子为此次存物箱。通过开关箱程序使该箱的指示灯闪烁,提示箱子已开,关箱后此箱的指示灯保持点亮状态,本制作中关箱不做重点设计,自动完成。关箱后查询是否还有空箱,若没有空箱,即40H单元的8个二进制位均为0,此时跳转至“满箱提醒”;若有空箱,则返回“主程序”。“满箱提醒”时,只查询“管理员”和“取”这两个按键,没有按键按下数码管始终显示“FULL”,有则跳转处理。8个存物箱对应的密码存放单元有8组,每组两个单元,如下表:箱号密码存放单元箱号密码存放单元120H、21H528H、29H222H、23H62AH、2BH324H、25H72CH、2DH426H、27H82EH、2FH*说明:为更方便程序查询,选了连续地址单元20H—2FH4、取物程序(TAKE):超市存物箱模拟装置-10-进入取物程序(TAKE)后,键盘查询后功能条件打乱,如:(R0)=#00H为管理员功能条件;(R1)=#05H为管理员修改密码功能条件;(R2)=#08H为管理员取物功能条件。在TAKE程序的开始将他们重新赋值,这样在公用的“键盘查询”后便可判断出此次查询的目的是用户取物,键盘输入四位数字,由功能条件的判断,将输入的四位数密码整合到30H和31H两个单元中与8个存物箱对应的8组密码存放单元依次比较。当30H、31H单元与所有组对应的两个单元内容不同时,提示密码错误,然后自动返回主程序;当30H、31H单元与某一组的两个单元内容相同时,即确定该用户的存物箱的号码,接着转至开关箱程序,将用户存物的箱子打开。最后关上该箱,跳回主程序。四、超市存物箱模拟装置汇编语言程序ORG0000HMAIN:MOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHMOV41H,#88HMOV42H,#88HMOV40H,P2MOV45H,#00H;=======主程序=======START:CLRP0.5JBP0.0,N1LCALLD1JBP0.0,N1LCALLRINGSETBP0.0SETBP0.5AJMPADMINN1:SETBP0.5CLRP0.7JBP0.3,N2LCALLD1JBP0.3,N2LCALLRINGSETBP0.3SETBP0.7LJMPSAVEN2:MOV60H,AMOVA,40HCJNEA,#0FFH,G1MOVA,60HSJMPN3G1:MOVA,60HJBP0.1,N3LCALLD1JBP0.1,N3LCALLRINGSETBP0.1SETBP0.7LJMPTAKEN3:SETBP0.7INC10HMOVA,10HJNBACC.5,G2INC11HG2:SJMPSTART;======管理员程序=====ADMIN:MOVR0,#00HMOVP1,#40HCLRP3.4;======键盘查询======KEY:CLRP0.4JBP0.3,N4LCALLD1JBP0.3,N4LCALLRINGSETBP0.3SETBP0.4AJMPK1N4:JBP0.2,N5LCALLD1JBP0.2,N5LCALLRINGSETBP0.2SETBP0.4AJMPK2超市存物箱模拟装置-11-N5:JBP0.1,N6LCALLD1JBP0.1,N6LCALLRINGSETBP0.1SETBP0.4AJMPK3N6:SETBP0.4CLRP0.5JBP0.3,N7LCALLD1JBP0.3,N7LCALLRINGSETBP0.3SETBP0.5AJMPK4N7:JBP0.2,N8LCALLD1JBP0.2,N8LCALLRINGSETBP0.2SETBP0.5AJMPK5N8:JBP0.1,N9LCALLD1JBP0.1,N9LCALLRINGSETBP0.1SETBP0.5AJMPK6N9:JBP0.0,N10LCALLD1JBP0.0,N10LCALLRINGSETBP0.0SETBP0.5AJMPSTARTN10:SETBP0.5CLRP0.6JBP0.3,N11LCALLD1JBP0.3,N11LCALLRINGSETBP0.3SETBP0.6AJMPK7N11:JBP0.2,N12LCA
本文标题:超市存物箱模拟装置
链接地址:https://www.777doc.com/doc-1409656 .html