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