DSP_基于TMS320F2812密碼鎖設(shè)計(jì).doc_第1頁
DSP_基于TMS320F2812密碼鎖設(shè)計(jì).doc_第2頁
DSP_基于TMS320F2812密碼鎖設(shè)計(jì).doc_第3頁
DSP_基于TMS320F2812密碼鎖設(shè)計(jì).doc_第4頁
DSP_基于TMS320F2812密碼鎖設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

密碼鎖實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?. 掌握液晶的使用方法;2. 掌握液晶信號之間時(shí)序的正確識別和引入3. 掌握鍵盤信號的輸入,DSP I/O口的使用;4. 掌握鍵盤信號之間時(shí)序的正確識別和引入。5. 熟悉對TMS320F2812的編程調(diào)試。二、實(shí)驗(yàn)設(shè)備1.一臺裝有CCS2000軟件的計(jì)算機(jī);2.插上2812主控板的DSP實(shí)驗(yàn)箱;3.DSP硬件仿真器。三、實(shí)驗(yàn)原理1.12864液晶顯示器:本實(shí)驗(yàn)箱采用的液晶接口在DSP的數(shù)據(jù)總線上,由于DSP是十六位總線,液晶是八位總線,所以DSP的高八位總線懸空。液晶的結(jié)構(gòu)框圖如下,2.4*4矩陣按鍵:實(shí)驗(yàn)箱上提供一個(gè)4x4的行列式鍵盤。2812的8個(gè)I/O口與之相連,這里按鍵的識別方法是掃描法。鍵被按下時(shí),與此鍵相連的行線電平將由與此鍵相連的列線電平?jīng)Q定,而行線的電平在無按鍵按下時(shí)處于高電平狀態(tài)。讓所有的列線處于低電平,按鍵所在的行電平將被拉成低電平。根據(jù)此行電平的變化,便能判斷此行一定有按鍵被按下,但還不能確定是哪個(gè)鍵被按下。那么,按下鍵的那列電平就會拉成低電平,判斷出哪列為低電平就可以判斷出按鍵號碼。四、實(shí)驗(yàn)步驟1.把2812模塊小板插到大板上;打開液晶模塊的電源開關(guān);2.更改源程序,通過仿真器把執(zhí)行代碼下載到DSP芯片,不斷調(diào)試;3.運(yùn)行程序,通過12864液晶顯示和矩陣按鍵實(shí)現(xiàn)密碼鎖功能。 五、總結(jié)和體會通過本次實(shí)驗(yàn),實(shí)現(xiàn)了密碼鎖基本功能。具有重新輸入功能,能夠通過按鍵修改密碼,且最大的密碼位數(shù)可通過改變程序中mimaweishu變量快速修改,初始值為50位。通過12864顯示輸入提示,人機(jī)界面友好。程序?qū)崿F(xiàn)在解密后自動彈出 “歡迎使用 DSP 2812”的數(shù)據(jù)信息。雖然是基本功能,但真要實(shí)現(xiàn)起來還是感覺有些難度的,程序中應(yīng)用大量標(biāo)志來執(zhí)行不同的功能,使盡量減少程序漏洞。并通過本次實(shí)驗(yàn)提高了標(biāo)志應(yīng)用能力。實(shí)驗(yàn)過程中遇到了很多問題,最終解決問題錯誤并成功實(shí)現(xiàn)密碼鎖功能。整個(gè)實(shí)驗(yàn)過程,是不斷學(xué)習(xí)、不斷進(jìn)步的過程。通過實(shí)驗(yàn)掌握了液晶和矩陣按鍵的控制使用。程序的編寫能力也得到了提高。由于要占用大量的存儲空間來存放顯示的漢字,開始時(shí)遇到了容量不足的問題。于是去加深學(xué)習(xí)了2812的存儲器映射和CMD文件編寫相關(guān)的知識,但是資料的例子都沒用到L0和L1存儲空間,而是用H0空間既做程序又做數(shù)據(jù)空間。通過更改Length值還是沒有解決問題。后來想到了利用LO和L1的連續(xù)8K空間和H0的8K連續(xù)空間分別作為程序空間和數(shù)據(jù)空間,解決了容量不足的問題。由于矩陣按鍵程序?yàn)檠h(huán)掃描方式,因此源程序運(yùn)行時(shí)按一下按鍵,按鍵將被掃描了幾百次,這樣肯定不能實(shí)現(xiàn)密碼鎖按鍵要單次觸發(fā)的要求。通過更改按鍵程序?qū)崿F(xiàn)了單次觸發(fā)的條件,很好地為后續(xù)程序服務(wù)。通過實(shí)驗(yàn),提高了2812程序調(diào)試能力。學(xué)會了觀察變量變化在線調(diào)試的分析方法。實(shí)驗(yàn)程序:#include include/DSP281x_Device.h / DSP281x Headerfile Include File#include include/DSP281x_Examples.h / DSP281x Examples Include Fileunsigned short mimaweishu=50;unsigned short chongshuflag=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;unsigned short key,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;unsigned short a51,b51=a,1,2,3,4,5,6,7,8,9,*,0,D,C;unsigned short table=0,1,2,3,4,5,6,7,8,9;void xianshi(unsigned short);void anjianqingling() anA=anB=anC=anD=anxin=anjin=an1=an2=an3=an4=an5=an6=an7=an8=an9=an0=0; / ASCII碼表unsigned char nAsciiDot = / ASCII0x00,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,;typedef struct typFNT_GB16 / 漢字字模數(shù)據(jù)結(jié)構(gòu) signed char Index2; / 漢字內(nèi)碼索引 char Msk32; / 點(diǎn)陣碼數(shù)據(jù)aa;/ 漢字?jǐn)?shù)據(jù)表struct typFNT_GB16 GB_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 -*/*- 文字: 數(shù)10 -*/*- 文字: 據(jù)11 -*/*- 文字: 按12 -*/*- 文字: 鍵13 -*/*- 文字: 開14 -*/*- 文字: 始15 -*/*- 文字: 確16 -*/*- 文字: 認(rèn)17 -*/*- 文字: 正18 -*/*- 文字: 為19 -*/*- 文字: 錯20 -*/*- 文字: 誤21 -*/*- 文字: 請22 -*/*- 文字: 重23 -*/*- 文字: 試 24 -*/*- 文字: 新25 -*/*- 文字: 設(shè)26 -*/*- 文字: 稍27 -*/*- 文字: 后28 -*/*- 文字: 29 -*/*- 文字: 初30 -*/*- 文字: 始31 -*/*- 文字: 成32 -*/*- 文字: 功33 -*/;void Gpio_select(void);void delay(int time) int i,j; for(i=0;itime;i+) for(j=0;j1200;j+);void wcom(unsigned char com) Reg08=com;void wdata(unsigned char dat)Reg07=dat;void lcdinit(void)wcom(0xa4);wcom(0xad);wcom(0x03);wcom(0xac);wcom(0xe2); /initialize interal functiondelay(10); wcom(0xa2); /set nomal display wcom(0xa0); /ADC select SEG1 to SEG132wcom(0xc8); /set SHL COM1 to COM64 start page setup wcom(0x2c); /power control(VB,VR,VF=1,1,1) wcom(0x2e); /power control(VB,VR,VF=1,1,1) wcom(0x2f); /power control(VB,VR,VF=1,1,1) wcom(0x25); / wcom(0x81); /set reference voltage mode wcom(0x20); /set reference voltage wcom(0x40); /Initial Display Line was first line wcom(0xa6); /set nomal display wcom(0xa4); /set nomal display wcom(0xaf); /display onvoid clear(void)unsigned char page;unsigned char seg; for(page=0xb0;page0xb9;page+) /寫頁地址共8頁 0xb0-0xb8 wcom(page); wcom(0x10); wcom(0x00); for(seg=0;seg128;seg+) wdata(0x00); void lcdwritechar(char codenum ,char y ,char x ) unsigned char seg; unsigned int coden; codenum-=0x20; coden=codenum1)&0x0f); wcom(0x00|(x3)&0x0f); for(seg=0;seg1)&0x0f); wcom(0x00|(x3)&0x0f); for(seg=0;seg1)&0x0f);wcom(0x00|(x3)&0x0f);for(seg=0;seg1)&0x0f);wcom(0x00|(x3)&0x0f);for(seg=0;seg16;seg+)wdata(GB_16hz.Mskcoden+);main() short i,j; InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); lcdinit(); clear(); for(i=14;imimaweishu+1;i+) bi=a; while(1) keyvalue=0;/注意的地方!使程序執(zhí)行一周后keyvalue變?yōu)槌跏贾? GpioDataRegs.GPADAT.all =0xefff; Reg05=0x00; key=GpioDataRegs.GPADAT.all; if(key!=0xefff) if(key=0xe7ff & 0=anD) anjianqingling(); anD=1; anjianjishu+; keyvalue=D;if(key=0xebff & 0=anjin) anjianqingling(); anjin=1; /anjianjishu+;確認(rèn)鍵,不需計(jì)數(shù)。計(jì)數(shù)只為了輸密碼或設(shè)密碼 keyvalue=#; if(key=0xef7f & 0=an0) anjianqingling(); an0=1; anjianjishu+; keyvalue=0; if(key=0xefbf & 0=anxin) anjianqingling(); anxin=1; anjianjishu+; keyvalue=*; Reg05=0x00; GpioDataRegs.GPADAT.all =0xdfff; Reg05=0x00; key=GpioDataRegs.GPADAT.all; if(key!=0xdfff) if(key=0xd7ff & 0=anA) anjianqingling(); anA=1; / anjianjishu+;計(jì)數(shù)只為了輸密碼或設(shè)密碼 keyvalue=A; if(key=0xdbff & 0=an3) anjianqingling(); an3=1; anjianjishu+; keyvalue=3; if(key=0xdf7f & 0=an2) anjianqingling(); an2=1; anjianjishu+; keyvalue=2; if(key=0xdfbf & 0=an1) anjianqingling(); an1=1; anjianjishu+; keyvalue=1; Reg05=0x00; GpioDataRegs.GPADAT.all =0xbfff; Reg05=0x00; key=GpioDataRegs.GPADAT.all; if(key!=0xbfff) if(key=0xb7ff & 0=anB) anjianqingling(); anB=1; / anjianjishu+; keyvalue=B; if(key=0xbbff & 0=an6) anjianqingling(); an6=1; anjianjishu+; keyvalue=6; if(key=0xbf7f & 0=an5) anjianqingling(); an5=1; anjianjishu+; keyvalue=5; if(key=0xbfbf & 0=an4) anjianqingling(); an4=1; anjianjishu+; keyvalue=4; Reg05=0x00; GpioDataRegs.GPADAT.all =0x7fff; Reg05=0x00; key=GpioDataRegs.GPADAT.all; if(key!=0x7fff) if(key=0x77ff & 0=anC) anjianqingling(); anC=1; anjianjishu+; keyvalue=C; if(key=0x7bff & 0=an9) anjianqingling(); an9=1; anjianjishu+; keyvalue=9; if(key=0x7f7f & 0=an8) anjianqingling(); an8=1; anjianjishu+; keyvalue=8; if(key=0x7fbf & 0=an7) anjianqingling(); an7=1; anjianjishu+; keyvalue=7; Reg05=0x00; if(0=keyvalue & 0=initflag)/請按A鍵輸入密碼查看數(shù)據(jù) initflag=1; xianshi(0); if(A=keyvalue & 0=chongshemima & 0=chongsheflag) chongshu: keyvalue=0;/使用goto沒有經(jīng)過開始處keyvalue=0;將導(dǎo)致按鍵所以一直循環(huán). anjianjishu=0;shuruflag=1;anAdengdai=0;enBflag=enjinflag=1; /注意要重新賦值!否則再次輸密碼時(shí)只要前面對了就行。 for(i=0;i=17 & anjianjishu33) if(17=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,2,i); lcdwritechar(*,2,anjianjishu-17); else if(anjianjishu49) if(33=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,2,i); lcdwritechar(*,2,anjianjishu-33); else if(anjianjishu65) if(49=anjianjishu) for(i=0;i=6 & anjianjishu22) if(6=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,0,i); lcdwritechar(*,0,anjianjishu-6); else if(anjianjishu38) if(22=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,0,i); lcdwritechar(*,0,anjianjishu-22); else if(anjianjishu54) if(38=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,0,i); lcdwritechar(*,0,anjianjishu-38); if(#=keyvalue & 1=enjinflag & 0=anAdengdai) keyvalue=0; for(i=1;imimaweishu+1;i+) if(ai!=bi) errorflag=1; if(0=errorflag)rightflag=1; if(1=errorflag) errorflag=0; /密碼錯誤!請重新輸入 xianshi(3); for(i=0;i32767;i+) for(j=0;j40;j+); if(1=chongsheflag) goto chongshe; else goto chongshu; if(1=rightflag) jiemiflag=1; rightflag=0;enjinflag=0;/防止#鍵進(jìn)入確認(rèn)功能 /密碼正確!請稍后。 xianshi(4); /一段延時(shí)模擬等待 for(i=0;i32767;i+) for(j=0;j=17 & anjianjishu33) if(17=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,2,i); lcdwritechar(*,2,anjianjishu-17); else if(anjianjishu49) if(33=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,2,i); lcdwritechar(*,2,anjianjishu-33); else if(anjianjishu65) if(49=anjianjishu) for(i=0;i16;i+)lcdwritechar( ,2,i); lcdwritechar(*,2,anjianjishu-49); if(#=keyvalue & 1=chongshemima & 0!=anjianjishu) chongshemima=0;if(anjianjishumimaweishu) for(i=anjianjishu+1;imimaweishu+1;i+) bi=a; /重設(shè)密碼成功!/請稍后。 xianshi(7); /一段延時(shí)模擬等待 for(i=0;i32767;i+) for(j=0;j50;j+); goto chongshu; Reg05=0x00;/while();/mainvoid Gpio_select(void) Uint16 var1; Uint16 var2; Uint16 var3; var1= 0x0000;/ sets GPIO Muxs as I/Os var2= 0xf000;/ sets GPIO DIR as outputs var3= 0x0000;/ sets the Input qualifier values EALLOW; GpioMuxRegs.GPAMUX.all=var1; GpioMuxRegs.GPADIR.all=var2;/ GPIO PORTs as output GpioMuxRegs.GPAQUAL.all=var3; / Set GPIO input qualifier values EDIS; void xianshi(unsigned short changenum) switch(changenum) case 0: lcdwritehz(22,2,2); lcdwritehz(12,2,4); lcdwritechar(A,2,6); lcdwritehz(13,2,7); lcdwritehz(4,2,9); lcdwritehz(5,2,11); lcdwritehz(6,4,2); lcdwritehz(7,4,4); lcdwritehz(8,4,6); lcdwritehz(9,4,8); lcdwritehz(10,4,10); lcdwritehz(11,4,12); break; case 1: clear(); lcdwritehz(22,0,0); lcdwritehz(4,0,2); lcdwritehz(5,0,4); lcdwritehz(6,0,6); lcdwritehz(7,0,8); lcdwritechar(:,0,10); lcdwritehz(12,2,0); lcdwritechar(B,2,2); lcdwritehz(13,2,4); lcdwritehz(23,2,6); lcdwritehz(26,2,8); lcdwritehz(6,2,10); lcdwritehz(7,2,12); lcdwritehz(12,4,0); lcdwritechar(A,4,2); lcdwritehz(13,4,4); lcdwritehz(23,4,6); lcdwritehz(25,4,8); lcdwritehz(4,4,10); lcdwritehz(5,4,12); lcdwritehz(12,6,0); lcdwritechar(#,6,2); lcdwritehz(13,6,4); lcdwritehz(16,6,6); lcdwritehz(17,6,8); lcdwritehz(4,6,10); lcdwritehz(5,6,12); break; case 2: clear(); lcdwritehz(22,0,0); lcdwritehz(4,0,2); lcdwritehz(5,0,4); lcdwritehz(30,0,6); lcdwritehz(31,0,8); lcdwritehz(6,0,10); lcdwritehz(7,0,12); lcdwritechar(:,0,14); lcdwritehz(12,4,0); lcdwritechar(B,4,2); lcdwritehz(13,4,4); lcdwritehz(23,4,6); lcdwritehz(25,4,8); lcdwritehz(4,4,10); lcdwritehz(5,4,12); lcdwritehz(12,6,0); lcdwritechar(#,6,2); lcdwritehz(13,6,4); lcdwritehz(16,6,6); lcdwritehz(17,6,8); lcdwritehz(4,6,10); lcdwritehz(5,6,12); break; case 3: clear(); lcdwritehz(6,2,4); lcdwritehz(7,2,6); lcdwritehz(20,2,8); lcdwritehz(21,2,10); lcdwritechar(!,2,12); lcdwritehz(22,4,2); lcdwritehz(23,4,4); lcdwritehz(25,4,6); lcdwritehz(4,4,8); lcdwritehz(5,4,10); break; case 4: clear(); lcdwritehz(6,2,4); lcdwritehz(7,2,6); lcdwritehz(18,2,8); lcdwritehz(16,2,10); lcdwritechar(!,2,12); lcdwritehz(22,6,4); lcdwri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論