基于PIC 16F628A的安全电子锁微控制器
基于PIC 16F628A的安全电子锁微控制器
Kerbala Iraq大学计算机系讲师 Muhanad Hayder Mohammed muhanad.hayder@uokerbala.edu.iq
摘要:论文:提出的系统实现了电子嵌入式锁比传统锁拥有的一个很好的优势,它只使用一个手动键。如果传统的情况下,钥匙丢失或被盗之后任何人都可以打开锁使用钥匙。另一方面,丢失一个比较长而且复杂的密码或把它偷来的难度比传统的钥匙要难的多。此外,两者的结合,手动键和电脑密码使系统更安全。更长的密码将减少密码丢失和锁被破坏的可能性。这个系统由键盘和HD44780 20x2和PIC16f628a单片机。固件控制系统与键盘交互非常容易和顺利。液晶为用户提供消息和通知有关当前系统的状态。用户可以执行一些操作,如打开和关闭锁,在单片机EEPROM中改变当前的密码,当输入密码错误时清除单个数字。论文提出系统的固件开发使用汇编语言和MPLAB开发环境。只在实际硬件级别测试,实现与系统的正常运行,这是完全错误的
关键词:电子锁、嵌入式系统、PIC单片机。
Ⅰ 介绍
今天,在我们生活的周围充满嵌入式系统设备,如汽车、洗衣机微波炉、医疗设备等。
嵌入式系统是一个计算机系统,为特定的控制功能而设计,通常受实时计算约束。嵌入式系统作为一个完整的设备通常包括硬件和机械零件。相比之下,一台通用计算机,例如个人电脑(PC),设计灵活能满足各种终端用户的需要。今天,嵌入式系统被用来控制许多常用的设备[1]。
嵌入式系统的一个突出的例子是微控制器,它是一个小型和微型计算机,指定执行一些特定的任务。单片机程序(固件),决定什么功能单片机提供给所需求的用户。一个程序,可以在单片机上运行,而不需要一个被称为固件的操作系统。这意味着,一个固件直接访问硬件的特权。本文试图详细解释电子锁固件。单片机的基本思想是在一个简单的电路中收集所有的输入和输出,外围设备,代表了只需要单片机而不是大型和复杂的计算机微处理器和大量的外设[1]。
单片机固件直接处理外围设备和输入/输出端口以实现其完整功能。
1
基于PIC 16F628A的安全电子锁微控制器
Ⅱ 微处理器和微控制器 微处理器与微控制器在许多方面不同。第一和最重要的方面是它的架构。为了一个微处理器功能的正常运行,其他组件,如内存、外设和输入输出端口必须连接到它。简而言之,我们可以说,一个微处理器是计算机的核心,它的工作原理与其他外围设备/部件的计算机系统。另一方面,一个微控制器被设计成由作为一个单元可以独立执行。不需要其他外部组件的应用程序,因为所有必要的外围设备和端口已经内置。最终,它节省了所需的时间和空间构造设备[2]。 Ⅲ 系统实现 该系统是使用汇编语言实现。使用这种语言的目的是为了实现更好地功能,对PIC体系结构的理解。使用汇编语言的另一个积极的方面是,它给了非常广泛和灵活的方式与微控制器进行交互,尽管它的实现比BASIC或C语言困难,其也用作语言编程微控制器。系统实现的主要有两部分: A. 键盘实现 系统使用的PORTB键盘通过4针为列,其余4针行保留实现。因此,系统使用这些8针构成16键矩阵,PIC16F628A中提供一个有效的使用有限的端口。下面是表格(1)PORTB针作业键盘。 表1:PORTB针作业键盘 RB0(行0) RB1(行1) RB2(行2) RB3(行3) RB4(列0) 1 4 7 * RB5(列1) 2 5 8 0 RB6(列2) 3 6 9 # RB7(列3) A=空格 B=锁定 C=修改 D=输入 实现键盘功能时有一个必须采取的重要的预防措施,因为键盘处理依赖于一个机械过程(按下和释放键)。这一现象生成一个火花,影响销的电气性能,同时按下和释放键,导致销状态不稳定,不能正确识别是否为0或1。所以,为了克服这个问题,必须提供足够的时间延迟销的状态是稳定的,才可以正确读取,这一时间可能是20ms或更多。 1. 键盘的扫描 2
基于PIC 16F628A的安全电子锁微控制器
键盘的设计是受电现象,即,如果我们短路两针,一个零,另一个高电压,那么销电压将下降到零。这个事实可以用于设计键盘。
如前所述,PORTB被预留给键盘和最重要的4位用于列索引,它们设置为输入端口(输入端口,我们必须设置TRISB寄存器高[3])来检查
他们是否有电压降至0时按下键后附有选中的行。
另一方面,最重要的4位PORTB将输出,和用于行索引。因为他们是输出端口,可以设置为高(1)或低(0)的固件。通过设置为每个键扫描每一行到零,系统可以检查每一列,以查看是否有任何其中一个设置为0。如果是这样的话,这就意味着,一个关键的排压。这个过程是对所有行重复检查所有的钥匙。负责扫描的功能键是row_scan和col_scan。
1.1 行扫描
这个函数设置为零,每一行调用col_scan函数来检查任何列针电压降为零。然后增量的关键变量作业是索引每一行。
1.2 列扫描
这个函数扫描每一列销,检查如果任何其中一个设置为零,那么调用find_key函数,发现键值把指数构造使用变量键和硬编码的值从工作寄存器w调出col_scan函数。图(1)显示键盘连接到结构PIC 16 f628a单片机和液晶。
图1 单片机与键盘连接
B. LCD的实现
3
基于PIC 16F628A的安全电子锁微控制器
另一个系统实现的主要部分是液晶实现。LCD配置有4位接口模式,因为PIC16F628A端口限制。发送命令0 x20,然后0 x28将配置液晶在4位两行接口工作模式[4],这意味着20 x2液晶使用的系统最大可以显示40个字符。
send_word函数功能的实现是在4位液晶接口模式发送一个词。执行以下步骤send_word函数发送一个词的4位接口模式[4]:
1 设置E线低。
2 为发送数据,设置RS行高,或为发送一个命令设置为低。 3 设置E线高。
4 设置最重要的四个比特为DB4到DB7。 5 设置E线低。 6 设置E线高。
7 设置四个最低有效位为DB4到DB7。
8 设置E线低,E线应该是比较低的,直到时钟在另一个字节。
Ⅳ 操作系统
当系统启动时,它直接进入到主循环。在其整个操作时间中,只有两个部分之间的互换。第一部分不断扫描输入键,其他部分PORTB处于睡眠状态,因为PORTB配置将使系统在节电模式。这节省了电池和提高了系统的操作性能,由于单片机不需要执行连续不断的的指令,即使没有人与系统交互。
系统从睡眠醒来的状态,按任何键,改变PORTB的状态。PIC 16 f628a用了PORTB产权所有PROTB针[3]。
当系统处于锁定状态,用户试图打开锁,用户必须输入十个数字,必须符合存储在eepm十位数。下图提示用户输入密码:
4
基于PIC 16F628A的安全电子锁微控制器
图2 消息提示用户输入密码
然后用户输入限制在10位数的密码,可以结合特殊字符?*?和?#?使密码更复杂。 下面是图显示用户输入的密码系统(液晶数字显示为?*?但是在这里向读者清晰显示)。
图3 用户输入密码打开锁
输入密码后,用户需要按Enter按钮。然后verify_password会调用这个函数以验证如果输入密码是类似于一个存储在eepm。如果两个密码是相同的,那么锁将打开和消息在LCD上显示“验证成功”。
下面的步骤verify_password函数,将比较两个数组,如果他们有相同的值。直接访问内存用于比较[2]。
1 初始化计算值10。
2 使FSR指向第一个数组的起始地址。
3 存储位置,FSR的值指向的变量名data1(第一个数组)。 4 增量FSR并在save1变量中保存它的值。 5 测试如果函数在循环的第一步。
6 如果是FSR上指向第二个数组的起始地址,转到步骤8。 7 如果没有,将变量save2的值赋予FSR。
8 存储位置,FSR的值指向的变量名data2(第二个数组)。 9 增量FSR并在save2中保存它的值。 10 把save1的值放在FSR。 11 如果data1等于data2然后: 递减计数。
计数等于零转到步骤13。
5