




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)課程綜合實(shí)訓(xùn)報(bào)告 項(xiàng)目名稱: 多功能密碼鎖 一. 內(nèi)容要求:1. 預(yù)期功能 (1)在沒輸入密碼時(shí)顯示萬年歷,并可調(diào).(2)、通過按鍵來確定輸入密碼,實(shí)現(xiàn)密碼鎖功能,正確輸入密碼后有開鎖提示;2. 設(shè)計(jì)方案(1)采用1602液晶 lm016l, at98c51,行列式鍵盤。(2)采用1602液晶 lm016l。(3)選用單片機(jī)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。單片機(jī)具有資源豐富、速度快、編程容易等優(yōu)點(diǎn)。利用單片機(jī)內(nèi)部的隨機(jī)存儲(chǔ)器(ram)和只讀存儲(chǔ)器(rom)及其引腳資源,外接液晶顯示(lcd),鍵盤輸入等實(shí)現(xiàn)數(shù)據(jù)的處理傳輸和顯示功能,基本上能實(shí)現(xiàn)設(shè)計(jì)指標(biāo)1,3. 硬件部分: 3.
2、1 電路圖:主要由單片機(jī)、矩陣鍵盤、獨(dú)立按鍵、液晶顯示器等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼,獨(dú)立按鍵用于實(shí)現(xiàn)可調(diào)萬年歷。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)對用戶輸入的密碼與自己保存的密碼進(jìn)行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報(bào)警電路控制開鎖還是報(bào)警。各模塊功能如下: (1)鍵盤輸入模塊:分為密碼輸入按鍵與幾個(gè)功能按鍵,用于完成密碼鎖輸入功能 (2)顯示模塊:用于完成對系統(tǒng)狀態(tài)顯示及操作提示功能。(3) 復(fù)位電路:完成系統(tǒng)的復(fù)位。(4) 獨(dú)立鍵盤:用于完成可調(diào)萬年歷功能.(5)開鎖電路:應(yīng)用繼電器及發(fā)光二極管模擬開鎖,完成開鎖及開鎖提示。鍵
3、盤電路:用p1口組成4*4的矩陣鍵盤,各鍵的定義一次為:0、1、2、3、4、5、6、7、8、9、*、#、enetr、del(當(dāng)密碼按錯(cuò)時(shí)可以按下該鍵刪除)、unclock(解鎖鍵即三次密碼都錯(cuò)了只能按下它進(jìn)行解鎖)調(diào)整時(shí)間的電路:tiao是位功能選擇,通過選擇位來決定萬年歷的調(diào)整,+1、-1是調(diào)節(jié)功能鍵。3.2 電路原理說明:開始仿真時(shí),一開始現(xiàn)實(shí)年月份時(shí)間。本設(shè)計(jì)主要由單片機(jī)、矩陣鍵盤、獨(dú)立按鍵、液晶顯示器等部分組成。開鎖電路控制著繼電器發(fā)光二級管的開鎖。程序中設(shè)計(jì)只有eneter鍵按下才能進(jìn)行密碼輸入等操作。當(dāng)輸出密碼正確時(shí),解鎖并且紅燈亮。當(dāng)連續(xù)按三次錯(cuò)誤會(huì)被鎖定,并且發(fā)出警報(bào)。此時(shí)按下
4、unclock(解鎖鍵,即三次密碼都錯(cuò)了只能按下它進(jìn)行解鎖)4.軟件部分4.1程序流程圖 : 開始初始化tiao按下否?enter按下否?ny第幾次按下?“+”功能鍵按下否“-”功能鍵按下否3秒到否nnyyynyny位選擇被調(diào)數(shù)加一被調(diào)數(shù)減一輸入密碼密碼輸入錯(cuò)誤?ok!yn顯示調(diào)后萬年歷第八次按下結(jié)束n 4.2程序設(shè)計(jì)說明#include#define lcd p2 #define uchar unsigned char #define uint unsigned int#define no_key 20 /無按鍵時(shí)的返回值sbit rs=p30;sbit rw=p31;/lcd數(shù)據(jù)命令選擇端
5、sbit e=p32;/lcd使能信號端sbit key1=p33; sbit key2=p34; sbit key3=p35; sbit a=p36; sbit key=p37;/開鎖信號控制端sbit enter=p13;/該鍵按下后才能進(jìn)行輸入密碼等操作uchar conflag,keyflag=3;uchar jz=20;/鍵值變量uchar temp1;/用此變量來存儲(chǔ)鍵盤掃描的返回值,以便判斷是否有鍵按下uchar code table06=3,0,3,0,3,0;/初始密碼uchar code table96=3,1,3,1,3,1;/初始密碼uchar code table1=
6、2013-05-23 w-4;uchar code table2= time-00:00:00;uchar code table3=enter please:;uchar code table4=ok!;uchar code table6=erro!;uchar code table7=enter again:;uchar code table8=locked!;uchar code table10=unlocked!;uchar code table11=cant open!;unsigned char m;uchar num,t0,keynum,hour,min,sec,year,mont
7、h,day,week; uchar table56;/定義輸入密碼值存儲(chǔ)數(shù)組/*函數(shù)名稱:delay*函數(shù)功能:軟件延時(shí),時(shí)間為z毫秒*入口參數(shù):z延時(shí)控制值,值越大,延時(shí)越長*出口參數(shù):無*/void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*函數(shù)名稱:write_com*函數(shù)功能:1602寫命令函數(shù),可以用此函數(shù)寫不同的指令*入口參數(shù):com*出口參數(shù):無*/void write_com(uchar com)rs=0;rw=0;e=0;p2=com;delay(5);e=1;delay(5);e=0;/*函數(shù)名稱:writ
8、e_date*函數(shù)功能:1602寫數(shù)據(jù)函數(shù),可以用此函數(shù)寫不同的數(shù)據(jù),程序?qū)?yīng)的硬件1602的數(shù)據(jù)口為p2口*入口參數(shù):date*出口參數(shù):無*/void write_date(uchar date)rs=1;rw=0;e=0;p2=date;delay(5);e=1;delay(5);e=0; /*顯示位*/ void write_week(uchar dte) uchar shi,ge; shi=dte/10; ge=dte%10; write_com(0x80+13); write_date(0x30+ge);void write_clock(uchar add,uchar dat) u
9、char first,second; second=dat/10; first=dat%10; write_com(0x80+0x40+add); write_date(0x30+second); write_com(0x80+0x40+add+1); write_date(0x30+first); void write_nyr(uchar add,uchar dte) uchar shi,ge; shi=dte/10; ge=dte%10; write_com(0x80+add); delay(5); write_date(0x30+shi); write_com(0x80+add+1);
10、delay(5); write_date(0x30+ge); /*函數(shù)名稱:init*函數(shù)功能:初始化函數(shù)*入口參數(shù):無*出口參數(shù):無*/void init()uchar hour=3,min=3,year=11,month=5,day=7,week=6; uchar num; e=0;write_com(0x38);/設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口write_com(0x0c);/開顯示,不顯示光標(biāo)write_com(0x06);/當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加1,且光標(biāo)加1write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0write_com(0x80);/設(shè)置數(shù)據(jù)
11、地址指針for(num=0;num15;num+)write_date(table1num);/lcd顯示初始設(shè)置時(shí)間;delay(5);write_com(0x80+0x40);for(num=0;num14;num+)write_date(table2num);/lcd顯示初始設(shè)置時(shí)間;delay(5);/*定時(shí)器初始化*/ tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; ea=1; et0=1; tr0=1; while(1) if(key1=0) /時(shí)鐘設(shè)置/key1按下 delay(5); if(key1=0) /ke
12、y1真的按下了 keynum+; while(!key1) /去鍵抖 tr0=0; /時(shí)鐘暫停 if(keynum=1) /key1按下第一次 write_com(0x80+0x40+13); write_com(0x0f); if(keynum=2) /key1按下第二次 write_com(0x80+0x40+10); if(keynum=3) /key1按下第三次 write_com(0x80+0x40+7); if(keynum=4) /key1按下第三次 write_com(0x80+13); if(keynum=5) /key1按下第三次 write_com(0x80+9); if
13、(keynum=6) /key1按下第三次 write_com(0x80+6); if(keynum=7) /key1按下第三次 write_com(0x80+3); if(keynum=8) /key1按下第四次 keynum=0; /按鍵次數(shù)清零 write_com(0x0c); tr0=1; /繼續(xù)運(yùn)行時(shí)鐘 /*按鍵加*/ if(keynum!=0) if(key2=0) delay(80); if(key2=0) while(!key2); if(keynum=1) sec+; if(sec=60) sec=0; write_clock(12,sec); write_com(0x80+
14、0x40+13); if(keynum=2) min+; if(min=60) min=0; write_clock(9,min); write_com(0x80+0x40+10); if(keynum=3) hour+; if(hour=24) hour=0; write_clock(6,hour); write_com(0x80+0x40+7); if(keynum=4) week+; if(week=8) week=1; write_week(week); write_com(0x80+13); if(keynum=5) day+; if(month=1|month=3|month=5|
15、month=7|month=8|month=10|month=12) if(day=32) day=1; else if(month=2) /注意這里沒有考慮閏年 if(day=29) day=1; else if(day=31) day=1; write_nyr(8,day); write_com(0x80+9); if(keynum=6) month+; if(month=13) month=1; write_nyr(5,month); write_com(0x80+6); if(keynum=7) year+; if(year=99) year=0; write_nyr(2,year);
16、 write_com(0x80+3); /*按鍵減*/ if(key3=0) delay(80); if(key3=0) while(!key3); if(keynum=1) sec-; if(sec=-1) sec=59; write_clock(12,sec); write_com(0x80+0x40+13); if(keynum=2) min-; if(min=-1) min=59; write_clock(9,min); write_com(0x80+0x40+10); if(keynum=3) hour-; if(hour=-1) hour=23; write_clock(6,hou
17、r); write_com(0x80+0x40+7); if(keynum=4) week-; if(week=0) week=7; write_week(week); write_com(0x80+13); if(keynum=5) day-; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) if(day=0) month=31; else if(month=2) /注意這里沒有考慮閏年 if(day=0) day=28; else if(day=0) day=30; write_nyr(8,day); write_
18、com(0x80+9); if(keynum=6) month-; if(month=0) month=12; write_nyr(5,month); write_com(0x80+6); if(keynum=7) year-; if(year=-1) year=99; write_nyr(2,year); write_com(0x80+3); p1=14|10|11|12|13|15|16|07; if(enter=0)break; /*檢測enter(p1.3)鍵是否按下,只有該鍵按下才能進(jìn)行輸入密碼等操作*/p1=04|10|11|12|13|15|16|17;while(enter);
19、if(enter=0)delay(5);if(enter=0) tr0=0; write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0 write_com(0x80+0x02);/設(shè)置數(shù)據(jù)地址指針 for(num=0;num13;num+) write_date(table3num);/lcd顯示“enter please:”delay(5); while(!enter);/判斷按鍵是否釋放 delay(5); while(!enter); p1=0xff; /*函數(shù)名稱:keyscan*函數(shù)功能:3*4鍵盤掃描*入口參數(shù):無*出口參數(shù):jz*/ uchar keyscan() uc
20、har temp;p1=0xfe;/第一行掃描temp=p1;temp=temp&0xf0; while(temp!=0xf0)delay(5);temp=p1;temp=temp&0xf0;while(temp!=0xf0)temp=p1;switch(temp)case 0xee:jz=0;break;case 0xde:jz=1;break;case 0xbe:jz=2;break;case 0x7e:jz=3;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;p1=0xfd;/第二行掃描temp=p1;temp=temp&0xf0;while(
21、temp!=0xf0)delay(5);temp=p1;temp=temp&0xf0;while(temp!=0xf0)temp=p1;switch(temp)case 0xed:jz=4;break;case 0xdd:jz=5;break;case 0xbd:jz=6;break;case 0x7d:jz=7;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;p1=0xfb;/第三行掃描temp=p1;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=p1;temp=temp&0xf0;while(temp
22、!=0xf0)temp=p1;switch(temp)case 0xeb:jz=8;break;case 0xdb:jz=9;break;case 0xbb:jz=*;break;case 0x7b:jz=#;break;while(temp!=0xf0)temp=p1;temp=temp&0xf0;return jz;/*函數(shù)名稱:codein*函數(shù)功能:完成密碼輸入,并判斷密碼是否正確*入口參數(shù):無*出口參數(shù):無*/void codein() uchar t=0;write_com(0x80+0x40+0x02);/重新設(shè)置lcd數(shù)據(jù)地址指針for(t=0;t6;t+) temp1=key
23、scan(); while(temp1=no_key)/若相等則此時(shí)沒有鍵按下 p1=0xdf;/判斷是否要?jiǎng)h除輸入的密碼 if(enter=0) delay(5);if(enter=0) write_com(0x80+0x41+t); /確定刪除對象 write_date( ); /顯示空格即為刪除 t-; while(!enter);/判斷按鍵是否釋放 delay(5); while(!enter); / p1=0xff temp1=keyscan();/繼續(xù)掃描按鍵直至有鍵按下 table5t=temp1;/實(shí)時(shí)保存輸入密碼值write_com(0x80+0x41+t); /重新設(shè)置數(shù)據(jù)
24、地址指針 write_date(*);/lcd顯示“*” delay(5);jz=20; t=0; for(t=0;t6;t+) if(table5t!=table0t)/對數(shù)組中的內(nèi)容進(jìn)行逐一比較,一旦有數(shù)據(jù)不對馬上退出循環(huán) break; if(t=6)/要是條件退出的話說明六個(gè)數(shù)全對密碼 conflag=1; / 進(jìn)行標(biāo)志密碼正確 /*函數(shù)名稱:codeout*函數(shù)功能:根據(jù)密碼輸入正確與否作出相應(yīng)的反應(yīng)*入口參數(shù):無*出口參數(shù):無*/void codeout() uchar t; if(conflag) t=0; write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0 wri
25、te_com(0x80+0x07);/設(shè)置數(shù)據(jù)地址指針 for(t=0;t3;t+) write_date(table4t);/lcd顯示“ok!”/delay(5); key=0; while(1); if(!conflag) keyflag-; t=0; write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0 write_com(0x80+0x05);/設(shè)置數(shù)據(jù)地址指針 for(t=0;t5;t+) write_date(table6t);/lcd顯示“erro!”delay(5); write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0 write_com(0x8
26、0+0x02);/設(shè)置數(shù)據(jù)地址指針 for(t=0;t12;t+) write_date(table7t);/lcd顯示“enter again:” delay(5); /*函數(shù)名稱:codeen*函數(shù)功能:當(dāng)密碼輸入錯(cuò)誤次數(shù)達(dá)到3次時(shí),要按下解鎖鍵,輸入萬能密碼,此函數(shù)能判斷萬能密碼正確與否并做出相應(yīng)反應(yīng)*入口參數(shù):無*出口參數(shù):無*/void codeen() uchar t=0;write_com(0x80+0x40+0x02);/重新設(shè)置lcd數(shù)據(jù)地址指針for(t=0;t6;t+) temp1=keyscan(); while(temp1=no_key)/若相等則此時(shí)沒有鍵按下 /p
27、1=0xdf;p1=05|10|11|12|13|14|16|17; if(enter=0) delay(5);if(enter=0) write_com(0x80+0x41+t); /確定刪除對象 write_date( ); /顯示空格即為刪除 t-; while(!enter);/判斷按鍵是否釋放 delay(5); while(!enter); p1=0xff;temp1=keyscan();/繼續(xù)掃描按鍵直至有鍵按下 table5t=temp1;/實(shí)時(shí)保存輸入密碼值write_com(0x80+0x41+t); /重新設(shè)置數(shù)據(jù)地址指針 write_date(*);/lcd顯示“*”
28、delay(5);jz=20; t=0; for(t=0;t6;t+) if(table5t!=table9t)/對數(shù)組中的內(nèi)容進(jìn)行逐一比較,一旦有數(shù)據(jù)不對馬上退出循環(huán) break; if(t=6)/要是條件退出的話說明六個(gè)數(shù)全對密碼 t=0;write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0write_com(0x80+0x03);/設(shè)置數(shù)據(jù)地址指針for(t=0;t9;t+)write_date(table10t);/lcd顯示“unlocked!”delay(5); while(1) key=0; else t=0;write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所
29、有顯示清0write_com(0x80+0x03);/設(shè)置數(shù)據(jù)地址指針 for(t=0;t11;t+)write_date(table11t);/lcd顯示“cant open!”delay(5); while(1)key=1; void main() uchar i=0; uchar j=0; init(); while(keyflag) codein();codeout(); write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0write_com(0x80+0x04);/設(shè)置數(shù)據(jù)地址指針for(i=0;i7;i+)write_date(table8i);/lcd顯示“l(fā)ock
30、ed!”a=0;delay(5); while(1) p1=0xbf; /判斷解鎖鍵是否按下 if(enter=0) delay(5);if(enter=0) write_com(0x01);/顯示清屏:數(shù)據(jù)指針、所有顯示清0 write_com(0x80+0x02);/設(shè)置數(shù)據(jù)地址指針 for(i=0;i13;i+) write_date(table3i);/lcd顯示“seeting code:”delay(5); while(!enter);/判斷按鍵是否釋放 delay(5); while(!enter); p1=0xff;break; key=1; codeen(); /*定時(shí)器中斷*/void timer0() interrupt 1 tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; t0+; if(t0=20) /1秒到清零 t0=0; sec+; if(sec=60) /1分鐘到清零 sec=0; min+; if(min=60) min=0; hour+; if(hour=24) week+; if(week=8) week=1; write_week(week); if(hour=24) ho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南勞動(dòng)人事職業(yè)學(xué)院《道路工程經(jīng)濟(jì)與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京交通職業(yè)技術(shù)學(xué)院《區(qū)域分析與規(guī)劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 皖南醫(yī)學(xué)院《火電廠燃燒優(yōu)化及系統(tǒng)節(jié)能》2023-2024學(xué)年第二學(xué)期期末試卷
- 滄州職業(yè)技術(shù)學(xué)院《基礎(chǔ)翻譯》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州科技貿(mào)易職業(yè)學(xué)院《國際結(jié)算與外貿(mào)會(huì)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨沂大學(xué)《藥理學(xué)理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 麗水職業(yè)技術(shù)學(xué)院《建筑透視》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北能源職業(yè)技術(shù)學(xué)院《高級老撾語四》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘭州信息科技學(xué)院《信息技術(shù)在學(xué)科教學(xué)中的應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 廈門醫(yī)學(xué)院《傳統(tǒng)建筑環(huán)境營造理論與方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 某建設(shè)總工程CI形象策劃方案
- -6-35kV中壓交聯(lián)電纜產(chǎn)品基礎(chǔ)知識培訓(xùn)
- 8款-組織架構(gòu)圖(可編輯)
- 高三二輪復(fù)習(xí)備考指導(dǎo)意見
- 2023年四川省公務(wù)員考試行測真題及答案解析
- 卷內(nèi)目錄范例模板
- 淺談鋼琴即興伴奏在教學(xué)中應(yīng)用現(xiàn)狀及提高方法 論文
- 2024屆高考語文復(fù)習(xí):小說閱讀之?dāng)⑹马樞蚺c敘事節(jié)奏
- 太陽能光電轉(zhuǎn)換西安交通大學(xué)PP課件
- 新生兒肺透明膜病的影像與臨床探討
- 動(dòng)力觸探檢測報(bào)告超重型圓錐動(dòng)力觸探試驗(yàn)
評論
0/150
提交評論