




已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
密碼鎖實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?. 掌握液晶的使用方法;2. 掌握液晶信號(hào)之間時(shí)序的正確識(shí)別和引入3. 掌握鍵盤信號(hào)的輸入,DSP I/O口的使用;4. 掌握鍵盤信號(hào)之間時(shí)序的正確識(shí)別和引入。5. 熟悉對(duì)TMS320F2812的編程調(diào)試。二、實(shí)驗(yàn)設(shè)備1.一臺(tái)裝有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í)別方法是掃描法。鍵被按下時(shí),與此鍵相連的行線電平將由與此鍵相連的列線電平?jīng)Q定,而行線的電平在無(wú)按鍵按下時(shí)處于高電平狀態(tài)。讓所有的列線處于低電平,按鍵所在的行電平將被拉成低電平。根據(jù)此行電平的變化,便能判斷此行一定有按鍵被按下,但還不能確定是哪個(gè)鍵被按下。那么,按下鍵的那列電平就會(huì)拉成低電平,判斷出哪列為低電平就可以判斷出按鍵號(hào)碼。四、實(shí)驗(yàn)步驟1.把2812模塊小板插到大板上;打開(kāi)液晶模塊的電源開(kāi)關(guān);2.更改源程序,通過(guò)仿真器把執(zhí)行代碼下載到DSP芯片,不斷調(diào)試;3.運(yùn)行程序,通過(guò)12864液晶顯示和矩陣按鍵實(shí)現(xiàn)密碼鎖功能。 五、總結(jié)和體會(huì)通過(guò)本次實(shí)驗(yàn),實(shí)現(xiàn)了密碼鎖基本功能。具有重新輸入功能,能夠通過(guò)按鍵修改密碼,且最大的密碼位數(shù)可通過(guò)改變程序中mimaweishu變量快速修改,初始值為50位。通過(guò)12864顯示輸入提示,人機(jī)界面友好。程序?qū)崿F(xiàn)在解密后自動(dòng)彈出 “歡迎使用 DSP 2812”的數(shù)據(jù)信息。雖然是基本功能,但真要實(shí)現(xiàn)起來(lái)還是感覺(jué)有些難度的,程序中應(yīng)用大量標(biāo)志來(lái)執(zhí)行不同的功能,使盡量減少程序漏洞。并通過(guò)本次實(shí)驗(yàn)提高了標(biāo)志應(yīng)用能力。實(shí)驗(yàn)過(guò)程中遇到了很多問(wèn)題,最終解決問(wèn)題錯(cuò)誤并成功實(shí)現(xiàn)密碼鎖功能。整個(gè)實(shí)驗(yàn)過(guò)程,是不斷學(xué)習(xí)、不斷進(jìn)步的過(guò)程。通過(guò)實(shí)驗(yàn)掌握了液晶和矩陣按鍵的控制使用。程序的編寫能力也得到了提高。由于要占用大量的存儲(chǔ)空間來(lái)存放顯示的漢字,開(kāi)始時(shí)遇到了容量不足的問(wèn)題。于是去加深學(xué)習(xí)了2812的存儲(chǔ)器映射和CMD文件編寫相關(guān)的知識(shí),但是資料的例子都沒(méi)用到L0和L1存儲(chǔ)空間,而是用H0空間既做程序又做數(shù)據(jù)空間。通過(guò)更改Length值還是沒(méi)有解決問(wèn)題。后來(lái)想到了利用LO和L1的連續(xù)8K空間和H0的8K連續(xù)空間分別作為程序空間和數(shù)據(jù)空間,解決了容量不足的問(wèn)題。由于矩陣按鍵程序?yàn)檠h(huán)掃描方式,因此源程序運(yùn)行時(shí)按一下按鍵,按鍵將被掃描了幾百次,這樣肯定不能實(shí)現(xiàn)密碼鎖按鍵要單次觸發(fā)的要求。通過(guò)更改按鍵程序?qū)崿F(xiàn)了單次觸發(fā)的條件,很好地為后續(xù)程序服務(wù)。通過(guò)實(shí)驗(yàn),提高了2812程序調(diào)試能力。學(xué)會(huì)了觀察變量變化在線調(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 -*/*- 文字: 開(kāi)14 -*/*- 文字: 始15 -*/*- 文字: 確16 -*/*- 文字: 認(rèn)17 -*/*- 文字: 正18 -*/*- 文字: 為19 -*/*- 文字: 錯(cuò)20 -*/*- 文字: 誤21 -*/*- 文字: 請(qǐng)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+) /寫頁(yè)地址共8頁(yè) 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)/請(qǐng)按A鍵輸入密碼查看數(shù)據(jù) initflag=1; xianshi(0); if(A=keyvalue & 0=chongshemima & 0=chongsheflag) chongshu: keyvalue=0;/使用goto沒(méi)有經(jīng)過(guò)開(kāi)始處keyvalue=0;將導(dǎo)致按鍵所以一直循環(huán). anjianjishu=0;shuruflag=1;anAdengdai=0;enBflag=enjinflag=1; /注意要重新賦值!否則再次輸密碼時(shí)只要前面對(duì)了就行。 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; /密碼錯(cuò)誤!請(qǐng)重新輸入 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)功能 /密碼正確!請(qǐng)稍后。 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è)密碼成功!/請(qǐng)稍后。 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保設(shè)備制作培訓(xùn)課件
- 航空航天復(fù)合材料 課件 第6章 燒蝕防熱復(fù)合材料朱和國(guó)
- 早產(chǎn)兒的治療及護(hù)理
- 餐飲行業(yè)知名品牌收購(gòu)與經(jīng)營(yíng)權(quán)協(xié)議
- 企業(yè)財(cái)務(wù)風(fēng)險(xiǎn)管理與內(nèi)部控制體系建設(shè)合同
- 餐飲企業(yè)大堂經(jīng)理職位競(jìng)聘與培養(yǎng)協(xié)議
- 拆遷補(bǔ)償與二手房買賣合同風(fēng)險(xiǎn)評(píng)估與解決方案合同
- 幼兒園考勤制度崗前培訓(xùn)
- 水稻專用肥采購(gòu)合同及技術(shù)指導(dǎo)服務(wù)協(xié)議
- 高新區(qū)股權(quán)交易糾紛解決及股權(quán)轉(zhuǎn)讓合同
- 稅務(wù)行政處罰文書(標(biāo)準(zhǔn)版)
- 第三章葡萄酒釀造2
- 每天100道語(yǔ)法填空題過(guò)高考英語(yǔ)高頻詞匯12
- 配電室巡檢記錄表
- 數(shù)字程控交換機(jī)系統(tǒng)技術(shù)規(guī)范書
- 卓越績(jī)效評(píng)價(jià)準(zhǔn)則概述(專業(yè)性權(quán)威性實(shí)用性)
- GB 1886.20-2016食品安全國(guó)家標(biāo)準(zhǔn)食品添加劑氫氧化鈉
- 國(guó)資進(jìn)場(chǎng)交易工作流程講座
- 當(dāng)代法律英語(yǔ)翻譯全
- 制冷操作證培訓(xùn)教材制冷與空調(diào)設(shè)備運(yùn)行操作作業(yè)培訓(xùn)教程課件
- 湖南省長(zhǎng)沙市望城區(qū)2020-2021學(xué)年八年級(jí)下學(xué)期期末考試歷史試卷
評(píng)論
0/150
提交評(píng)論