新型高可靠性密码锁设计DSP.docx

上传人:b****5 文档编号:2840690 上传时间:2022-11-15 格式:DOCX 页数:26 大小:67.84KB
下载 相关 举报
新型高可靠性密码锁设计DSP.docx_第1页
第1页 / 共26页
新型高可靠性密码锁设计DSP.docx_第2页
第2页 / 共26页
新型高可靠性密码锁设计DSP.docx_第3页
第3页 / 共26页
新型高可靠性密码锁设计DSP.docx_第4页
第4页 / 共26页
新型高可靠性密码锁设计DSP.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

新型高可靠性密码锁设计DSP.docx

《新型高可靠性密码锁设计DSP.docx》由会员分享,可在线阅读,更多相关《新型高可靠性密码锁设计DSP.docx(26页珍藏版)》请在冰豆网上搜索。

新型高可靠性密码锁设计DSP.docx

新型高可靠性密码锁设计DSP

密码锁实验

一、目的

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连续空间分别作为程序空间和数据空间,解决了容量不足的问题。

由于矩阵按键程序为循环扫描方式,因此源程序运行时按一下按键,按键将被扫描了几百次,这样肯定不能实现密码锁按键要单次触发的要求。

通过更改按键程序实现了单次触发的条件,很好地为后续程序服务。

通过实验,提高了2812程序调试能力。

学会了观察变量变化在线调试的分析方法。

实验程序:

#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

for(j=0;j<1200;j++);

}

voidwcom(unsignedcharcom)

{

Reg08=com;

}

voidwdata(unsignedchardat)

{

Reg07=dat;

}

voidlcdinit(void)

{

wcom(0xa4);

wcom(0xad);

wcom(0x03);

wcom(0xac);

wcom(0xe2);//initializeinteralfunction

delay(10);

wcom(0xa2);//setnomaldisplay

wcom(0xa0);//ADCselectSEG1toSEG132

wcom(0xc8);//setSHLCOM1toCOM64startpagesetup

wcom(0x2c);//powercontrol(VB,VR,VF=1,1,1)

wcom(0x2e);//powercontrol(VB,VR,VF=1,1,1)

wcom(0x2f);//powercontrol(VB,VR,VF=1,1,1)

wcom(0x25);//

wcom(0x81);//setreferencevoltagemode

wcom(0x20);//setreferencevoltage

wcom(0x40);//InitialDisplayLinewasfirstline

wcom(0xa6);//setnomaldisplay

wcom(0xa4);//setnomaldisplay

wcom(0xaf);//displayon

}

voidclear(void)

{

unsignedcharpage;

unsignedcharseg;

for(page=0xb0;page<0xb9;page++)//写页地址共8页0xb0----0xb8

{

wcom(page);

wcom(0x10);

wcom(0x00);

for(seg=0;seg<128;seg++)

{

wdata(0x00);

}

}

}

voidlcdwritechar(charcodenum,chary,charx)

{

unsignedcharseg;

unsignedintcoden;

codenum-=0x20;

coden=codenum<<4;

wcom(0xb0|(y&0x0f));//

wcom(0x10|((x>>1)&0x0f));

wcom(0x00|((x<<3)&0x0f));

for(seg=0;seg<8;seg++)

wdata(nAsciiDot[coden++]);

wcom(0xb0|((y+1)&0x0f));

wcom(0x10|((x>>1)&0x0f));

wcom(0x00|((x<<3)&0x0f));

for(seg=0;seg<8;seg++)

wdata(nAsciiDot[coden++]);

}

voidlcdwritehz(charhznum,chary,charx)

{

unsignedcharseg,hz;

unsignedcharcoden=0;

hz=hznum;

wcom(0xb0|(y&0x0f));

wcom(0x10|((x>>1)&0x0f));

wcom(0x00|((x<<3)&0x0f));

for(seg=0;seg<16;seg++)wdata(GB_16[hz].Msk[coden++]);

wcom(0xb0|((y+1)&0x0f));

wcom(0x10|((x>>1)&0x0f));

wcom(0x00|((x<<3)&0x0f));

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1