标题: 单片机以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁程序问题 [打印本页]
作者: 山有扶苏儿 时间: 2019-5-30 19:53
标题: 单片机以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁程序问题
1.利用单片机设计一个简单的以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁,第一路密码为10101010,第二路密码为11110000。
2.以8个发光二极管作为输出,当输入的密码与第一路密码相同时,第一个发光二极管点亮。当输入的密码与第二路密码相同时,第二个发光二极管点亮。如果输入的密码与两路密码都不同,则8个发光二极管全部点亮。
3.必须先输入第一路密码,然后输入第二路密码才能使第二个发光二极管点亮。
求大佬看看程序哪里错了
- 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
复制代码
作者: suncat0504 时间: 2019-5-30 22:53
按照你的代码
1、第一组密码不匹配的时候,B寄存器没有被设置;到第二组判断密码的时候,如果匹配,其后从B寄存器取值,那么这个值是什么值?
2、如果第一组密码匹配了,输出到8100H后,会继续执行第二组的密码判断。此时A寄存器中是0xFE,第二组密码不匹配,转LOOP。事实上,第一组密码如果匹配了,就没有必要执行第二组密码的判断。当第一组不匹配,执行第二组密码判断的时候,没有必要去做0xFE的判断,因为能走到第二组,第一组铁定不匹配。所以第二组如果匹配,可以直接输出0xFD到8100H。
修改如下
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
;匹配第一组密码,点亮Bit0对应的LED
MOV DPTR,#DATA_OUT
MOV A,#0FEH
MOVX @DPTR,A
SJMP LOOP
LOOP1:
CJNE A,#11110000B,LOOP2
;匹配第一组密码,点亮Bit1对应的LED
MOV A,#0FDH
MOV DPTR,#DATA_OUT
MOVX @DPTR,A
SJMP LOOP
LOOP2:
;第一、二租密码都不匹配,点亮所有LED
MOV A,#00H
MOV DPTR,#DATA_OUT
MOVX @DPTR,A
SJMP LOOP
作者: 山有扶苏儿 时间: 2019-5-31 07:29
为啥用到这在个电路上没法实现啊?是画错了么?
-
$4GSLC(N`LAXWHQYWC{FVT1.png
(49.29 KB, 下载次数: 41)
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |