自设密码型电子寄存柜控制设计说明书Word下载.docx
《自设密码型电子寄存柜控制设计说明书Word下载.docx》由会员分享,可在线阅读,更多相关《自设密码型电子寄存柜控制设计说明书Word下载.docx(29页珍藏版)》请在冰点文库上搜索。
五、局部程序设计说明·
5.1XH子程序·
5.2DISP子程序·
11
5.3KEY子程序·
12
5.4IT1P子模块·
5.5按键提示音子程序·
14
5.6BJ子程序·
15
5.7开门驱动指示子程序·
5.8长时间无操作返回子程序·
16
5.9用户模式下放弃操作子程序·
18
5.10用户管理员模式切换子模块·
5.11存物子程序·
5.12取物子程序·
20
5.13空箱指示子程序·
21
5.14管理员密码鉴识子程序·
5.15管理员操控子程序·
5.16管理员调时子程序·
六、系统功能与操作说明·
22
七、课程设计总结·
附录
附录1:
微处理器内部存储单元分配及数据说明·
23
附录2:
系统程序
一、设计任务与目标
1.1设计课题:
自设密码型电子寄存柜控制程序设计
1.2设计目标
运用所学理论与实验知识,在提供的单板机上开发、设计、调试自设密码型电子寄存柜,通过本次课程设计以达到熟练运用课程基本知识,掌握对出现的实际问题进行分析与通过软、硬件综合调试解决问题的方法与手段,进而使自身编程的逻辑关系设定、处理与动手调试能力得到巩固和提高,为今后从事工程开发技术工作打下基础。
1.3设计任务
现今超市等外设有顾客存储柜的场合,大多用的是钥匙(硬币投放式)、条形码(打印纸式)等自助寄存柜或在火车站附近需要寄存大件的地方采用人工寄存,本次我们设计的自设密码型电子寄存柜,以微控制器为核心,外部设简洁,操作界面简单易懂,用户使用方便,管理员操控便利,同时相比较常见型存储柜,它灵活性高,可靠性也相对较高,用户不用害怕丢失钥匙或条形码而只需记住存物时所输入的相应箱号和密码即可完成物品存储过程,如若在忘记了所设密码只需找到管理员,在管理员操控模式下可以强开指定箱号门,帮助顾客取出寄存物品,管理员在帮助顾客取出寄存物品后输入相应功能代码可清空箱子的占用信息,使箱子可以投入使用。
针对实际运用中可能会出现的问题,本次设计的自设密码型电子寄存柜具有用户使用界面下的存物时选箱号、自设密码、系统对密码的记存,所选箱号已被占用或输入密码位数不对而触发的提示功能,取物时输箱号密码、对密码的核对及所选箱号未存储输入密码不对从而触发的提示功能,在管理员操控界面下可实现对对应箱号的强制开门、清占用信息、封箱以及对所有箱子强制开门、清占用信息、封箱的功能,还可调校系统显示时钟,考虑到每个操作者,使用户操作界面适合任意年龄段的人群,同时使管理员操控方便。
1.4基本设计要求
1、八位LED七段数码管显示时钟、箱号密码输入界面、及其他界面信息。
2、4x4键盘设置“0”-“9”数字键及“存”、“取”、“退格”、“确定”、“重输”等功能键,回应短促的按键音以提供良好的操作手感。
3、基本显示模式为按照24小时制动态显示时、分、秒实时时钟信息。
4、以8门寄存柜为设计对象,箱号为01~08,每个小箱上装有一只LED指示灯当本箱以被占用时点亮,每个小箱的电动开门电磁铁线圈通电1秒使得箱门在弹簧的作用下自动打开。
5、存物:
用户按“存”键—输入两位选用空箱的箱号—输入六位自设密码—按“确定”键—自动开箱门—放物—手动关箱门。
密码对应位只显示“-”,若所选箱号非空箱或密码不足六位则告警提示,操作过程可“退格”、“重输”。
6、取物:
用户按“取”键—输入两位所用—输入六位原设密码—按“确定”键—自动开箱门—取物—手动关箱门。
密码对应位只显示“-”,若所选箱号为空箱或箱号密码不吻合则告警提示,操作过程可“退格”“重输”。
7、使用管理员钥匙打开寄存柜中控门,将主控单元上的“管理员操作/用户操作”选择开关拨到“管理员操作”位置,而后输入八位管理员密码则进入管理员操控模式,之后可通过输入箱号及功能代码,可强行打开指定箱门,检查内部的物品;
可清除指定箱格的存物信息记忆;
可封闭指定箱格,其占用LED点亮;
寄存柜另还设置有停电时管理员应急人工开门装置。
8、非基本显示模式下无操作时间超过30秒后自动恢复为基本的显示时钟状态。
1.5功能扩展提示(选做)
1、开机进行接口部件及数码显示器、指示灯、讯响器等自检。
2、取物操作出现同一箱号的密码三次不符合情况则封箱。
3、在管理员操控模式下可设定时钟,设定参数的过程可用闪烁方式指示当前修改位。
4、在管理员操控模式下可执行“清箱”操作,自动逐一打开各箱门,同时清除所有存物信息记忆。
5、在基本显示模式下每隔一定的时间,穿插显示环境温度信息,设选用的温度传感器把0°
~+128°
C变松为0V~+5V电压信号。
6、其他功能扩展。
1.6设计环节及进程安排
1、布置课题,明确任务、总体方案设计1天
2、基本功能控制程序设计及调试3天
3、程序综合联调及功能完善、改进、扩展3天
4、答辩及编写设计说明书3天
二、总体方案设计与方案论证
对本次设计的自设密码型寄存柜所需的各项功能进行分析,我们可采用整体式的编程方法对总控制程序进行编程,使用这种方法需要很强的逻辑性,思维慎密,在编程前需做好整体构思,难度较大;
另一种采用模块化的思想对各项功能分为各个针对性的子模块设计编程,使各个模块独立编程逐个添加逐个调试,最后结合完成总功能。
经过论证及老师的指导,采用模块化编程思想,同时借鉴plc顺序控制思想加入“进程码”这一概念完成控制程序的编写。
将各个功能独立出来独立编写,初期只编写独立的逻辑关系,之后完成该部分功能调试后在预留的逻辑关系上关联上其他子模块,方便调试,如:
初期首先编写添加取物子模块在完成取物键按下后可执行的各项操作调试完成后,在编写添加存物子模块,在再两个子模块间同过预留或再添加的逻辑量建立逻辑关联。
模块化编程必须使子模块程序处理完所需处理的信息后马上返回主流程,即“不滞留”,最后通过各个具有独立逻辑功能又相互逻辑关联的子模块的循回扫描调用,实现系统所需各项功能。
“进程码”扩展开来说叫做工作进程状态代码,其担当引导所有模块工作的角色,使各模块协调完成整体功能,引入“进程码”的概念后,在调试阶段可根据“进程码”判断系统工作到何种阶段,应该对应产生何种现象,发生什么情况,下一步的需要执行的操作是什么,从而帮助减小系统的调试难度,同时使系统设计跟规范化、合理化、逻辑化,如:
设定基本时钟显示进程码为00H,取物阶段进程码为20H,管理员操控模式进程码为40H,各阶段都有与其相对应的进程码。
基于以上叙述本次设计采用模块化的编程思想完成对控制系统的编程。
三、总体软件设计说明及总流程图
3.1系统总体结构
3.2总体软件设计说明
1、运用单片机内部定时器设计精确实时钟;
2、运用可位寻址单元各位状态作为子模块间逻辑关联量;
3、共计用94个数据存储单元作为时钟显示、数字量输入存储、密码存储、密码比较过渡、延时计数等功能单元;
4、主流程共循环调用具有各自功能又逻辑关联的15个子模块程序。
3.3针对目标任务对各项内容的大致实施方法
1、利用51单片机内部时钟振荡产生的时钟信号,用定时器1选用方式2定时工作模式产生精确定时时间以此来产生精确时钟信号存储在相应单元,再送至显示缓冲子模块处理完送至显示更新子模块输出显示在八位数码管显示实时钟。
2、采用线反转法扫描到4x4键盘行列码,根据预先设置好的键码表查得所按下何键,键码表按国际通用键盘分布排列。
3、对拨码开关进行扫描存储至一个可位寻址单元内,该单元对应位对应8个拨码开关的状态,再拿出一个可位寻址单元存放拨码开关的前状态,根据拨码开关的前态与新态判断拨码开关是一直处于用户模式还是一直处于管理员模式,亦或者刚从管理员模式拨至用户模式,或从用户模式拨至管理员模式,分别将其标记为02、03、00、01。
3、取出24个单元用来存储用户密码,每三个单元对应存储一个箱子的经压缩后的密码,设定当这些单元内存#0AAH为箱子未被使用,#0FFH表被封箱,而不为这两个量时为箱子被使用,即内存放密码如:
123456。
4、运用可位寻址单元使其八个位对应八个箱子的开门驱动电磁铁,其位为“1”则表示该对应门开门驱动电磁铁得电。
5、进行存物操作时,按下“存”键改变进程码,后可输入箱号密码共计8位输入的数字量经过显示缓存在显示更新子模块中输出显示在8为数码管上,当进程码处于相应数字时可按下“确定”键,该键按下后对对应的密码存储单元进行是否空箱封箱判断,为可用箱时才将六位密码压缩存入三个密码存储单元,将开门驱动单元对应位置“1”。
6、进行取物操作时,按下“取”键改变进程码,后同存物模块输入箱号密码,按下“确定”键后对对应的箱子密码存放单元进行判断,看是否空箱或封箱,为非空箱则将六位输入密码压缩与密码存储单元存储的密码进行比较,密码吻合则将开门驱动单元对应位置“1”。
7、用一个可位寻址单元的8个位对应八个箱子的的占用灯信息,根据判断每个箱子对应密码存储单元的首单元的内存内容,对相对应的位置“0”表占用,置“1”表空箱或封箱。
8、子程序全部循回调用一轮所用的时间约为“10ms”(显示更新约8ms,其余共计约2ms),通过统计子程序调用次数来实现大约时间的计算,如在无操作回复显示时钟子程序中设定计子程序调用3000次即约30秒无操作后返回显示时钟,按键提示音和报警子程序也用同一原理。
9、在判断到有按键按下时对以可位寻址单元中一位置“1”,标志有键按下,在运用对子程序调用次数以计时的原理,实现当有键按下时回馈短暂的按键音以提供良好的操作手感。
10、在需要报警的程序部分,对9中选用的可位寻址单元的另一位进行置“1”,让蜂鸣器响,同理对子程序调用次数进行计数,当约200次后关掉蜂鸣器,以此来回馈较按键提示音长的报警音。
3.4系统总流程图
四、系统资源分配及数据定义说明
4.1微处理器外部硬件设备分配
AT89C51引脚:
1~8接8盏led
9接复位按钮
12接蜂鸣器
15接系统时钟12分频内部脉冲
16接8255(U3、U5)的5引脚
17接8255(U3、U5)的36引脚
18、19接11.0592MHZ晶振电路
20接地
21接8255(U3、U5)的6引脚
30接74HC373(U2)11引脚
31接vcc
32~39接74HC373(U2)D0~D8引脚、接8255(U3、U5)D0~D8引脚
40接vcc
74HC373引脚:
D0~D8接AT89C51的32~39引脚
LE接AT89C51的30引脚
OE接地
Q0接8255(U3、U5)的9引脚
Q1接8255(U3、U5)的8引脚
8255(U3):
D0~D7接AT89C51的32~39引脚
RD接AT89C51的17引脚
WR接AT89C51的16引脚
A0接74HC373的2引脚
A1接74HC373的5引脚
CS接AT89C51的21引脚
PA0~PA7接8个7段数码管译码电路输入段码
PB0~PB7接8个7段数码管接地端
PC0~PC7接4x4键盘
8255(U5):
CS接AT89C51的22引脚
PA0~PA7接8个LED灯
PC0~PC7接8个拨码开关
8255(U3)方式控制字:
89H-A、B口输出驱动字段、字位,C口输入
控制口:
FEFFH
A口:
FEFCH
B口:
FEFDH
C口:
FEFEH
8255(U5)方式控制字:
8BH-A口输出驱动8个led灯,C口输入
FDFFH
FDFCH
FDFDH
FDFEH
4.2微处理器内部存储单元分配及数据定义说明
(见附录1)
五、局部程序设计说明
5.1XH子程序
基本流程图:
基本原理:
如若进程码在00H,将时间单元经拆字送显缓单元,经显示更新子程序在8位数码管上显示实时钟,时分秒间显示“-”;
若进程码不在00H,则将数字量输入送显缓单元,经显示更新子程序在8位数码管上显示相应的数字量。
5.2DISP子程序
基本流程图:
基本原理:
将显缓单元地址的数据经查表得字段码输出显示至相应的数码管(由字位码控制输出至哪一位)。
显示字段码表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
显示字段码表。
"
0"
~"
9"
DB0FFH,83H,0C6H,0A1H,86H,8EH,0BFH,00H;
全灭"
F"
"
-"
全亮"
5.3KEY子程序
采用线反转法扫描得到键盘行列码,根据事先编好的键码表(按国际键盘分布排列)对应行列码查表得到键号,之后根据键号做相应操作(结合其他子模块),功能键则处理相应功能,数字键则相应存储、输出数字量。
键码表KEY_N:
DB7DH,0BEH,0BDH,0BBH;
7,8,9,“退格”键码
DB0DEH,0DDH,0DBH,0EEH;
4,5,6,“取消”键码
DB0EDH,0EBH,0E7H,0D7H;
1,2,3,“返回”/“调时”
DB7EH,0B7H,7BH,77H;
“存”,0,“取”,“确定”键码
键盘分布:
5.4IT1P子模块(精确时钟)
利用51单片机内部时钟振荡产生的时钟信号,用定时器1选用方式2定时工作模式每定时计数256次对38H单元加1,38H单元计数36次即晶振频率为11.0592MHZ的微控制器9126个机器周期=10ms,满10ms则10ms计数单元39H加1,不满10ms则返回;
39H=100时即为1s,则10ms计数单元清0、秒计数单元3AH加1,不满1s则返回;
3AH=60时即为1min,则秒计数单元清0、分计数单元3BH加1,不满1min则返回;
3BH=60时即为1hour,则分计数单元清0、小时计数单元3CH加1,不满1hour则返回;
3CH=24时即为小时完成一个循环,则小时计数单元清0返回,不满24小时也返回;
5.5按键提示音子程序
利用子程序完成一次循回调用所用时间约为10ms,判断有键按下时则置一2BH单元的第7位为1这也是当键释放后进入本子程序继续对计数单元计数的条件(SY2:
JNB2BH.7,SY0),计数满后则关掉蜂鸣器,将2BH单元的第7位置0,则无键按下且2BH单元的第7位不为1时子程序一调用立即返回。
由此即可产生短促的按键音,但是当键一直处于压下状态,则蜂鸣器一直会响。
5.6BJ子程序
在需要报警的程序位置会将2BH单元的第6位置“1”,这时BJ子模块被调用时,即进入该子程序开蜂鸣器,对1FH进行自加1,当蜂鸣器响约2s后,关掉蜂鸣器,将2BH单元第6位清“0”,BJ子程序再次被调用时一进即出。
5.7开门驱动指示子程序
基本流程图
基本原理:
开门指示灯存储单元内存非零,则说明有门被开,此时对计数单元计数100次即电磁铁得电约1s,门弹出,后将开门指示灯单元赋值#00H,即使电磁铁失电,开门结束。
5.8长时间无操作返回子程序
当进程码不在基本显示时钟模式和管理员操控模式下判断为无键按下时对计数单元开始自加计数,约30s无任何键按下即返回基本显示时钟模式。
5.9用户模式下放弃操作子程序
在用户模式下(27H=#02H),当判定有“放弃”键按下,这将进程码改为#00H即放弃当前操作返回基本显示模式(20H=#00H)。
5.10用户管理员模式切换子模块
若拨码从管理员模式拨到用户模式标记00送入27H,从用户模式拨到管理员模式标记01送入27H,一直处于用户模式标记02送入27H,一直处于管理员模式标记03送入27H。
程序示例:
5.11存物子程序
在基本显示模式且处与用户模式下(20H=#00H、27H=#02H),按下“存”键,进入存物阶段(20H=#10H~#18H),
后可依次输入箱号密码,随着箱号密码的输入进程码也改变,如:
,退格键原理相同
;
按取消键时,则删除所有箱号密码同时进程码回到10H状态,
按确定键时进程码应处于18H状态,如若进程码未等于18H则说明箱号密码输入不足八位,则应该产生报警信号;
以及当输入箱号已被占用时也应该产生报警信号,
,由算法(箱号-1)*3+40h=对应的密码存放地址,编写相应程序取得箱号密码存放地址,通过对其内存放内容为何值判断该箱子是处于封箱、非空箱或是空箱,当为空箱是才将输入量缓存单元的密码经压缩后放入密码存放单元;
将22H单元与#01H相与则可将22H单元的0位置“1”,根据箱号将#01H左移相应位,再和22H单元相与,即可由此达到开对应箱门,程序如下
5.12取物子程序
可参考存物子程序,不同之处在于进程码为20~28,确定键按下后判断是否为空箱,不空则将输入的密码压缩与原存储的密码进行比较,吻合则开箱门,不吻合则报警。
在基本显示模式且处与用户模式下(20H=#00H、27H=#02H),按下“取”键,进入存物阶段(20H=#20H~#28H),后可依次输入箱号密码,随着箱号密码的输入进程码也改变,如:
,按确定键时进程码应处于28H状态,如若进程码未等于28H则说明箱号密码输入不足八位,则应该产生报警信号;
以及当输入箱号对应的密码存放单元判断得该箱为有密码存放则判定该箱为非空箱,则将输入的密码经压缩后与以存放在密码存放单元的密码进行对比,若吻合则开相应箱门,不吻合则回到20进程等待重新输入并产生报警信号。
5.13空箱指示子程序
24个密码存放单元分为8组分别存放8个箱的密码,通过判断每组首单元的存放内容,即可判断该箱是为何状态,如内存放#0AAH则说明该箱为空箱,如存放#0FFH则说明该箱为封箱,如存放密码(如#56H)则说明该箱被占用,得出哪一箱为该点亮占用信息灯(非空箱或封箱),再利用同开门驱动指示模块中置相应位开门状态的原理将相对应的23H位置“0”即将对应箱表示被占用或封箱。
主要程序代码如下:
R0初值为#40H,相应的位#43H、#4