版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機(jī)課程設(shè)計(jì)說明書</p><p> 2008 級 電子信息工程 專業(yè) 0813083 班級</p><p> 題 目 基于單片機(jī)的數(shù)字密碼鎖設(shè)計(jì)</p><p> 學(xué) 號 </p><p> 數(shù)字密碼鎖的基本原理</p><p> 1.1 設(shè)
2、計(jì)要求及基本實(shí)現(xiàn)原理</p><p> 密碼鎖設(shè)計(jì)要求如下:</p><p> 數(shù)字密碼鎖能夠設(shè)置4位數(shù)字密碼;</p><p> 輸入密碼正確顯示”O(jiān)N”,輸入錯誤顯示”O(jiān)FF”;</p><p> 密碼初始值為“8888”;</p><p> 輸入原密碼正確可以修改密碼。</p><p
3、> 根據(jù)設(shè)計(jì)要求,在設(shè)計(jì)時采用89C52單片機(jī)作為核心器件,利用C語言作為開發(fā)源程序。四位數(shù)字密碼在硬件上由4位LED數(shù)碼顯示器顯示,單片機(jī)采取動態(tài)顯示方式控制數(shù)碼顯示管,可同時顯示4位數(shù)字,用4個三極管驅(qū)動4位LED顯示器;由單片機(jī)內(nèi)部程序可使得密碼鎖輸入密碼正確顯示”O(jiān)N”,輸入錯誤顯示”O(jiān)FF”;開辟4個存儲單元用于存儲4位密碼,通過2×4的矩陣式按鍵鍵盤和相關(guān)程序可實(shí)現(xiàn)密碼鎖密碼初始值為“8888”,并且輸入原
4、密碼正確可以修改密碼的功能。</p><p> 1.2 系統(tǒng)構(gòu)成框圖</p><p> 按照系統(tǒng)設(shè)計(jì)的要求和功能,可以將系統(tǒng)分為主控模塊、按鍵掃描模塊、蜂鳴器及LED燈、電源電路、復(fù)位電路、晶振電路、驅(qū)動電路幾個模塊。如圖1.1所示,主控模塊采用89C52單片機(jī)。</p><p> 圖1.1 基于89C52單片機(jī)的密碼鎖組成模塊圖</p>&l
5、t;p> 數(shù)字密碼鎖的硬件設(shè)計(jì)</p><p><b> 2.1 電路原理圖</b></p><p> 系統(tǒng)硬件電路圖如圖2.1所示,P3口接密碼按鍵,提示音由P3.7輸出,晶振頻率為12MHz,Q1~Q4控制4位數(shù)碼顯示器。</p><p> 限于篇幅,電路原理圖中多出采用網(wǎng)絡(luò)標(biāo)號表示元件之間的連接。</p>&l
6、t;p> 圖2.1 數(shù)字密碼鎖原理圖</p><p> 2.2 電子線路CAD軟件生成的PCB圖</p><p> 如圖2.2所示,考慮到打印的示圖效果,印制電路板未經(jīng)過覆銅處理。</p><p> 圖2.2 電路原理圖生成印制電路板圖</p><p><b> 2.3 元器件列表</b></p&
7、gt;<p> 數(shù)字密碼鎖的軟件設(shè)計(jì)</p><p> 3.1 程序基本流程圖</p><p> 圖3.1 數(shù)字密碼鎖程序流程圖</p><p><b> 3.2 源程序</b></p><p> /*原始密碼8888*/</p><p> #include<r
8、eg52.h></p><p> #include <intrins.h></p><p> //void delay(void);//按鍵銷抖延時</p><p> //void keyscan(void);//鍵盤掃描</p><p> //bit pwcmp(void);//密碼比較</p>&l
9、t;p><b> /*數(shù)碼管表格*/</b></p><p> unsigned char code dis_code[14]={0xc0,0xf9,0xa4,0xb0,// 0, 1, 2, 3</p><p> 0x99,0x92,0x82,0xf8,0x80,0x90, 0xbf,0xc8,0x8e,0xff};// 4, 5, 6, 7, 8,
10、9,-, on ,off</p><p> unsigned char data dis_index;</p><p> unsigned char data dis_digit;//字位</p><p> unsigned char data dis_buf[4];//字形碼緩沖區(qū)</p><p> unsigned char da
11、ta count; //密碼位計(jì)數(shù)</p><p> unsigned char data pw[4]; //密碼存儲區(qū)</p><p> unsigned char data pwin[4]; //輸入密碼存儲區(qū)</p><p> bit showflag; //數(shù)碼管顯示</p><p> bit updataf
12、lag; //更改密碼標(biāo)志,updataflag=1時,輸入密碼存入pw[]</p><p> bit pwflag; //密碼正確</p><p> void display(unsigned char i)</p><p><b> {</b></p><p><b> P2=0xfe;&l
13、t;/b></p><p> P0=dis_code[i];</p><p><b> }</b></p><p> /*功能:延時子程序*/</p><p> void delay(void)</p><p><b> {</b></p>&l
14、t;p> unsigned char i,j;</p><p> for(i=0;i<200;i++)</p><p> for(j=0;j<250;j++);</p><p><b> }</b></p><p> /*函數(shù)功能:密碼比較子程序*/</p><p>
15、 void pwcmp(void)</p><p><b> {</b></p><p> unsigned char j;</p><p> for (j=0;j<4;j++)</p><p><b> {</b></p><p> if (pw[j]==p
16、win[j])</p><p><b> pwflag=1;</b></p><p><b> else</b></p><p> {pwflag=0;j=4;}</p><p><b> }</b></p><p> if (count<
17、;4)//密碼小于4位,直接顯示OFF</p><p> {pwflag=0;count=4;}</p><p> if (pwflag==1)</p><p> {dis_buf[0]=dis_code[11];</p><p> dis_buf[1]=dis_code[0];</p><p> dis_b
18、uf[2]=dis_code[13];</p><p> dis_buf[3]=dis_code[13];</p><p><b> }</b></p><p><b> else</b></p><p> {dis_buf[0]=dis_code[12];</p><p
19、> dis_buf[1]=dis_code[12]; </p><p> dis_buf[2]=dis_code[0]; </p><p> dis_buf[3]=dis_code[13]; </p><p> } </p><
20、p> } </p><p> /*函數(shù)功能:鍵盤掃描子程序*/ </p><p> void keyscan(void) </p><p> { </p><p>
21、; unsigned char n,j; </p><p> //掃描第一行 </p><p> P3=0xfe; </p><p> n=P3; </p><p> n
22、&=0xf0; </p><p> if(n!=0xf0) </p><p> { </p><p> delay(); </p><p> P3=0
23、xfe; </p><p> n=P3; </p><p> n&=0xf0; </p><p> if(n!=0xf0) </p><p> {
24、 </p><p> switch(n) </p><p><b> {</b></p><p> case(0xb0):</p><p> if (count<4)</p><p><b> { </b></p>
25、<p> dis_buf[count]=dis_code[8];</p><p> if (updataflag==1) //按下修改密碼鍵</p><p> pw[count]=0; </p><p><b> else</b></p><p> pwin[count]=0;<
26、;/p><p><b> count++;</b></p><p><b> delay();</b></p><p><b> }</b></p><p><b> break;</b></p><p> case(0x70
27、):</p><p> if (count<4)</p><p><b> {</b></p><p> dis_buf[count]=dis_code[8];</p><p> if (updataflag==1) //按下修改密碼鍵</p><p> pw[count]=3;
28、 </p><p><b> else</b></p><p> pwin[count]=3;</p><p><b> count++;</b></p><p><b> delay();</b></p><p><b&g
29、t; }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b&g
30、t; //掃描第二行</b></p><p><b> P3=0xfd;</b></p><p><b> n=P3;</b></p><p><b> n&=0xf0;</b></p><p> if(n!=0xf0)</p>&l
31、t;p><b> {</b></p><p><b> delay();</b></p><p><b> P3=0xfd;</b></p><p><b> n=P3;</b></p><p><b> n&=0xf0;
32、</b></p><p> if(n!=0xf0)</p><p><b> {</b></p><p><b> switch(n)</b></p><p><b> {</b></p><p> case(0xb0):</
33、p><p><b> {</b></p><p> updataflag=1;</p><p> for (j=0;j<4;j++)</p><p> dis_buf[j]=dis_code[10];</p><p><b> count=0;</b></p
34、><p> pwin[0]=0;</p><p> pwin[1]=0;</p><p> pwin[2]=0;</p><p> pwin[3]=0;</p><p><b> delay();</b></p><p><b> }</b>&
35、lt;/p><p><b> break;</b></p><p> case(0x70):</p><p> if (count<4)</p><p> { dis_buf[count]=dis_code[8];</p><p> if (updataflag==1)//按下修改密碼
36、鍵</p><p> pw[count]=2; </p><p><b> else</b></p><p> pwin[count]=2;</p><p><b> count++;</b></p><p><b> delay();&l
37、t;/b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }&l
38、t;/b></p><p> /*函數(shù)功能:主程序*/</p><p> void main(void)</p><p><b> {</b></p><p> unsigned char j;</p><p><b> P2=0x0;</b></p&
39、gt;<p> TMOD=0x11;</p><p> TH0 = 0xFC;</p><p> TL0 = 0x17;</p><p><b> TR0=1;</b></p><p><b> ET0=1;</b></p><p><b>
40、 EA=1;</b></p><p> count=0; //初始沒有輸入密碼</p><p> updataflag=0;</p><p><b> pwflag=0;</b></p><p> dis_digit = 0xfe;</p><p> dis_inde
41、x = 0;</p><p> pw[0]=8; //初始密碼8888</p><p><b> pw[1]=8;</b></p><p><b> pw[2]=8;</b></p><p><b> pw[3]=8;</b></p><p>
42、; showflag=1; //打開數(shù)碼管顯示</p><p> for (j=0;j<4;j++)</p><p> dis_buf[j]=dis_code[10];</p><p><b> while(1)</b></p><p><b> {</b></p>
43、<p> keyscan();</p><p><b> } </b></p><p><b> }</b></p><p> void timer0() interrupt 1</p><p> // 定時器0中斷服務(wù)程序, 用于數(shù)碼管的動態(tài)掃描</p>&l
44、t;p> // dis_index --- 顯示索引, 用于標(biāo)識當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量</p><p> // dis_digit --- 位選通值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, 如等于0xfe時,選通P2.0口數(shù)碼管</p><p> // dis_buf --- 顯示緩沖區(qū)基地址</p><p><b> {&l
45、t;/b></p><p> TH0 = -2000/256;</p><p> TL0 = -2000%256;</p><p> P2 = 0xff;// 先關(guān)閉所有數(shù)碼管</p><p> P0 = dis_buf[dis_index];// 顯示代碼傳送到P0口</p><p>
46、; P2 = dis_digit; </p><p> dis_digit = _crol_(dis_digit,1);//位選通值左移, 下次中斷時選通下一位數(shù)碼管</p><p> dis_index++;</p><p> dis_index &= 0x03;// 數(shù)碼管全部掃描一遍,回到第一個開始下次掃描</p&
47、gt;<p> if (dis_digit == 0xef)</p><p> { dis_digit = 0xfe;</p><p><b> }</b></p><p><b> }</b></p><p><b> 四. 課程設(shè)計(jì)總結(jié)</b>&l
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--密碼鎖
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)---密碼鎖
- 密碼鎖單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---數(shù)字密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---數(shù)字密碼鎖
- 單片機(jī)課程設(shè)計(jì)-數(shù)字密碼鎖
- 單片機(jī)課程設(shè)計(jì)電子密碼鎖
- 51單片機(jī)課程設(shè)計(jì)---密碼鎖
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)---電子密碼鎖報(bào)告
- 課程設(shè)計(jì)報(bào)告---單片機(jī)實(shí)現(xiàn)密碼鎖
- 單片機(jī)課程設(shè)計(jì)---多功能密碼鎖
- 單片機(jī)課程設(shè)計(jì)--門禁電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)----電子密碼鎖報(bào)告
評論
0/150
提交評論