版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 报 告课程名称 嵌入式系统原理与设计 课题名称 智能电子密码锁的设计 专 业 班 级 学 号 姓 名 指导教师 乔汇东 胡瑛 2014 年 1 月 5 日目 录1. 系统总体设计11.1. 问题描述11.2. 功能要求11.3. 小组分工21.4. 设计思路21.4.1. 主要的设计实施过程21.4.2. 设计原理22. 硬件设计32.1. 蜂鸣器模块32.2. 矩阵键盘模块42.3. 继电器模块52.4. EEPROM模块62.5. LCD12864液晶模块73. 软件设计83.1. LCD12864液晶显示83.2. 24C02读写存储103.3. IIC协议123.4.
2、矩阵键盘133.5. 密码比较与报警144. 实验结果155. 调试过程166. 实验心得177. 附录191. 系统总体设计1.1. 问题描述 从矩阵键盘输入一组密码,单片机把该密码和设置密码比较,若输入的密码正确,则控制继电器动作;若输入的密码不正确,则要求重新输入,并记录错误次数,如果出现3次错误,则被强制锁定并报警。1.2. 功能要求(1) 设置初始密码 上电后,LCD上显示出开机画面: WRIT & READ -PASSWORD- 按C键,LCD上显示设置6位密码画面: WRIT CODE NUM:- 按E键退出写状态,再按D键,LCD上显示刚才设置的6位密码: READ C
3、ODE NUM:1 2 3 4 5 6(2) 输入密码 开机后,LCD显示开机画面: KEY LOCK MADE IN HNIE 按A建,2s以后,进入密码输入画面: PLEASE INPUT PASSWORD:-密码通过矩阵键盘输入,按每个密码键时都有声音提示,输入密码时,为了不被其他人看到真实的密码,LCD显示屏上只显示:“*” 若输入密码正确,继电器通电动作,LCD上显示密码正确的信息,蜂鸣器响1声,按E键,再次回到开机画面。 密码有3次输入机会,若输入3次后密码仍不正确,蜂鸣器响3声,LCD显示出错信息,不允许用户继续输入,此时按E键,可回到开机画面。(3)发挥部分:修改密码:在输入密
4、码正确的情况下,按B键,可进入密码修改界面: MODIFY PASSWORD PASSWORD:-密码修改成功后,按E键,退出密码修改界面,回到开机画面。1.3. 小组分工表1 任务分配情况皮 锋LCD12862显示模块以及整个智能电子密码锁的设计方案黄红波EEPOM程序存储器24C02的设计和报警电路模块尹斯苇矩阵键盘模块的设计肖 伟IIC通信协议模块1.4. 设计思路1.4.1. 主要的设计实施过程第一步,选用 MSP430F149单片机,以及选购其他电子元器件(电阻(100欧、1K欧、470欧等)、三极管、LCD12864液晶、矩阵键盘、杜邦线、焊接电路板一块)。第二步,使用P第三步,焊
5、接电ADS9.3软件设计硬件电路原理图,并设计 PCB图完成人工布线。第四步,单片机的 C 语言程序设计、仿真、调试。第五步,联合软、硬件调试电路板,完成本次设计。1.4.2. 设计原理利用MSP430单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。此次课程设计是学过的MSP430F149 单片机为核心,加上一些外围模块来实现电子锁应该具有的基本功能。单片机灵活的编程设计和丰富的IO 端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储、声光提示功能,为其功能的扩展提供便利。由于条件的限制此次实验只实现其基本功能,锁的开启关闭与锁定以继电器通断来
6、模拟,密码的输入用4X4 键盘替代,功能键用键盘上对应的10 以后的数字代替,这实现了在条件有所限制的情况下以有限的资源模拟电子锁的功能。输入密码用矩形键盘,包括数字键和功能键。LCD12864显示输入密码,用继电器代替开锁的电路,继电器打开表示开锁成功。输入密码错误次数超过3 次,系统蜂鸣器响,发出警报。打开电源后,LCD显示器显示WRIT & READ -PASSWORD-设原始密码为“123456”,只要输入此密码便了开门。这样可预防掉电后再来电时无密码可用。软件的设计主要包括键盘键值的读取,LCD12864 显示程序,密码存储程序和报警程序。MSP430F149电源输入矩阵片盘
7、控制LCD12864液晶显报警电路密码存储继电器电路图1 实验原理总框图2. 硬件设计此次项目中硬件部分的设计主要包含以下模块:蜂鸣器模块,矩阵键盘模块,继电器模块,EEPROM模块,LCD12864液晶模块。2.1. 蜂鸣器模块蜂鸣器驱动原理:由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动(但AVR可以驱动小功率蜂鸣器),所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。蜂鸣器驱动电路一般都包含以下几个部分:一个三极管、一个蜂鸣器、一个续流二极管和一个电源滤波电容。1蜂鸣器发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参
8、数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流/方波)等。这些都可以根据需要来选择。2续流二极管蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管提供续流。否则,在蜂鸣器两端会产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。3三极管三极管Q1起开关作用,其基极的高电平使三极管饱和导通,使蜂鸣器发声;而基极低电平则使三极管关闭,蜂鸣器停止发声。蜂鸣器驱动电路原理图如图2所示:图2 蜂鸣器驱动电路原理图2.2. 矩阵键盘模块在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线
9、和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。图3 矩阵键盘原理图2.3. 继电器模块继电器工作原理:线圈通电,动铁芯在电磁力作用下动作吸合,带动动触点动作,使常闭触点分开,常开触点闭合;线圈断电,动铁芯在弹簧的作用下带动动触点复位,继电器的工作原理是当某一输入量(如电压、电流、温度、速度、压力等)达到预定数值时,使它动作,以改变控制
10、电路的工作状态,从而实现既定的控制或保护的目的。在此过程中,继电器主要起了传递信号的作用 。由于单片机输出的电流过小,是无法直接驱动继电器的,所以必须设计驱动电路,图4为驱动电路的设计。图 4 继电器驱动电路下面对电路进行分析: IN4148作用:为了消除感生电动势的有害影响,在继电器线圈两端反向并联抑制二极管,以吸收该电动势。自感电压与电源电压之和对二极管来说却是正向偏压,使二极管导通形成环流。感应的高电压就会通过回路释放掉,保证了三极管的安全。 9014三极管:三极管的放大作用使得单片机的IO口可以驱动继电器的运作。经过计算分析,电路中选择9014型号的三极管,基极的电阻选用2.4. EE
11、PROM模块24C02主要通过IIC实现与单片机的连接,具体电路如下:图5 MSP430单片机与24C02的连接图由图可以看出,该电路比较简单。24C02的7个引脚(写保护WP引脚)接地,使该芯片始终处于可以进行读/写的状态。在实际的设计时,也可以将WP引脚与单片机的一个一般I/0口进行连接,通过单片机来控制24C02的写保护状态。即单片机在该引脚输出高电平时,24C02就处于写保护状态;单片机在改引脚处于低电平时,24C02就不处于写保护状态。在本电路中,为了简化设计,直接将WP引脚接地,表示该器件的地址为000。由于IIC是总线工作方式,该总线上可以挂有很多器件,所以总线上的每个器件都应该
12、有相应的地址,这样才能实现寻址操作。24C02的SCL和SDA引脚分别与单片机的P3.1和P3.0进行连接,连接方式是IIC总线方式。由于MSP430系列单片机中有些没有IIC接口,因此本系统在设计时采用MSP430F149单片机的一般I/O口分别作为IIC总线的SCL和SDA线。采用软件模拟IIC总线,从而实现与24C02进行接口。在设计时,需要将SCL和SDA分别通过一个10K欧的电阻将其拉高,以满足IIC工作的条件。2.5. LCD12864液晶模块带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示
13、模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符 集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4 行16×16 点 阵的汉字.。也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。LCD12864接口电路如下:图6 LCD12864接口电路图12864的基本特征:(1)低电源电压(VDD:+ 点(3)内置汉字字
14、库,提3.0-+5.5V)(2)显示分辨率:128×64供8192 个16×16 点阵汉字(简繁体可选)(4)内置128 个16×8 点阵字符(5)2MHZ 时钟频率(6)显示方式:STN、半透、正显(7)驱动方式:1/32DUTY,1/5BIAS(8)视角方向:6 点(9)背光方式:侧部高亮白色LED,功耗仅为普通LED 的1/51/10(10)通讯方式:串行、并口可选(11)内置DC-DC 转换电路,无需外加负压(12)无需片选信号,简化软件设计(13)工作温度: 0 - +55 ,存储温度: -20 - +603. 软件设计3.1. LCD12864液晶显示
15、12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS
16、2选择。显示点在64*64液晶屏上的位置由行号(line,063)与列号(column,063)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,07)和列地址(Yaddress,063)确定。每个存储单元存储8个液晶点的显示信息。 为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,
17、每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,07)和列地址(Yaddress,063)。例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对
18、于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 那么,得到了汉字的内码后,还仅是一组数字,在屏幕上的显示就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,一个汉字的二级单元是一个16*16的区域,因些128*64液晶可以显示4行8列共32个汉字(如图3)。而它的一个二级单元如图4(在无字库时,对汉字的取
19、模有横向跟纵向两种,要注意),对于并行含有子库芯片的显示,只要设定好这个二级单元的地址(如0X80+i,这样设定i的范围为031,这里注意第一行会直接跳到第三行;或者根据自己需要如第二行0X90+i,i范围为07;第三行0X88+i,i范围为07;),然后直接把汉字写入就 OK 了。12864液晶接口说明如表6-1所示:表2 12864液晶接口说明设计流程图如图7所示:、开始系统初始化端口初始化LCD初始化清屏在指定的位置显示写入的数字 图7 液晶显示模块软件设计流程图3.2. 24C02读写存储单片机与24C02采用I2 C的通信方式。在I2C总线开始信号后,送出的第一个字节数据是用来选择从
20、器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)确定。在I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位(ACK)。每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器
21、件可继续传送。 起始信号:在SCL保持为高电平期间,SDA从高电平翻转为低电平; 结束信号:在SCL保持为高电平期间,SDA从低电平翻转为高电平。图8 起始信号和结束信号时序图图9 写信号时序图图10 读信号时序如下图图11 应答信号时序图将检测到的信号地址与从24C02读出的内置地址码逐一进行比较,如果有相同,则把单片机33H的内容,即检测到信号的数据码送显示,不同则不显示。24C02读写流程图如图8所示:开始系统初始化向24C02一个地址写入数据延时向24C02中该地址读出写入的数据在LCD上显示读出的数据图12 存储器模块图3.3. IIC协议I2C总线是双线双向串行总线,该接口采用综合
22、协议,可确保数据的可靠发送和接收。时钟线SCL为主器件的输出、从器件的输入,数据线SDA可以是主器件和从器件的输入和输出。SDA和SCL都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压。当总线空闲时,这两条线路都是高电平。连接到总线的器件输出必须是漏极开路或集电极开路才能执行线与的功能。I2C总线上数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。在I2C接口协议中, 每个器件都有一个地址。当某个主器件要启动数据传输时,首先发送要与之进行通信的器件地址。所有的器件均会“监听",看是否是自己的地址。在该地
23、址中,bit0指定主器件是要自从器件读数据还是向从器件写数据。在数据传输期间,主器件和从器件始终处于相反的工作模式(发送器/接收器)。一次典型的I2C数据交换包括一个起始条件(START)、一个地址字节、一个或多个字节数据和一个停止(STOP)条件。每个地址字节和每个数据字节后面都跟随一个来自接收器的确认(ACKNOWLEDGE)位。地址字节包含一个7位的地址和一个方向位(R/W),方向位占据地址字节的最低位。方向位被设置为逻辑1时表示这是一个“读”(READ)操作,方向位为逻辑0表示这是一个“写”(WRITE)操作。所有的数据交换都由主器件启动,可以寻址一个或多个目标从器件。主器件产生一个起
24、始条件,然后发送地址和方向位。如果本次数据交换是一个从主器件到从器件的写操作,则主器件每发送一个数据字节后等待来自从器件的确认。如果是一个读操作,则由从器件发送数据并等待主器件的确认。在数据传输结束时,主器件产生一个停止条件,结束数据交换并释放总线。图13给出了一次典型的I2C数据传输格式。STARTSLAVE ADDR R/W ACKDATA1ACKDATAnNACKSTOP图13 I2C数据传输格式3.4. 矩阵键盘用单片机的并行P1口连接4×4矩阵键盘,并以单片机的P1.0P1.3口作键盘输入的列线,以单片机的P1.4P1.7口作为键盘输入的行线,然后用P0.0P0.6作输出线
25、,通过上拉电阻在显示器上显示不同的符号按键 “0F”。在硬件电路的基础上加上软件程序的控制来设计实现。其工作过程为:先判断是否有键按下,如没有键按下,则继续扫描整个程序,如有键按下,就识别是哪一个键按下,最后通过显示器把该键所对应的键的序号显示出来。首先CPU读入初始状态,CPU先让某一行线为低,其他行线为高,同时列线都为高,通过对按键进行扫描,也就是通过按键后判断列线是否为0来判断是否有键按下,有的话就继续执行程序识别判断是哪个键按下,然后通过P0口查询显示该数符,如果没有按键按下就返回程序继续扫描直到有键按下时才停止扫描。(1)CPU先使行线平P1.4线为低,其余行线P1.5-P1.7为高
26、,即P1.4所在的行线为“0”状态,其余行为“1状态。(2)CPU读入输入缓冲器的状态,以确定哪条列线为“0”状态,此时,若P1.0为“0”状态,则为0键按下;若P1.1为“0”状态,则为“1”键按下;以此类推。(3)若输入缓冲器的状态全部为“1”状态,则CPU继续使使行线P1.5为低,其余行线为高。再读入输入缓冲器的状态,以确定那条列线为“0”状态,从而判断是哪个键压下。(4)判断出哪个键压下之后,程序转入相应的键处理程序。流程图如图14所示:图14 矩阵键盘工作流程图定义用uchar getkey(void)函数得到从键盘输入的键值,然后调用LCD12864程序在液晶上显示。3.5. 密码
27、比较与报警本设计中,用P4.6口做蜂鸣器信号线控制蜂鸣器动作,用P5口控制继电器通断。代码如下:P4DIR |= BIT6;P5DIR=0xff;P5OUT=0;当蜂鸣器报警时,P4OUT=BIT6;当继电器打开时,P5OUT=0xff;流程图如图15所示:开始否正确?清楚显示累加错误次数是否>3?开锁是报警继电器打开图15 密码比较与报警流程图4. 实验结果图16 实验结果图1图17 实验结果图2由图片可知,达到了实验的基本要求。能进行密码的输入、修改和报警等功能。5. 调试过程单片机应用系统的调试,包括硬件调试和软件调试,是一个很重要的步骤。硬件调试和软件调试并不能完全分开,许多硬件
28、错误事在软件调试过程中被发现和纠正的,一般方法是先排除明显的硬件故障,在进行软硬件综合调试。在下载程序前,应进行软件调试,以免错误的程序下载到实验板上,烧坏控制芯片,因此软件调试是必不可少的。程序编译无误后,设置好仿真参数,就可以进行软件调试了。程序执行可采用两种方法,即单步执行和全速执行。总体调试最好采用前者方法,这样做有助于找到错误所在。子程序内部或着延时程序可以采用后者方法,这样有助于节省调试时间。调试过程中,要适当打开一些关键变量的窗口,观察它的变化情况,仔细分析,实验结果要与预期结果相比较,如果出现错误,反复分析与调试。设计完硬件后,完成软件的设计,把程序下载进单片机,就可以直接测试
29、。首先,正确的输入6位密码,锁开。在锁开的状态下按修改密码键,输入新的密码,按确定键确定。输入新密码,锁重新打开。连续输入错误的密码3 次,键盘锁定,蜂鸣器鸣叫报警。应反复测试,这样才能保证测试结果的正确性。由于小组在知识面和能力方面还有限,再加上条件的限制,智能电子密码锁的保安度等各项技术指标的提高、诸多功能的完善还需要进一步的研究和开发,此外在完成基本功能的基础上,还需要努力提高软件的效率、硬件系统的稳定性、进一步降低系统功耗等。6. 实验心得(1)组长的心得:作为小组长,在这次课程设计过程中,让我学到了许多东西,收益匪浅。课程设计是检验理论知识的掌握和应用能力最好的方法。它能迅速提高个人
30、的动手能力和实践能力,它能帮助我们对知识的掌握,促进知识体系的构建,因此,我好好地把握了这短短的两周时间,完成了课程设计的任务。课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 毕竟是第一次做单片机课设,我们组对于“智能电子密码锁的设计”这个课题可谓困难重重。对以前学过的单片机知识掌握理解不够透彻,对C语言掌握得不够灵活,但是通过组员之间的协作,
31、共同努力,以及查阅各种资料,最后还是把课设做了出来。理论与实践是有着一定的距离的,单片机是一门注重实践的学科,所以即使这理论学得好,实践能力不行也是枉然。所以在今后的学习当中,我们更应该重视理论与实践结合的重要性。电路和程序的设计过程就有如解决一个实际问题,我们要先学会分析问题,然后再去解决这一问题。在整个设计过程中我们懂得了许多东西,也培养了团队协作和设计的能力,树立了对知识应用的信心,促进了同学之间的友谊。(2) 肖伟的心得:这次课程设计,我们的组员一共4个人,组长选的题目是智能密码锁的设计,在设计的过程中遇到问题,可以说是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计
32、的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好等等。不过最后还是做出来了,当然,最主要的功劳还是在于组长,O(_)O哈哈。通过单片机实验我学习了单片机的原理及其应用,单片机实验是单片机理论知识和实践的结合,也是软件与硬件的相结合,通过实验使我们能够把书中的理论知识加以运用,以提高了我们的自己动手能力,只有理论和实践相结合我们才能提高综合知识能力,所以单片机实验对我们是非常有意义的,我们也必须给予足够的重视并认真的对待。在实验中编程能力的培养是非常关键的,然而我个人认为编程又是一件非
33、常枯燥,繁琐,耗时的事,我们不仅需要把程序编出来而且还需要成功的调试出来,因此编程又可以磨练我们的耐性,我们必须静下来耐住性子认真的去编去调试才有可能更早的成功。通过这次课设,让我明白了一点,无论做什么事情,最重要的还是态度,只要足够认真,足够坚强,足够毅力,足够决心,足够勇气,就一定能办到。(3) 黄红波的心得:在这次课设过程中,我学到了增加了很多知识,加深自己对课本知识的更好理解,也段练了个人的动手能力,同时也要求熟悉芯片个器件功能,知道要从芯片用户指南说明来写程序控制芯片。首先,根据我所要做的模块以及模块所需要的元件,查阅AT24C02芯片用户指南,从他的用户指南我知道怎么来存储数据和读
34、取数据,然后在根据我们课程设计要求来编写程序,控制数据的存储和读取,写出程序进行调试,在这过程中遇到了一些问题,通过查询资料和问同学老师来来解决问题,同时在以后遇到问题时,知道分析和解决问题,使我所学得到了全面的理论综合和实践应用。通过这次课程设计,我认识到理论与实际相结合的重要性,只有理论知识是远远不够的,把所学的理论知识与实际相结合起来,从理论中得出结论,才能真正提高自己的独立思考的能力。在课设实践,让我认识到团队合作的重要性,体会到了团队精神。在分析问题时分析要全面,处理要严谨。这次课程设计也让我感受到思维的乐趣,让我体验到动手的快乐。(4)尹斯苇的心得:电子密码锁自问世以来,就融入了社
35、会的各个角落,发挥着巨大的作用,作为人们日常生活中经常会用到的简易方便但却非常实用的电子设备,键盘输入方式是密码锁最为普遍的一个外部输入方式,随着科技的发展,许许多多的高科技解锁方式如指纹,语音,面部识别,甚至虹膜识别出现并逐步应用到各种密码锁中,但是作为最经典的键盘输入方式还是以其简便耐用且能适应众多恶劣使用条件的特点,占据输入方式的主体地位,而在等本次任务中,我负责的便是矩阵键盘模块的设计工作,是本次项目中相对简单的一个模块,主要功能就是在整个电子密码锁中实现外部输入的功能,若是输入键较少,独立式键盘设计相对简单,但是一旦键盘按键较多,矩阵键盘的优势便凸显出来,矩阵键盘是从软件设计的角度来
36、弥补硬件方面的不足,在一些大型仪器上可能有几十甚至上百个键,这种时候用矩阵键盘方式设计程序则可以节省很多硬件资源,矩阵键盘主要是采用行列式扫描方式,通过类似给每个键确定坐标的方式,并对每一行每一列进行扫描,以确定每个键的键值,通过此次设计,我懂得了键盘的几种基本工作方式,以及各种工作方式各自的长短处与适用的情形,其实在很多电子设备中都要用到键盘输入,键盘的种类看似五花八门,其实原理大多相通。要能举一反三,融会贯通,这才是学习一个东西的目的。在这里我十分感谢老师和组长的帮助,我之前对矩阵键盘也是一知半解,很多地方的问题看书还是不太懂,多亏组长的耐心讲解,以及老师的指导,我不但熟练的掌握了键盘的原
37、理,还通过实践验证了所学,这种感觉非常好,通过这次设计,自己真正学到了不少东西,这应该也是老师给我们安排这次项目设计所希望达到的目标,在以后的类似实验中,我也要保持这种热情,培养自己的对这方面的兴趣,并最大限度的应用自己的学习能力和创造能力,成为一名合格有用的大学生。7. 附录程序源代码:c12864.h#ifndef _C12864_H_#define _C12864_H_void lcddelay(unsigned int n);void lcdbusy();void lcdstart(); void lcdwrite_adrr(unsigned char adrr); void lcdw
38、ritecmd(unsigned char cmd);void lcdwritedata(unsigned char tem);void lcdwritehnzu(unsigned char x,unsigned char y,unsigned char*s);void lcdwriteshu(unsigned char x,unsigned char y,unsigned char z,unsigned char*s);void lcdpic(unsigned char *pic); #endifc12864.c#include<msp430x14x.h>#include&quo
39、t;c12864.h"#define uchar unsigned char#define uint unsigned int#define rs_1 P6OUT|=BIT3/写指令#define rs_0 P6OUT&=BIT3#define rw_1 P6OUT|=BIT4/#define rw_0 P6OUT&=BIT4#define en_1 P6OUT|=BIT5/#define en_0 P6OUT&=BIT5#define cs_1 P6OUT|=BIT6/#define cs_0 P6OUT&=BIT6#define data_in P
40、2DIR=0X00/#define data_out P2DIR=0XFF#define data P2OUT#define bus P2IN/uchar addr_tab=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,;void lcddelay(uint t) uint i; while(t-) for(i=0;i<
41、;125;i+); void lcdbusy() uchar i=125; while(i-); void lcdstart() cs_1; lcddelay(50); lcdwritecmd(0x30);/功能设定 lcddelay(1); lcdwritecmd(0x30);/功能设定 lcddelay(1); lcdwritecmd(0x0c);/从内部RAM读取数据 lcddelay(1); lcdwritecmd(0x01);/清楚显示 lcddelay(20); void lcdwrite_adrr(uchar adrr) lcdwritecmd(adrr); void lcdwr
42、itecmd(uchar cmd) rs_0; rw_0; en_1; lcdbusy(); data=cmd; en_0;void lcdwritedata(uchar tem) rs_1; rw_0; en_1; lcdbusy(); data=tem; en_0;void lcdwritehnzu(uchar x,uchar y,uchar*s) lcdwritecmd(addr_tab8*x+y); while(*s>0) lcdwritedata(*s); s+; void lcdwriteshu(uchar x,uchar y,uchar z,uchar*s) uchar i
43、; lcdwritecmd(addr_tab8*x+y); for(i=0;i<z;i+) lcdwritedata(*s); s+; void lcdpic(uchar *pic) uchar x,y,i; for(i=0;i<9;i=i+8) for(y=0;y<32;y+) for(x=0;x<8;x+) lcdwritecmd(0x36); lcdwritecmd(0x80+y); lcdwritecmd(0x80+x+i); lcdwritedata(*pic+); lcdwritedata(*pic+); lcdwritecmd(0x30); _NOP()
44、; eeprom.h#ifndef _EEPROM_H_#define _EEPROM_H_unsigned char Write_1Byte(unsigned char wdata,unsigned char dataaddress);unsigned char Write_NByte(unsigned char * outbuf,unsigned char n,unsigned char dataaddress);unsigned char Read_1Byte_currentaddress(void);unsigned char Read_NByte_currentaddress(uns
45、igned char * readbuf,unsigned char n);unsigned char Read_1Byte_Randomaddress(unsigned char dataaddress);unsigned char Read_NByte_Randomaddress(unsigned char * readbuf,unsigned char n,unsigned char dataaddress);#endifeeprom.c#include "I2C.h"typedef unsigned char uchar;/节省空间typedef unsigned
46、int uint;#define deviceaddress 0xa0 /AT24C02的设备地址/宏定义void delay_10ms(void)uint i = 1000;while(i-);uchar Write_1Byte(uchar wdata,uchar dataaddress)/dataaddress-数据的写入地址 /Wdata-写入的数据start();write1byte(deviceaddress);if(check() write1byte(dataaddress);else return 0;if(check() write1byte(wdata);else retu
47、rn 0;if(check() stop();else return 0; delay_10ms(); /等待EEPROM完成内部写入return 1; uchar Write_NByte(uchar * outbuf,uchar n,uchar dataaddress)uchar flag; /标记 start();write1byte(deviceaddress); /写入器件地址if(check() = 1) write1byte(dataaddress); /写入数据字地址else return 0;if(check() flag=writeNbyte(outbuf,n);/outbu
48、f-指向写入数据存放首地址的指针else return 0; delay_10ms(); /等待EEPROM完成内部写入if(flag) return 1;else return 0;uchar Read_1Byte_currentaddress(void)uchar temp; start();write1byte(deviceaddress|0x01);if(check() temp = read1byte();else return 0;mnack();stop();return temp;uchar Read_NByte_currentaddress(uchar * readbuf,u
49、char n) start();write1byte(deviceaddress|0x01);/|按位或if(check() readNbyte(readbuf,n);/readbuf-指向保存数据地址的指针else return 0; return 1;uchar Read_1Byte_Randomaddress(uchar dataaddress)uchar temp; start();write1byte(deviceaddress);if(check() write1byte(dataaddress);else return 0;if(check() start();write1byt
50、e(deviceaddress|0x01);else return 0;if(check() temp = read1byte();else return 0;mnack();stop();return temp;uchar Read_NByte_Randomaddress(uchar * readbuf,uchar n,uchar dataaddress)start();write1byte(deviceaddress);if(check() write1byte(dataaddress);else return 0;if(check() start(); write1byte(deviceaddress|0x01);else return 0;if(check() readNbyte(readbuf,n);else return 0;return 1;i2c.h#ifndef _I2C_H_#define _I2C_H_void delay(void);void start(void);void stop(void);void mack(void);void mnack(void);unsigned char check(void);void write1(void);void write0(void);void write1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环保行业环境监察员专业知识考核试题及答案
- 沟通信号行为分析-洞察与解读
- 2025年环境保护监测员岗位知识检测题库及答案
- 2025年组织在线试题及答案
- 2025年环境法律法规考试试卷及答案
- 2025年注册计量师(一级)计量专业实务案例分析模拟试卷及答案测量不确定度
- 区块链支付合规技术-洞察与解读
- stemi护理试题题目及答案
- ards护理常规题目及答案
- 芜湖市人民医院针灸器械消毒管理考核
- 汽车衡过磅管理制度
- 三年(2022-2024)中考化学真题分类汇编(全国)专题05 自然界的水(原卷版)
- 中陆集团兰州中凯工贸有限责任公司招聘笔试题库2025
- 智慧树知到《创新工程实践》(北京大学)章节测试答案
- 冰心散文《超人》
- 《新时代群众工作方法及其应用》课件
- 公司两班倒管理制度
- 2025年3月29日全国事业单位联考D类《综合应用能力》综应真题及答案(小学)
- 医院印章使用管理制度
- 新疆地区历年中考语文古诗欣赏试题汇编(2003-2024)
- 2024高职单招考试(语文)试题(附答案)人人文库
评论
0/150
提交评论