基于TMS320F2812高可靠性密码锁设计.docx
《基于TMS320F2812高可靠性密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于TMS320F2812高可靠性密码锁设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于TMS320F2812高可靠性密码锁设计
密码锁实验
一、目的
1.掌握液晶的使用方法;
2.掌握液晶信号之间时序的正确识别和引入
3.掌握键盘信号的输入,DSPI/O口的使用;
4.掌握键盘信号之间时序的正确识别和引入。
5.熟悉对TMS320F2812的编程调试。
二、设备
1.一台装有CCS2000软件的计算机;
2.插上2812主控板的DSP实验箱;
3.DSP硬件仿真器。
三、原理
1.12864液晶显示器:
本实验箱采用的液晶接口在DSP的数据总线上,由于DSP是十六位总线,液晶是八位总线,所以DSP的高八位总线悬空。
液晶的结构框图如下,
2.4*4矩阵按键:
实验箱上提供一个4x4的行列式键盘。
2812的8个I/O口与之相连,这里按键的识别方法是扫描法。
键被按下时,与此键相连的行线电平将由与此键相连的列线电平决定,而行线的电平在无按键按下时处于高电平状态。
让所有的列线处于低电平,按键所在的行电平将被拉成低电平。
根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按下。
四、实验步骤
1.把2812模块小板插到大板上;打开液晶模块的电源开关;
2.更改源程序,通过仿真器把执行代码下载到DSP芯片,不断调试;
3.运行程序,通过12864液晶显示和矩阵按键实现密码锁功能。
五、总结和体会
通过本次实验,实现了密码锁基本功能。
具有重新输入功能,能够通过按键修改密码,且最大的密码位数可通过改变程序中mimaweishu变量快速修改,初始值为50位。
通过12864显示输入提示,人机界面友好。
程序实现在解密后自动弹出“欢迎使用DSP2812”的数据信息。
虽然是基本功能,但真要实现起来还是感觉有些难度的,程序中应用大量标志来执行不同的功能,使尽量减少程序漏洞。
并通过本次实验提高了标志应用能力。
实验过程中遇到了很多问题,最终解决问题错误并成功实现密码锁功能。
整个实验过程,是不断学习、不断进步的过程。
通过实验掌握了液晶和矩阵按键的控制使用。
程序的编写能力也得到了提高。
由于要占用大量的存储空间来存放显示的汉字,开始时遇到了容量不足的问题。
于是去加深学习了2812的存储器映射和CMD文件编写相关的知识,但是资料的例子都没用到L0和L1存储空间,而是用H0空间既做程序又做数据空间。
通过更改Length值还是没有解决问题。
后来想到了利用LO和L1的连续8K空间和H0的8K连续空间分别作为程序空间和数据空间,解决了容量不足的问题。
由于矩阵按键程序为循环扫描方式,因此源程序运行时按一下按键,按键将被扫描了几百次,这样肯定不能实现密码锁按键要单次触发的要求。
通过更改按键程序实现了单次触发的条件,很好地为后续程序服务。
实验程序:
#include"include/DSP281x_Device.h"//DSP281xHeaderfileIncludeFile
#include"include/DSP281x_Examples.h"//DSP281xExamplesIncludeFile
unsignedshortmimaweishu=50;
unsignedshortchongshuflag=0,enBflag=0,enjinflag=0,initflag=0,anAdengdai=1,shuruflag=0,chongshemima=0,rightflag=0,jiemiflag=0,chongsheflag=0,errorflag=0,anjianjishu=0,shurufinish=0;
unsignedshortkey,keyvalue,an0=0,an1=0,an2=0,an3=0,an4=0,an5=0,an6=0,an7=0,an8=0,an9=0,anA=0,anB=0,anC=0,anD=0,anjin=0,anxin=0;
unsignedshorta[51],b[51]={'a','1','2','3','4','5','6','7','8','9','*','0','D','C'};
unsignedshorttable[]={'0','1','2','3','4','5','6','7','8','9'};
voidxianshi(unsignedshort);
voidanjianqingling()
{
anA=anB=anC=anD=anxin=anjin=an1=an2=an3=an4=an5=an6=an7=an8=an9=an0=0;
}
//ASCII码表
unsignedcharnAsciiDot[]=//ASCII
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//--
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0xFC,0xFC,0x38,0x00,0x00,//-!
-
0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,
……
};
typedefstructtypFNT_GB16//汉字字模数据结构
{
signedcharIndex[2];//汉字内码索引
charMsk[32];//点阵码数据
}aa;
//汉字数据表
structtypFNT_GB16GB_16[]=
{
"欢0",0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,
0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,
0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,
0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00,
"迎1","使2","用3"
/*--文字:
输4--*//*--文字:
入5--*//*--文字:
密6--*//*--文字:
码7--*//*--文字:
查8--*//*--文字:
看9--*//*--文字:
数10--*//*--文字:
据11--*//*--文字:
按12--*//*--文字:
键13--*//*--文字:
开14--*//*--文字:
始15--*//*--文字:
确16--*//*--文字:
认17--*//*--文字:
正18--*//*--文字:
为19--*//*--文字:
错20--*//*--文字:
误21--*//*--文字:
请22--*//*--文字:
重23--*//*--文字:
试24--*//*--文字:
新25--*//*--文字:
设26--*//*--文字:
稍27--*//*--文字:
后28--*//*--文字:
…29--*//*--文字:
初30--*//*--文字:
始31--*//*--文字:
成32--*//*--文字:
功33--*/
};
voidGpio_select(void);
voiddelay(inttime)
{
inti,j;
for(i=0;i