基于DSP密码锁的课程设计_第1页
基于DSP密码锁的课程设计_第2页
基于DSP密码锁的课程设计_第3页
基于DSP密码锁的课程设计_第4页
基于DSP密码锁的课程设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 DSP原理与应用课程大作业题 目: 基于TM320LF240X的掉电不丢失密码锁设计 院系名称: 电气工程 专业班级: 自动化1002 学生姓名: 秦凯新 学 号: 201046820427 指导教师: 张世杰 设计题目基于TM320LF240X的掉电不丢失密码锁设计设计内容和要求密码锁的功能键设计:S1-S10表示:数字键0-9S11-更改密码S12-更改密码完毕后确认S13-重试密码、重新设定S14-关闭密码锁初始密码:000000 密码位数:6位程序功能: 本程序结合了24C02存储器的存储功能,可以掉电保存密码。 1、开锁: 下载程序后,直接按六次S7(即代表数字1),锁被打开,输入

2、密码时, 六位数码管依次显示小横杠。 2、更改密码: 首先按下更改密码键S11,然后设置相应密码,此时六位数码管会显示设置密码对应 的数字。最后设置完六位后,按下S12确认密码更改,此后新密码即生效。 3、重试密码: 当输入密码时,密码输错后按下键S13,可重新输入六位密码。 当设置密码时,设置中途想更改密码,也可按下此键重新设置。 4、关闭密码锁: 按下S14即可将打开的密码锁关闭。报告主要章节一TM320LF240X内部资源二 IIC模块介绍三 程序流程图四 系统总原理图五 密码锁程序源码六 附录(参考文献)一TM320LF240X内部资源1.1TM320LF240X简介数字信号处理(Di

3、gital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。德州仪器、Freescale等半导体厂商在这一领域拥有很强的实力。 DSP (digital signal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或

4、l的数字信号。再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。1.2TM320LF240X资源介绍 2407开发板分为TI 2000-011 DSP2407增强型、DSP2407+CPLD开发板、SHX-DSP2407A开发板。引DSP2407+CPLD开发板套件是一套基TMS320LF2407A+EPM240的DSP+CPLD的学习开发平台,充分发挥DSP2407

5、和ALTERA MAX II的灵活性和功能强大,用户手册详实易懂,大量源码轻松上手(分DSP和CPLD两部分),我们为用户提供一个完整的IP核通过CPLD进行系统资源分配,用户可以根据需要进行裁剪或追加功能。由于我们的外设都是通过CPLD连接与DSP连接进行电平转换、隔离和总线。仲裁等先进技术,所以使用极为方便灵活、简洁、并且运行及其稳定。这种结构可以充分利用了CPLD的灵活性和功能强大的IP核进行功能更强的系统应用。是初学者和从事开发的科研工作者学习2407和CPLD的首选之品。 本开发板供初学者学习使用,也可作为系统板嵌入到用户的产品供用户进行二次开发以便缩短产品开发周期。SHX-DSP2

6、407A开发板是DSP 2407系列产品中的重要一员。它的最大优点是直观简单明了,极为适于初学者。此棋板采用统一的系统结构、模块结构和机械结构,以多种典型DSP处理器构成的DSP基本系统、标准总线和相同物理尺寸的DSP嵌入式控制模板,将2407的功能发挥的淋漓尽致,为学习者提供了强大、有效的学习平台。用户手册详实易懂,大量源码轻松上手(分DSP和CPLD两部分),我们为用户提供一个完整的IP核通过CPLD进行系统资源分配,用户可以根据需要进行裁剪或追加功能。1.3TM320LF240X引脚介绍TMS320LF2407系列有多达41个通用、双向的数字I/O(GPIO)引脚,其中大多数是基本功能和

7、一般I/O复用引脚,TMS320LF2407系列的大多数都可以用来实现其他功能。数字I/O端口模块采用了一种灵活的方法,以控制专用I/O和复用I/O引脚的功能,所有I/O和复用引脚的功能可以通过9个16位控制寄存器来设置,这些寄存器可以分为两类:I/O口复用控制寄存器(MCRx):用来控制选择I/O引脚作为基本功能或一般I/O引脚功能。数据和方向控制寄存器(PxDATDIR):当I/O引脚作为一般I/O引脚功能时,用数据和方向控制寄存器可控制数据和I/O引脚的数据方向,这些寄存器直接和I/O引脚相连。给出了TMS320LF2407系列I/O端口复用引脚配置简图,从图上可以看出一些寄存器单元的配

8、置对应于实际I/O引脚的内部结构之间的联系。1.4 I/0控制寄存器介绍 数字数字I/O模块控制寄存器地址地址存储寄存器说明7090hMCRAI/O复用控制寄存器A7092hMCRBI/O复用控制寄存器B7094hMCRCI/O复用控制寄存器C7098hPADATDIRI/O端口A数据和方向寄存器709AhPBDATDIRI/O端口B数据和方向寄存器709ChPCDATDIRI/O端口C数据和方向寄存器709EhPDDATAIRI/O端口D数据和方向寄存器7095hPEDATAIRI/O端口E数据和方向寄存器7096hPEDATDIRI/O端口F数据和方向寄存器下面介绍I/O口复用输出控制寄存

9、器。下面描述了I/O口复用控制寄存器A(MCRA)I/O口复用控制寄存器B(MCRB),I/O口复用控制寄存器C(MCRC),其中表2是I/O口复用控制寄存器A(MCRA)的配置,对寄存器的每个位的值做了详细的描述;表3是I/O口复用控制寄存器B(MCRB)的配置,对寄存器的每个位的值做了详细的描述。表4是I/O口复用控制寄存器C(MCRC)的配置,对寄存器的每个位的值做了详细的描述。I/O口复用控制寄存器A(MCRA)地址7090h注:R=可读,W=可写,_0=复位后的值I/O口复用控制寄存器A(MCRA)的配置I/O口复用控制寄存器B(MCRB地址7092h)注:R=可读,W=可写,_0=

10、复位后的值I/O口复用控制寄存器B(MCRB)的配置二IIC模块介绍2.0 24C02的图示 图2.0 2.1 24C02的读写操作I2C(Inter Integrated Circuit)总线是一种由Philips公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设 备开发。由于其简单性,如今方泛用于微控制器与各种功能模块的连接,可以说是学单片机的人,入门之后,必定要涉及到的。I2C 总线实际上已经成为一个国际标准在超过100 种不同的IC 上实现,而且得到超过50 家公司的许可,正因为其简单和应用广泛,因此其功能也越来不满足人们的要求,其速

11、度也从原来的100Kbit/S,增加了快速模式,其速度达 400Kbit/S,再后来也增加了高速模式,其速度更达3.4Mbit/S。二.功能和特点I2C 总线是一种用于IC器件之间连接的双向二线制总线,所谓总线它上面可以挂多少器件,并且通个两根线连接,占用空间非常的小,总线的长度可高达25英尺,并 且能够以10Kbps的最大传输速率支持4个组件。它的另一优点是多主控,只要能够进行接收和发送的设备都可以成为主控制器,当然多个主控不能同一时间 工作。I2C总线有两根信号线,一根为SDA(数据线),一根为SCL(时钟线)。任何时候时钟信号都是由主控器件产生。I2C总线在传送数据的过程中,主要有三种控

12、制信号:起始信号,结不信号,应答信号起始信号:当SCL为高电平时,SDA由高电平转为低电平时,开始传送数据结束信号:当SCL为高电平时,SDA由低电平转为高电平时,结束数据传送应答信号:接收数据的器件在接收到8bit数据后,向发送数据的器件发出低电平信号,表示已收到数据。这个信号可以是主控器件发出,也可以是从动器件发出。总之由接收数据的器件发出。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。下面我们以ATMEL公司的AT24C02来介绍I2C的基本操作AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8bit存储空间,具有工作电压宽(

13、2.55.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。他在系统中始终为从动器件。对AT24C02的操作主要有:字节读,字节写,页面读,页面写首先发送起始信号,如下图,起始信号后必须是控制字,控制字格式如下,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,也就是三个地址位,最后一位为读写控制位,当为1(Input)时为读操作,为0(Output)时为写操作。控制字后就是相应的操作,读或写,一定不要结束,因为这个操作还没有完成,如果结束就等于放弃操作。先 来看写操作,写操作分为字节写和页面写两种操作,对于页面写根

14、据芯片的一次装载的字节不同有所不同,AT24C02为8字节,每写一个字节后,地址自动加 1。关于页面写的地址、应答和数据传送的时序参见图3,字节写可以看成是只有一个字节的页面写,也就是写一个数据后停止。注意:写一次需要一定时间,一般 为10ms,要等侍这个操作完成。时序如下图:说明:对于AT24C02,在控制字后还必须写入地址,这个地址是以后读写的起始地址。读 操作有三种基本操作:当前地址读、随机读和顺序读。三种操作方法类似,只是读的数据个数不同,可连续读8个字节,图4给出的是顺序读的时序图,图中共读了 四个数据,需要注意的是当前的地址,如果不是想要的,可以用写操作,重新写入地址。非常重要的是

15、,每读一个数据后,必须置低SDA,作为应答,否则,只能 读一个数据,后面的数据,因为收到不应答信号,AT24C02就会认为出错,停止操作。特别提醒的是,当SCL为低电平时,数据是可变的,因些只有SCL 为高电平时,才能读数。三 程序流程图 图3.1 程序流程图程序执行时,首先进行键盘扫描,判断是否开锁,程序执行流程如上图所示:1、开锁: 下载程序后,直接按六次S7(即代表数字1),8位LED亮,锁被打开,输入密码时, 六位数码管依次显示小横杠。 2、更改密码: 首先按下更改密码键S11,然后设置相应密码,此时六位数码管会显示设置密码对应 的数字。最后设置完六位后,按下S12确认密码更改,此后新

16、密码即生效。 3、重试密码: 当输入密码时,密码输错后按下键S13,可重新输入六位密码。 当设置密码时,设置中途想更改密码,也可按下此键重新设置。 4、关闭密码锁: 按下S14即可将打开的密码锁关闭。四 系统原理图 图4.1 系统原理图 系统原理图包含了显示模块,矩阵键盘模块 ,以及24C02密码值存储模块,其分模块就不再粘贴出来,因为都是上述模块的分解.另外关于键盘就是矩阵键盘,包含了0-9的键值,另外还有特殊功能键如下: S11:更改键 S12:确认键 S13:重试键 S14:关闭键正是通过上述的特殊功能键来实现特殊的操作。从而实现密码识别,键盘扫描,数密码,密码验证,和更改密码操作的。

17、五 密码锁程序源码#include "register"#include<ioports.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuchar old1,old2,old3,old4,old5,old6; /原始密码000000uchar new1,new2,new3,new4,new5,new6; /每次MCU采集到的密码输入uchar a=16,b=16,c=16,d=16,e=16,f=16; /送入数码管显示的变量uchar wei,ke

18、y,temp;char allow,genggai,ok,wanbi,retry,close; /各个状态位#define LEDData PBDATDIR;#define LEDcs PFDATDIR;unsigned char code table=0xFF3f,0xFF06,0xFF5b,0xFF4f,0xFF66,0xFF6d,0xFF7d,0xFF07,0xFF7f,0xFF6f,0xFF77,0xFF7c,0xFF39,0xFF5e,0xFF79,0xFF71,0xFF00,0xFF40;/24C02读写驱动程序/void delay1(unsigned int m)unsigne

19、d int n; for(n=0;n<m;n+);void init() MCRA=MCRA&OXFFFB; MCRB=MCRB&0XFEFF; MCRC=MCRC&OXFFFE; PADATDIR=PADATDIR|0x0400; PADATDIR=PADATDIR|0X0100; PBDATDIR=PBDATDIR|0XFFFF; PFDATDIR=PFDATDIR|0XFFFF; asm(“setc INTM”); asm(“setc SXM”); asm(“clrc OVM”); asm(“clrc CNF”); WDCR=0X0E8;SCSR1=0X81

20、FE; IMR=0X0000;IFR=0X0FFFF; /从24c02的地址address中读取一个字节数据/Void Start() PADATDIR= PADATDIR&0XFFFB;PEDATDIR =PEDATDIR|0X0100;PEDATDIR =PEDATDIR|0X0001; PADATDIR= PADATDIR&0X0004; delay(30); PEDATDIR =PEDATDIR|0Xfffe; delay(30);PEDATDIR =PEDATDIR|0xfffb;delay(30); PEDATDIR =PEDATDIR|0X0001;void St

21、op() PADATDIR= PADATDIR&0XFFFB;PEDATDIR =PEDATDIR|0X0100;PEDATDIR =PEDATDIR|0Xfffe; PADATDIR= PADATDIR&0X0004; delay(30); PEDATDIR =PEDATDIR|0X0001; delay(30);PEDATDIR =PEDATDIR|0xfffb;delay(30); PEDATDIR =PEDATDIR|0Xfffb;Void I2CSendByte(int data)int flag,sz,k;for(flag=0x0080;flag!=0x00;fla

22、g=flag/2) PADATDIR= PADATDIR&0XFFFB;for(k=0x06;k>=0;k-)k=k;sz=data&flag; PEDATDIR =PEDATDIR|0xfffb;else PEDATDIR =PEDATDIR|0x0001; PADATDIR= PADATDIR&0X0004;for(k=0x06;k>=0;k-)k=k; PADATDIR= PADATDIR&0Xfffb; Void I2CRecByte(int data)int flag,sz,k;PEDATDIR =PEDATDIR|0xFEFF PADAT

23、DIR= PADATDIR&0XFFFB;for(flag=0x0080;flag!=0x00;flag=flag/2) PADATDIR= PADATDIR&0X0004;sz= PADATDIR &flag; if(sz=flag) k=k|flag; PADATDIR= PADATDIR&0Xfffb; return k;unsigned char read24c02(unsigned char address) unsigned char i;Start();I2CSendByte(0xa0);I2CSendByte(address); Start();

24、 writebyte(0xa1); i=readbyte(); Stop(); delay(10); return(i);/向24c02的address地址中写入一字节数据info/void write24c02(unsigned char address,unsigned char dat) Start(); I2CSendByte (0xa0);I2CSendByte (address);I2CSendByte (dat); Stop(); delay(30);/*密码锁程序模块*/void delay(unsigned char i)uchar j,k; for(j=i;j>0;j

25、-) for(k=125;k>0;k-);void LED_display(uchar cs,uchar num) LEDcs=cs;LEDData=LED_Tablenum; void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f) PBDATDIR=0XFFFF; PBDATDIR=0XFFFF; LED_display(0x0eff,a); delay1(5); LED_display(0x0dff,b); delay1(5); LED_display(0x0bff,c); delay1(5); LED_displa

26、y(0x07ff,d); delay1(5);void keyscan() PEDATDIR=0X0FFF;/高四位为输入,低四位为输出; PEDATDIR=0xfeFF;/高四位上拉输入 temp= PEDATDIR; temp=temp&0x00f0; if(temp!=0xf0) delay(10); if(temp!=0x00f0) temp=P3; switch(temp) case 0x00ee: key=0; wei+; break; case 0x00de: key=1; wei+; break; case 0x00be: key=2; wei+; break; cas

27、e 0x007e: key=3; wei+; break; while(temp!=0x00f0) temp=PEDATDIR; temp=temp&0xf0; PEDATDIR=0xfdFF; temp=PEDATDIR; temp=temp&0x00f0; if(temp!=0x00f0) delay(10); if(temp!=0x00f0) temp=PTEDFF; switch(temp) case 0x00ed: key=4; wei+; break; case 0x00dd: key=5; wei+; break; case 0x00bd: key=6; wei+

28、; break; case 0x007d: key=7; wei+; break; while(temp!=0x00f0) temp= PEDATDIR; temp=temp&0x00f0; PEDATDIR =0xfbFF; temp= PEDATDIR; temp=temp&0x00f0; if(temp!=0x00f0) delay(10); if(temp!=0xf0) temp= PEDATDIR; switch(temp) case 0x00eb: key=8; wei+; break; case 0x00db: key=9; wei+; break; case 0

29、x00bb: genggai=1; wei=0; break; case 0x007b: if(allow) ok=1; break; while(temp!=0x00f0) temp= PEDATDIR; temp=temp&0x00f0; PEDATDIR=0xf7FF; temp= PEDATDIR; temp=temp&0x00f0; if(temp!=0x00f0) delay(10); if(temp!=0x00f0) temp=PEDATDIR; switch(temp) case 0x00e7: retry=1; break; case 0x00d7: clos

30、e=1; break; while(temp!=0x00f0) temp= PEDATDIR; temp=temp&0x00f0; beep=0; void shumima()/对按键采集来的数据进行分配if(!wanbi)switch(wei)case 1:new1=key; if(!allow)a=17; else a=key;break;case 2:new2=key;if(a=17) b=17;else b=key;break;case 3:new3=key; if(a=17) c=17;else c=key;break;case 4:new4=key;if(a=17) d=1

31、7;else d=key;break;case 5:new5=key; if(a=17) e=17;else e=key;break;case 6:new6=key; if(a=17) f=17;else f=key;wanbi=1;break;void yanzheng() /验证密码是否正确if(wanbi) /只有当六位密码均输入完毕后方进行验证if(new1=old1)&(new2=old2)&(new3=old3)&(new4=old4)&(new5=old5)&(new6=old6)allow=1;/当输入的密码正确,会得到allowe置一void main() init(); old1=read24c02(110); old2=read24c02(111);old3=read24c02(112);old4=read24c02(113);old5=read24c02(114);old6=read24c02(115);while(1)keyscan();shumima();yanzheng();if(allow) /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论