版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、單片機技術及應用綜合訓練(設計報告)前言隨著人們生活水平的提高,如何實現(xiàn)家庭防盜這一問題也變得尤為突出。在科學技術不斷發(fā)展的今天,電子密碼防盜鎖作為防盜衛(wèi)士的作用顯得日趨重要。本文從經(jīng)濟實用的角度出發(fā),系統(tǒng)由STC89C52與低功耗CMOS型E²PROM AT24C02作為主控芯片與數(shù)據(jù)存儲器單元,結(jié)合外圍的鍵盤輸入、LCD顯示、報警、開鎖等電路模塊。它能完成以下功能:正確輸入密碼前提下,開鎖;錯誤輸入密碼情況下,報警;密碼可以根據(jù)用戶需要更改。用C語言編寫的主控芯片控制程序與EEPROM AT24C02讀寫程序相結(jié)合,并用Keil軟件進行編譯,設計了一款可以多次更改密碼,具有報警功
2、能的電子密碼控制系統(tǒng)。本密碼鎖具有設計方法合理,簡單易行,成本低,安全實用,保密性強,靈活性高等特點,具有一定的推廣價值。關鍵詞:電子密碼鎖、報警、液晶顯示目錄1、 選題要求···································
3、83;·12、 硬件電路設計·································12.1 51單片機············&
4、#183;···················22.2 鍵盤電路····························
5、3;····22.3 液晶顯示電路·····························22.4 警報電路·············
6、183;···················32.5 密碼儲存電路····························
7、83;32.6 晶振、復位及關鎖·························33、 軟件設計·····················
8、················44、 軟硬件調(diào)試結(jié)果·······························94.1 電路
9、總原理圖·····························94.2 調(diào)試結(jié)果···················
10、;·············105、 總結(jié)···································
11、3;····11一、選題要求本文從經(jīng)濟實用的角度出發(fā),設計采用單片機為主控芯片,結(jié)合外圍電路,組成電子密碼控制系統(tǒng),密碼鎖共6位密碼,每位的取值范圍為09,用戶可以自行設定和修改密碼。用戶想要打開鎖,必先通過提供的鍵盤輸入正確的密碼才可以,密碼輸入錯誤有提示,為了提高安全性,當密碼輸入錯誤三次將報警,期間輸入密碼無效,以防竊賊多次試探密碼。6位密碼同時輸入正確,鎖才能打開。鎖內(nèi)有備用電池,只有內(nèi)部上電復位時才能設置或修改密碼,因此,僅在門外按鍵是不能修改或設置密碼的,因此保密性強、靈活性高。其特點如下:1) 保密性好,編碼量多,遠遠大于彈子鎖。隨機開鎖成
12、功率幾乎為零。2) 密碼可變,用戶可以隨時更改密碼,防止密碼被盜,同時也可以避免因人員的更替而使鎖的密級下降。3) 誤碼輸入保護,當輸入密碼多次錯誤時,報警系統(tǒng)自動啟動。4) 無活動零件,不會磨損,壽命長。5) 使用靈活性好,不像機械鎖必須佩帶鑰匙才能開鎖。6) 電子密碼鎖操作簡單易行,一學即會。2、 硬件電路設計 下面是整個設計的流程圖:開開始 開始始初始化次數(shù)加1輸入密碼密碼正確?返返回回NYY開鎖程序開鎖?N修改密碼?次數(shù)>3?報警程序修改程序YNNY開始返回2.1 51單片機這次課程設計采用的是5系列單片機AT89C52。其外部封裝如下圖所示:AT89C52單片機有4組8位的可編
13、程I/O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根8。P0口(Pin39Pin32):8位雙向I/O口線,名稱為P0.0P0.7P1口(Pin1Pin8):8位準雙向I/O口線,名稱為P1.0P1.7 P2口(Pin21Pin28):8位準雙向I/O口線,名稱為P2.0P2.7 P3口(Pin10Pin17):8位準雙向I/O口線,名稱為P3.0P3.72.2 鍵盤電路 本次試驗采用的是行列鍵盤,C語言程序中有相應的驅(qū)動程序,其硬件電路如下所示,下右對應的為各個按鍵所對應的數(shù)字及功能。0123456789確認重輸改密2.3 液晶顯示電路 實驗中采用的是LM016L液
14、晶顯示,其數(shù)據(jù)端口采集數(shù)據(jù)通過單片機的P0口,接法如下圖所示。不同情況下會有不同的顯示,顯示內(nèi)容包括:Welcome、Hello Boss、Wrong、OK等內(nèi)容。2.4 警報電路 下圖是警報電路連接圖,警報觸發(fā)為:連續(xù)三次輸錯密碼,警報觸發(fā)后會有一個時間延遲,延遲時間內(nèi)任何操作都是無效的,過后通過關鎖按鈕可解除。2.5 密碼儲存電路 實驗中考慮到實用性方面時,就想到了密碼儲存及修改的問題,于是采用了FM24C02F作為面膜儲存模塊,電路連接如下所示:2.6 晶振、復位及關鎖 晶振、復位及關鎖電路如下所示(作圖所示按鈕為復位按鈕): 三、軟件設計C語言源程序:第 11 頁#include<
15、;reg52.h> #include<stdio.h>#include<intrins.h>#define CHECK_BUSY#define DataPort P0#define KeyPort P1sbit RS = P24;/液晶顯示的定義端口 sbit RW = P25;sbit EN = P26;sbit scl=P30;/24c02端口定義sbit sda=P31; sbit baojing=P21;/報警器sbit jdq=P20;/繼電器sbit jb=P23;/警報燈sbit close=P22;unsigned char old1,old2,o
16、ld3,old4,old5,old6; /原始密碼000000unsigned char new1,new2,new3,new4,new5,new6;/代表新密碼void delay1(unsigned int m) unsigned int n; for(n=0;n<m;n+);void delay(unsigned int m) unsigned int a; unsigned char b; for(a=0;a<m;a+) for(b=0;b<125;b+);void DelayUs2x(unsigned char t) while(-t);void DelayMs(u
17、nsigned char t) while(t-) DelayUs2x(256); DelayUs2x(256); void baojingqi() baojing=0; DelayUs2x(256); if(baojing=0) baojing=0; DelayUs2x(256);bit LCD_Check_Busy(void)/判忙函數(shù) #ifdef CHECK_BUSYDataPort= 0xFF; RS=0; RW=1; EN=0; _nop_(); EN=1;return (bit)(DataPort & 0x80);#elsereturn 0;#endif void LCD
18、_Write_Com(unsigned char com) /寫入命令函數(shù) / while(LCD_Check_Busy(); /忙則等待 DelayMs(5); RS=0; RW=0; EN=1; DataPort= com; _nop_(); EN=0; void LCD_Write_Data(unsigned char Data) /寫入數(shù)據(jù)函數(shù) /while(LCD_Check_Busy(); /忙則等待 DelayMs(5); RS=1; RW=0; EN=1; DataPort= Data; _nop_(); EN=0; void LCD_Clear(void)/清屏函數(shù) LCD_
19、Write_Com(0x01); DelayMs(5); void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) /寫入字符函數(shù) if(y=0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); LCD_Write_Data( Data); void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) /寫入字符串函數(shù) while(*s) LCD_Write_Char
20、(x,y,*s); s+; x+; void LCD_Init(void) /液晶顯示的初始化函數(shù) LCD_Write_Com(0x38); /顯示模式設置 DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /顯示關閉 LCD_Write_Com(0x01); /顯示清屏 LCD_Write_Com(0x06); /顯示光標移動設置 DelayMs(5); LCD_Write_Com(0x0C); /顯示開
21、及光標設置unsigned char KeyScan(void) /鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法 unsigned char cord_h,cord_l;/行列值中間變量 KeyPort=0x0f; /行線輸出全為0 cord_h=KeyPort&0x0f; /讀入列線值 if(cord_h!=0x0f) /先檢測有無按鍵按下 DelayMs(10); /去抖 if(KeyPort&0x0f)!=0x0f) cord_h=KeyPort&0x0f; /讀入列線值 KeyPort=cord_h|0xf0; /輸出當前列線值 cord_l=KeyPort&0xf
22、0; /讀入行線值 while(KeyPort&0xf0)!=0xf0);/等待松開并輸出 return(cord_h+cord_l);/鍵盤最后組合碼值 return(0xff); /返回該值unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return 0;break;/0 按下相應的鍵顯示相對應的碼值 case 0x7d:return 1;break;/1 case 0x7b:return 2;break;/2 case 0x77:return 3;break;/3 case 0xbe:return 4;break;/4
23、case 0xbd:return 5;break;/5 case 0xbb:return 6;break;/6 case 0xb7:return 7;break;/7 case 0xde:return 8;break;/8 case 0xdd:return 9;break;/9 case 0xdb:return 10;break;/10 case 0xd7:return 11;break;/11 case 0xee:return 12;break;/12 case 0xed:return 13;break;/13 case 0xeb:return 14;break;/14 case 0xe7:
24、return 15;break;/15 default:return 0xff;break; void init() /24c02初始化子程序scl=1;_nop_();_nop_();sda=1;_nop_();_nop_();void respons() /應答unsigned char i;scl=1;_nop_();_nop_();while(sda=1)&&(i<250)i+;scl=0;_nop_();_nop_();void clock() /I2C總線時鐘 unsigned char i=0; scl=1; _nop_();_nop_(); while(s
25、da=1)&&(i<255) i+; scl=0; _nop_();_nop_();void start() /啟動I2C總線sda=1;_nop_();_nop_();scl=1;_nop_();_nop_();sda=0;_nop_();_nop_();scl=0;_nop_();_nop_();void stop() /停止I2C總線sda=0;_nop_();_nop_();scl=1;_nop_();_nop_();sda=1;_nop_();_nop_(); void writebyte(unsigned char a) /寫一個字節(jié)unsigned char
26、 b,tem; tem=a; for(b=0;b<8;b+) tem=tem<<1; scl=0; _nop_(); _nop_(); sda=CY;/temp左移時,移出的值放入了CY中 _nop_(); _nop_(); scl=1;/待sda線上的數(shù)據(jù)穩(wěn)定后,將scl拉高 _nop_(); _nop_(); scl=0; _nop_(); _nop_(); sda=1; _nop_(); nop_();unsigned char readbyte() /讀一個字節(jié) unsigned char i,j,k=0; scl=0; _nop_(); _nop_(); sda=1
27、; for(i=0;i<8;i+) _nop_(); _nop_(); scl=1; _nop_(); _nop_(); if(sda=1) j=1; else j=0; k=(k<<1)|j; scl=0; _nop_();_nop_();return(k);unsigned char read24c02(unsigned char address)/從24c02的地址address中讀取一個字節(jié)數(shù)據(jù) unsigned char date; start(); writebyte(0xa0); clock(); writebyte(address); clock(); sta
28、rt(); writebyte(0xa1); clock(); date=readbyte(); stop(); delay1(100); return(date);void write24c02(unsigned char address,unsigned char info) / 向24c02的address地址中寫入一字節(jié)數(shù)據(jù)info start(); writebyte(0xa0); clock(); writebyte(address); clock(); writebyte(info); clock(); stop(); delay1(5000); /這個延時一定要足夠長,否則會出
29、錯。因為24c02在從sda上取得數(shù)據(jù)后,還需要一定時間的燒錄過程。main() unsigned char num,i,bj,c=0; unsigned char temp6; bit Flag; init(); /初始化24C02 LCD_Init(); /初始化液晶屏 DelayMs(10); /延時用于穩(wěn)定,可以去掉 LCD_Clear(); /清屏 LCD_Write_String(0,0,"welcome"); /寫入第一行信息 old1=read24c02(110); old2=read24c02(111); old3=read24c02(112); old4
30、=read24c02(113); old5=read24c02(114); old6=read24c02(115);while (1) /主循環(huán)num=KeyPro(); /掃描鍵盤if(num!=0xff) /如果掃描是按鍵有效值則進行處理 if(i=0) /輸入是第一個字符的時候需要把改行清空,方便觀看密碼LCD_Write_String(0,1," ");/清除該行if(i<6) /密碼是6位,大于6位時不再輸入按鍵值tempi=num;LCD_Write_Char(i,1,'*'); i+; /輸入數(shù)值累加if(num=11)/重試鍵i=0;L
31、CD_Write_String(0,1," ");if(num=12)i=0;LCD_Write_String(0,1," ");if(bj=0)while(i<=6)num=KeyPro(); /掃描鍵盤if(num!=0xff) /如果掃描是按鍵有效值則進行處理 if(i=0) /輸入是第一個字符的時候需要把改行清空,方便觀看密碼LCD_Write_String(0,1," ");/清除該行if(i<6) /密碼是6位,大于6位時不再輸入按鍵值tempi=num;LCD_Write_Char(i,1,'*
32、9;); i+; /輸入數(shù)值累加if(num=11)/重試鍵i=0;LCD_Write_String(0,1," ");if(num=10)num=0;new1=temp0;new2=temp1;new3=temp2;new4=temp3;new5=temp4;new6=temp5;old1=new1;old2=new2;old3=new3;old4=new4;old5=new5;old6=new6; /新密碼代替舊密碼write24c02(110,old1);write24c02(111,old2);write24c02(112,old3);write24c02(113,
33、old4);write24c02(114,old5);write24c02(115,old6);LCD_Write_String(0,1,"ok ");bj=1; DelayMs(220);DelayMs(220);DelayMs(220);if(close=0)bj=1;i=0;LCD_Write_String(0,1," ");i=0;if(num=10) /數(shù)字10為確認鍵new1=temp0;new2=temp1;new3=temp2;new4=temp3;new5=temp4;new6=temp5;if(i=7)/6位后的按鍵輸入數(shù)值,相當于確認按鍵(任意按鍵即可)i=0; /計數(shù)器復位Flag=1;/先把比較位置1old1=read24c02(110); old2=read24c02(111);old3=read24c02(112);old4=read24c02(113);old5=read24c02(114);ol
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共青科技職業(yè)學院《高級商務英語(一)》2023-2024學年第一學期期末試卷
- 《知識經(jīng)濟時代》課件
- 2022年一級建造師-管理-李娜章節(jié)練習題講義合集(含答案解析)
- 贛南科技學院《大數(shù)據(jù)技術基礎(計算模型)》2023-2024學年第一學期期末試卷
- 贛東學院《翻譯概論》2023-2024學年第一學期期末試卷
- 甘肅中醫(yī)藥大學《土木工程結(jié)構(gòu)試驗與檢測》2023-2024學年第一學期期末試卷
- 語文培訓機構(gòu)課件
- 七年級科學上冊第1章科學入門第3節(jié)科學觀察第1課時教案新版浙教版
- 七年級道德與法治上冊第四單元生命的思考第十課綻放生命之花第1課時感受生命的意義教案新人教版
- 三年級數(shù)學上冊五周長什么是周長說課稿北師大版
- 2024年度員工試用期勞動合同模板(含保密條款)3篇
- 2024-2030年全球與中國汽車音頻DSP芯片組市場銷售前景及競爭策略分析報告
- 機關事業(yè)單位財務管理制度(六篇)
- 2025禮品定制合同范本
- 醫(yī)院消毒隔離制度范文(2篇)
- 2024年01月11026經(jīng)濟學(本)期末試題答案
- 烘干煤泥合同范例
- 人教版六年級上冊數(shù)學第八單元數(shù)學廣角數(shù)與形單元試題含答案
- 2025年“三基”培訓計劃
- 第20課 北洋軍閥統(tǒng)治時期的政治、經(jīng)濟與文化 教案
- 叉車租賃合同模板
評論
0/150
提交評論