欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于AT89C51單片機(jī)電子密碼鎖設(shè)計(jì) [打印本頁(yè)]

作者: 山有扶蘇兒    時(shí)間: 2019-5-31 10:52
標(biāo)題: 基于AT89C51單片機(jī)電子密碼鎖設(shè)計(jì)
1.利用單片機(jī)設(shè)計(jì)一個(gè)簡(jiǎn)單的以8位邏輯電平開(kāi)關(guān)K0~K7作為8位密碼輸入,設(shè)兩路密碼鎖,第一路密碼為10101010,第二路密碼為11110000。
2.以8個(gè)發(fā)光二極管作為輸出,當(dāng)輸入的密碼與第一路密碼相同時(shí),第一個(gè)發(fā)光二極管點(diǎn)亮。當(dāng)輸入的密碼與第二路密碼相同時(shí),第二個(gè)發(fā)光二極管點(diǎn)亮。如果輸入的密碼與兩路密碼都不同,則8個(gè)發(fā)光二極管全部點(diǎn)亮。

3.必須先輸入第一路密碼,然后輸入第二路密碼才能使第二個(gè)發(fā)光二極管點(diǎn)亮。
不知道為啥程序輸入進(jìn)去后沒(méi)法實(shí)現(xiàn)上面這些功能,請(qǐng)大佬幫忙看看

DATA_IN EQU  8000H
DATA_OUT EQU  8100H

ORG    0100H
MOV A,#0FFH
MOV DPTR,#DATA_OUT
MOVX @DPTR,A
LOOP:
MOV DPTR,#DATA_IN
MOVX A,@DPTR

CJNE A,#10101010B,LOOP1
MOV DPTR,#DATA_OUT
MOV A,#0FEH
MOV B,A
MOVX @DPTR,A
LOOP1:
CJNE A,#11110000B,LOOP
MOV A,B
CJNE A,#0FEH,LOOP
MOV DPTR,#DATA_OUT
MOV A,#0FDH
ANL A,B
MOVX @DPTR,A
SJMP LOOP
END


電子密碼鎖.png (174.45 KB, 下載次數(shù): 75)

電子密碼鎖.png

作者: 597329015    時(shí)間: 2023-5-29 18:22
經(jīng)過(guò)查看你提供的程序,發(fā)現(xiàn)有一些問(wèn)題:

1.在程序一開(kāi)始,將 A 寄存器設(shè)置為 FFH 后,存儲(chǔ)到 DATA_OUT 地址對(duì)應(yīng)的內(nèi)存中,這樣會(huì)使 8 個(gè)發(fā)光二極管全部點(diǎn)亮。但是,在后面的程序中并沒(méi)有進(jìn)行清零操作,因此需要在程序一開(kāi)始,將 A 寄存器設(shè)置為 00H 或者其他任意值,以保證 8 個(gè)發(fā)光二極管初始狀態(tài)為熄滅。

2.第一個(gè)密碼輸入正確后,程序進(jìn)入了 LOOP1 標(biāo)簽處,但是循環(huán)內(nèi)部沒(méi)有加入等待第二個(gè)密碼輸入的語(yǔ)句。因此程序會(huì)直接跳回 LOOP 標(biāo)簽處,從而導(dǎo)致第二個(gè)密碼輸入無(wú)法進(jìn)行判斷。

3.在第二個(gè)密碼判斷處,需要使用 ANL 指令進(jìn)行按位與操作,并且需要先將 A 寄存器與 B 寄存器進(jìn)行交換,再進(jìn)行 ANL 操作。這樣才能正確的判斷第二個(gè)密碼是否輸入正確。

下面是修改后的代碼:

DATA_IN EQU  8000H
DATA_OUT EQU  8100H

ORG    0100H
MOV A,#00H ; 將 A 寄存器設(shè)置為 00H
MOV DPTR,#DATA_OUT
MOVX @DPTR,A ; 將 A 寄存器存儲(chǔ)到 DATA_OUT 地址對(duì)應(yīng)的內(nèi)存中
LOOP:
MOV DPTR,#DATA_IN
MOVX A,@DPTR

CJNE A,#10101010B,LOOP1
MOV DPTR,#DATA_OUT
MOV A,#0FEH
MOVX @DPTR,A
; 等待第二個(gè)密碼輸入
LOOP2:
MOVX A,@DPTR
CJNE A,#10101010B,LOOP2
MOV B,#0FFH ; 將 B 寄存器設(shè)置為 FFH,準(zhǔn)備進(jìn)行第二個(gè)密碼判斷
SJMP LOOP1
LOOP1:
CJNE A,#11110000B,LOOP
XCH A,B ; 交換 A 和 B 的值
ANL A,#11110000B ; 按位與操作,判斷第二個(gè)密碼是否正確
MOV DPTR,#DATA_OUT
JZ RIGHT_TWO ; 如果按位與結(jié)果為0,則說(shuō)明第二個(gè)密碼輸入正確,跳到 RIGHT_TWO 標(biāo)簽處
MOV A,B
CJNE A,#0FEH,LOOP2 ; 如果第一個(gè)密碼輸入正確,但第二個(gè)密碼輸入不正確,則重新等待第二個(gè)密碼輸入
MOV DPTR,#DATA_OUT
MOV A,#0FDH
MOVX @DPTR,A ; 如果兩個(gè)密碼都不正確,則將 8 個(gè)發(fā)光二極管全部點(diǎn)亮
SJMP LOOP

RIGHT_TWO:
MOV DPTR, #DATA_OUT
MOV A, #0FDH
SWAP A ; 將 A 寄存器高低4位交換
ANL A, #00000011B ; 取出當(dāng)前應(yīng)該點(diǎn)亮的發(fā)光二極管,并將其對(duì)應(yīng)的位設(shè)為0
MOVX @DPTR, A ; 將結(jié)果存儲(chǔ)到 DATA_OUT 地址對(duì)應(yīng)的內(nèi)存中
SJMP LOOP

END




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1