宿舍安全系統(tǒng)單片機(jī)課程設(shè)計(jì)說明書
《宿舍安全系統(tǒng)單片機(jī)課程設(shè)計(jì)說明書》由會員分享,可在線閱讀,更多相關(guān)《宿舍安全系統(tǒng)單片機(jī)課程設(shè)計(jì)說明書(15頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 接口課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告 宿舍安全系統(tǒng)設(shè)計(jì)報(bào)告 一 .實(shí)驗(yàn)?zāi)康募耙?目的:結(jié)合一個實(shí)際的接口技術(shù)問題在實(shí)驗(yàn)臺上編程模擬實(shí)現(xiàn)。 要求: 結(jié)合實(shí)際應(yīng)用,設(shè)計(jì)一微機(jī)應(yīng)用系統(tǒng),要求該系統(tǒng)綜合應(yīng)用并行接口、串行接口、其它接口(定時器接口、中斷接口、模擬接口可選)、編制對應(yīng)的程序,實(shí)現(xiàn)主控中心微機(jī)與下位機(jī)遠(yuǎn)距離傳送以及遠(yuǎn)程控制或監(jiān)測功能。 二 .系統(tǒng)功能 本系統(tǒng)是用來驗(yàn)證進(jìn)入宿舍人員的身份的。用戶從下位機(jī)刷卡,并錄入用戶名和密碼。下位機(jī)分別將用戶名和密碼發(fā)送給主控機(jī),主控機(jī)驗(yàn)證之后,發(fā)送相應(yīng)的反饋信息給下位機(jī)。只有 當(dāng)用戶名和密碼都被確認(rèn),用戶身份才合法。合法時下位機(jī)控制發(fā)光部件逐個亮燈提示,不合法時則下
2、位機(jī)控制發(fā)聲部件鳴聲警報(bào)。 三 .系統(tǒng)設(shè)計(jì) 1. 系統(tǒng)硬件由主控機(jī)(其中一臺微機(jī))、下位機(jī)(另一臺位微機(jī))和執(zhí)行部件組成。主控機(jī)與下位機(jī)通過串行通信線連接。 2. 執(zhí)行部件:由接口電路等組成,將接收的數(shù)據(jù)送入到下位機(jī)或?qū)⑾挛粰C(jī)輸出的數(shù)據(jù)送到執(zhí)行部件。 3. 下位機(jī):與主控機(jī)通信,控制執(zhí)行部件。 4主控機(jī):與所有下位機(jī)進(jìn)行數(shù)據(jù)交換,必要時需建數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)處理等。 5主控機(jī)程序:串行( RS232/RS485)通信程 序,數(shù)據(jù)處理程序等。 6下位機(jī)程序:串行( RS232/RS485)通信程序,執(zhí)行部件控制程序。 系統(tǒng)接口框圖見下頁所示: 下圖中, 8255 是用來進(jìn)行下位機(jī)控制部件的接口單元
3、。 A 口的 8 個引腳和控制板上的 8個顯示燈相連,其輸出決定燈的狀態(tài); B 口 8 個引腳和控制板上的撥碼開關(guān)的 8 位相連,編碼開關(guān)的狀態(tài)可由 B 口讀入下位機(jī); C 口的 PC0,PC1,PC3 分別和控制板上的 SW1,SW2,S24 相連,可由下位機(jī)讀入各開關(guān)的狀態(tài), PC6 則和喇叭相連,由 PC6 輸出方波控制喇叭發(fā)聲。 四程序設(shè)計(jì) 本次課程設(shè)計(jì)的過程中,我主要負(fù)責(zé)下位機(jī)的程序的編寫,以及導(dǎo)線在實(shí)驗(yàn)臺上的連接這兩部分的程序設(shè)計(jì)工作。 系統(tǒng)的模塊框圖由系統(tǒng)設(shè)計(jì)的內(nèi)容可知,即 8255 芯片以上的部分是本系統(tǒng)的通訊模塊框圖,以下的部分為本程序的功能模塊框圖。 系統(tǒng)的程序設(shè)計(jì)是緊密圍
4、繞系統(tǒng)功能進(jìn)行的,程序要實(shí)現(xiàn)的功能就是系統(tǒng)的功能。 流程框圖如下: 1主控機(jī)程序流程圖 程序設(shè)計(jì)過程中,為了模擬用戶的刷卡進(jìn)入,讓下位機(jī)去測試控制板上的開關(guān) sw4,其按下表示有用戶刷卡進(jìn)入,這時就可以發(fā)送插卡信號給主控機(jī), 下圖中“接收用戶插卡信號”就是指這個信號。 主控機(jī) 8251 RS232 RS232 8251 下位機(jī) 8255 A 口 B 口 C 口 顯示燈 sw1,sw2,sw4 和 喇叭 開關(guān) 總線 總線 2下位機(jī)程序流程圖 下位機(jī)部分需要操作控制板,這里要用到控制板上的 8 位編碼開關(guān),以及開關(guān) sw1, sw2,sw4。按下 sw4 表示用戶插卡進(jìn)入,然后撥動控制板上的編碼開
5、關(guān),設(shè)置用戶名編碼,按下sw1 發(fā)送給主控機(jī),若被主控機(jī)確認(rèn)無誤,則撥動控制板上的編碼開關(guān)設(shè)置密碼,再按下 sw2發(fā)送給主控機(jī),等待主控機(jī)確認(rèn)。 正確情況下的燈亮很好控制,只要 A 口輸出數(shù)據(jù)到燈的引腳,再設(shè)計(jì)一段程序控制燈的閃爍方式即可。喇叭的發(fā)聲 要說明的是,此處并不是用 8253 的 out 端輸出方波來使之發(fā)聲,而是將 C 口的 PC6 交替置位和復(fù)位產(chǎn)生方波,使之發(fā)聲的。 開始 按鍵? 結(jié)束 接收用戶插卡信號 合法? 發(fā)確認(rèn)信號 接收用戶密碼信息 發(fā)確認(rèn)信號 接收用戶名信息 正確? 合法? 發(fā)確認(rèn)信號 提示用戶可以進(jìn)入 初始化 提示用戶名錯誤 發(fā)否認(rèn)信號 提示密碼錯誤 發(fā)否認(rèn)信號 提
6、示卡非法 Y Y Y Y N N N N 3.主控機(jī)源程序 ;每次驗(yàn)證用戶名和密碼之前,都有退出提示,即 3 秒鐘內(nèi)按任意鍵退出,此時 ;按任意鍵方可退出 data segment data51 equ 308h ;8251A 數(shù)據(jù)口 ctr151 equ 309h ;8251A 命令 /狀態(tài)口 defuser db 65h,81h,24h,37h,02ah,54h ;依次為各用戶名 defpwd db 20h,17h,34h,25h,04ch,44h ;依次為各用戶對應(yīng)的密碼 userno dw 6 ;用戶數(shù)目 YN db 0 ;發(fā)送緩存 user db 0 ;存放接收的用戶名 開始 按鍵?
7、 結(jié)束 發(fā)送用戶插卡信號 接收 確認(rèn)信號 合法? 發(fā)用戶密碼信息 接收確認(rèn)信號 發(fā)送用戶名信息 接收確認(rèn)信號 正確? 合法? 提示用戶可以進(jìn)入 燈亮 初始化 聲音報(bào)警 提示用戶名錯誤 接收否認(rèn)信號 聲音報(bào)警 提示密碼錯誤 接收否認(rèn)信號 提示卡非法 Y Y Y Y N N N N pwd db 0 ;存放接收的密碼 t dw 0 ;延時初值 bufb db 0ah,0dh,The domitory system is running.!$ bufu db 0ah,0dh,username(4 characters):$ ;接收用戶名提示 bufp db 0ah,0dh,password(6 ch
8、aracters):$ ;接收密碼提示 bufr db 0ah,0dh,You can get in!$ ;正確提示 bufus db 0ah,0dh,Error username!$ ;用戶名錯誤提示 bufpd db 0ah,0dh,Error password!$ ;密碼錯誤提示 buferr db 0ah,0dh,Can not identify the card!$ ;不可識別的卡 bufexit db 0ah,0dh,Press any key within 3 seconds to exit!$ data ends stack segment stack db 200 dup(0
9、) stack ends code segment assume cs:code,ds:data,ss:stack hh macro ;回車換行的宏 mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h endm int51 proc near ;8251A 初始化子程 mov dx,ctr151 ;8251A 命令口 mov al,0 ;空操作 out dx,al mov al,40h ;內(nèi)部復(fù)位 out dx,al mov al,4Eh ;8251A 方式命令 out dx,al mov al,27h ;8251A 工作命令 out
10、 dx,al ret int51 endp delay1 proc ;延時子程 1 push bx mov bx,t dl1: dec bx jnz dl1 pop bx ret delay1 endp quit proc ;3 秒鐘之內(nèi)按任意鍵退出程序 push cx lea dx,bufexit mov ah,9 int 21h mov cx,05fffh qxx: cmp cx,0 je qx mov ah,1 ;檢測是否有鍵按下,有則退出 int 16h jnz qnext mov t,0ffffh call delay1 dec cx jmp qxx qnext: mov ah,4c
11、h int 21h qx: pop cx ret quit endp send macro a;發(fā)送一個字符的宏,首先必須將要發(fā)送的字符送入變量 YN mov dx,ctr151 a: in al,dx test al,01 ;發(fā)送準(zhǔn)備好? TXRDY=1? jz a ;未準(zhǔn)備好,則等待 mov dx,data51 ;已準(zhǔn)備好,則發(fā)送 Y 給下位機(jī) mov al,YN out dx,al endm receive macro b ;接收一個字符的宏 ,接收到 al b: mov dx,ctr151 ;檢測接收準(zhǔn)備好沒 in al,dx test al,02 ;接收數(shù)據(jù)準(zhǔn)備好? RXRDY=1?
12、 jz b ;未準(zhǔn)備好則繼續(xù)檢測 mov dx,data51;已準(zhǔn)備好,即有數(shù)據(jù)傳送過來,則接收 1 個字符 in al,dx endm begin: mov ax,data mov ds,ax call int51 ;調(diào)用 8251A 子程序,初始化 8251A k: call quit ;延時 3 秒退出 hh lea dx,bufb ;系統(tǒng)提示 mov ah,9 int 21h receive o ;接收插卡信號 cmp al,O jne error mov YN,Y ;發(fā)送卡確認(rèn)信息 send yyy lea dx,bufu ;用戶名提示信息 mov ah,9 int 21h mov
13、al,0 receive a ;接收一個字符,用戶信息 mov user,al ;保存接收的用戶信息 mov dl,user ;顯示接收的字符 mov ah,02h int 21h jmp cmpuser error: lea dx,buferr ;無法識別的卡 mov ah,9 int 21h hh jmp k over: mov ax,4c00h int 21h cmpuser: mov al,user lea si,defuser ;取用戶名數(shù)組的首地址 mov cx,userno ;取用戶數(shù)目 cu: cmp cx,0 je sendnu cmp al,si je sy ;和某一個用戶
14、名相等則發(fā)送 Y 確認(rèn)信號 inc si dec cx jmp cu sy: push si ;保存該用戶名的地址 mov YN,Y send y lea dx,bufp ;密碼提示信息 mov ah,9 int 21h ;接收密碼 receive pp mov pwd,al ;保存接收的密碼 pop si mov ax,si add ax,userno ;得到該用戶名對應(yīng)的密碼在密碼數(shù)組中的地址 mov si,ax mov bl,si cmp pwd,bl ;和密碼比較 jne sendnp ;不相等則發(fā)送 N,相等則發(fā)送 Y mov YN,Y send yy lea dx,bufr ;顯示
15、正確 mov ah,9 int 21h hh jmp k ;重新開始 sendnp: mov YN,N send n lea dx,bufpd ;顯示密碼錯誤 mov ah,9 int 21h hh jmp k ;重新開始 sendnu: mov YN,N send n lea dx,bufus ;顯示用戶名錯誤 mov ah,9 int 21h hh jmp k ;重新開始 code ends end begin 4.下位機(jī)源程序 ;程序開始時,提示在 3 秒鐘內(nèi)按任意鍵退出,否則繼續(xù)執(zhí)行。若繼續(xù)執(zhí)行,首 ;先按 sw4 表示插卡,再由開 ;關(guān)狀態(tài)設(shè)置用戶名,按 sw1 發(fā)送之,顯示提示信息
16、 ;仍然用開關(guān)狀態(tài)設(shè)置密碼,按 sw2 發(fā)送之,顯示提示 ;信息,回程序開始 . data segment data51 equ 308h ;8251A 數(shù)據(jù)口 ctr151 equ 309h ;8251A 命令 /狀態(tài)口 ctr155 equ 303h ;8255 命令口 ctr155a equ 300h ;8255 數(shù)據(jù)口 a ctr155b equ 301h ;8255 數(shù)據(jù)口 b un db 0 ;存放讀入的用戶名 pd db 0 ;存放讀入的密碼 hh db 0ah,0dh,$ ;回車換行 light db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07f
17、h ;閃爍燈狀態(tài) t dw 0 ;延時初值 f db 0 ;計(jì)數(shù)初始值 j db 0 ;計(jì)數(shù)初始值 YN db 0 bufexit db 0ah,0dh,Press any key within 3 seconds to exit!$ buf1 db 0ah,0dh,Press sw4 instand of inserting the card!$ buf2 db 0ah,0dh,Change the state of the switch to set username! Press sw1 to send it!$ ;提示錄入和發(fā)送用戶名 buf3 db 0ah,0dh,Change th
18、e state of the switch to set password! Press sw2 to send it!$ ;提示錄入和發(fā)送密碼 buf4 db 0ah,0dh,The user is not existed or you have the wrong password!$ ;錯誤提示信息 buf5 db 0ah,0dh,You can get in!$ ;成功登錄信息 data ends stack segment stack DB 200 DUP(0) stack ends code segment assume cs:code,ds:data,ss:stack int51
19、 proc near ;8251A 初始化子程 mov dx,ctr151 ;8251A 命令口 mov al,0 ;空操作 out dx,al mov al,40h ;內(nèi)部復(fù)位 out dx,al mov al,4Eh ;8251A 方式命令 out dx,al mov al,27h ;8251A 工作命令 out dx,al ret int51 endp send macro a;發(fā)送一個字符的宏,首先必須將要發(fā)送的字符送入變量 YN mov dx,ctr151 a: in al,dx test al,01 ;發(fā)送準(zhǔn)備好? TXRDY=1? jz a ;未準(zhǔn)備好,則等待 mov dx,da
20、ta51 ;已準(zhǔn)備好,則發(fā)送一個字符給下位機(jī) mov al,YN out dx,al endm clear macro c ;置口 c 某一位 ,c 為置位控制字 mov dx,303h mov al,c out dx,al endm receive macro b ;接收一個字符的宏 ,接收到 al b: mov dx,ctr151 ;檢測接收準(zhǔn)備好沒 in al,dx test al,02 ;接收數(shù)據(jù)準(zhǔn) 備好? RXRDY=1? jz b ;未準(zhǔn)備好則繼續(xù)檢測 mov dx,data51 ;已準(zhǔn)備好,即有數(shù)據(jù)傳送過來,則接收 1 個字符 in al,dx endm delay1 proc
21、;延時子程 1 push bx mov bx,t dl1: dec bx jnz dl1 pop bx ret delay1 endp delay2 proc ;延時子程 2 push cx mov cx,00fffh xx: cmp cx,0 je x mov t,0ffffh call delay1 dec cx jmp xx x: pop cx ret delay2 endp quit proc ;3 秒鐘之內(nèi)按任意鍵退出程序 push cx lea dx,bufexit mov ah,9 int 21h mov cx,07fffh qxx: cmp cx,0 je qx mov ah,
22、1 ;檢測是否有鍵按下,有則退出 int 16h jnz qnext mov t,0ffffh call delay1 dec cx jmp qxx qnext: mov ah,4ch int 21h qx: pop cx ret quit endp flutter proc ;燈閃爍函數(shù), 8 個燈依次亮,循環(huán) 3 次 lea di,light mov f,3 wyyy: cmp f,0 je wy mov cx,8 l: cmp cx,0 je wyy mov al,di ;燈亮 mov dx,ctr155a out dx,al call delay2 ;延時 2 mov al,0ffh
23、;燈滅 mov dx,ctr155a out dx,al inc di dec cx jmp l wyy: lea di,light dec f jmp wyyy wy: ret flutter endp noise proc ;聲音報(bào)警子函數(shù), 3 次長鳴 push cx mov f,3 jj: cmp f,0 je ejj ;產(chǎn)生一定頻率的方波,使喇叭發(fā)聲 mov cx,00dffh xxkk1: cmp cx,0 je xkk mov dx,ctr155 ;pc6 置 1 mov al,0dh out dx,al mov t,0ffffh call delay1 ;延時 mov dx,c
24、tr155 ;pc6 置 0 mov al,0ch out dx,al mov t,0ffffh call delay1 ;延時 dec cx jmp xxkk1 xkk: call delay2 ;不產(chǎn)生方波,停止發(fā)聲 dec f jmp jj ejj: pop cx ret noise endp begin: mov ax,data mov ds,ax call int51 ;調(diào)用 8251A 子程序,初始化 8251A mov dx,ctr155 ;初始化 8255A mov al,10000011b out dx,al ww: lea dx,hh ;回車換行 mov ah,9 int
25、21h call quit ;延時退出程 序 lea dx,hh ;回車換行 mov ah,9 int 21h lea dx,buf1 ;提示按 sw4 表示插卡 mov ah,9 int 21h ;檢測 sw4 是否按下 clear 07h ;清 sw4 狀態(tài) wait4: mov dx,302 in al,dx ;sw4 按下 ? pc3=0? test al,08h ;否,則繼續(xù)檢測 jnz wait4 ;是則發(fā)送卡插入信號 mov YN,O send o mov al,0 ;接收主控機(jī)反饋信息 receive i cmp al,Y ;確認(rèn)則繼續(xù),否則重新開始 jne ww lea dx
26、,buf2 ;提示設(shè)置用戶名并發(fā)送之 mov ah,9 int 21h ;檢測 sw1 狀態(tài) clear 01h ;清 sw1 狀態(tài) wait1: mov dx,302h ;檢測 sw1 是否按下 in al,dx test al,01h ;sw1 按下 ? pc0=0? jnz wait1 ;否則繼續(xù)檢測 ;按下則讀開關(guān)狀態(tài)(口 b),得到用戶名 mov dx,ctr155b ;讀 b 口 in al,dx mov un,al ;保存用戶名 mov YN,al ;發(fā)送用戶名 send us jmp receiv over: mov ax,4c00h ;程序退出 int 21h ;接收主控機(jī)反
27、饋信息 receiv: receive y cmp al,Y ;接收的字符和 Y比較 jne wrong ;不合法就提示錯誤信息 lea dx,buf3 ;合法則提示設(shè)置密碼并發(fā)送之 mov ah,09h int 21h clear 02h ;清 sw2 狀態(tài) wait2: mov dx,302h ;檢測 sw2 是否按下 in al,dx test al,02h ;sw2 按下 ? pc1=0? jnz wait2 ;否則繼續(xù)檢測 ;按下則讀開關(guān)狀態(tài)(口 b),得到密碼 mov dx,ctr155b ;讀口 b in al,dx mov pd,al ;保存密碼 mov YN,al ;發(fā)送密碼
28、 send pd ;接收主控機(jī)反饋回來的信息 receive yy cmp al,Y ;接收的字符和 Y比較 jne wrong ;不相等就提示錯誤信息,相等則提示登錄成功 lea dx,buf5 ;提示登錄成功 mov ah,9 int 21h ;此處亮燈提示 call flutter jmp ww ;準(zhǔn)備第二次刷卡 wrong: lea dx,buf4 ;顯示錯誤提示信息 mov ah,9 int 21h ;此處聲音報(bào)警 call noise jmp ww ;準(zhǔn)備第二次刷卡 code ends end begin 五心得體會 此次程序設(shè)計(jì)我們小組同心協(xié)力,通過三天多的時間,終于完成了接口的
29、課程設(shè)計(jì)。通過這個課程設(shè)計(jì),我真正掌握了 8255, 8251 等芯片的功能和使用方法,以前在課堂上一知半解的知識通過這次課程設(shè)計(jì)都徹底弄清楚了。通過寫 8255, 8251 等芯片的命令口,可以使得各種芯片工作在不同的狀態(tài),這可以發(fā)揮這些芯片的使用范圍,特別是撥碼開關(guān)的地方,通過撥碼開關(guān)可以設(shè)置 8255 的 PB 口的值,而這些值可以通過 8251 發(fā)送出去,這就是卡號和車費(fèi)輸入的地方。通過這次課程設(shè)計(jì),我認(rèn)識到了匯編語言的強(qiáng)大功能,匯編語言是計(jì)算機(jī)能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計(jì)算機(jī)所有硬件特性并能直接控制硬件 的唯一語言。但是,匯編語言作為一種低級語言,有他自身無法克服的缺點(diǎn),他的圖形用戶界面效果,遠(yuǎn)遠(yuǎn)不能和 C 語言或者 C語言相提并論,最好的方法是匯編語言和 C/C混合編程,高級語言編程方便簡潔,匯編語言能充分發(fā)揮計(jì)算機(jī)硬件特性并且程序運(yùn)行效率高,二者相結(jié)合,效果勝過單獨(dú)一門語言體現(xiàn)出來的效果。 我還想提一個建議,那就是實(shí)驗(yàn)室最好為我們的控制板提供一本使用說明或指南,這樣我們就可以徹底拋棄控制板的束縛,靈活地從單個接口芯片的功能特性出發(fā),設(shè)計(jì)出更好更精彩的程序。
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級政治人類的需要1
- 2012年秋外研版七年級上冊M7-Unit2
- 121全等三角形
- (人教新課標(biāo))二年級語文上冊課件_語文園地七1
- 二次根式的乘法(教育精品)
- Performances畢業(yè)生電影ppt
- 北師大版數(shù)學(xué)四年級上冊《衛(wèi)星運(yùn)行時間》PPT課件(教育精品)
- 初中物理《力》課件
- 北師大版小學(xué)五年級下冊語文《普羅米修斯的故事》課件PPT2(教育精品)
- 初中思品、歷史復(fù)習(xí)課如何上
- 北京建筑大學(xué)XXXX研究生畢業(yè)答辯
- 北師大版五年級語文上冊《我喜歡》ppt優(yōu)秀課件(教育精品)
- 生物①必修11《從生物圈到細(xì)胞》PPT課件
- 好家風(fēng)伴我成長(完美版)課件
- 2017漁人碼頭大閘蟹執(zhí)行方案-強(qiáng)襲文化