标题: 单片机以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁程序问题 [打印本页]

作者: 山有扶苏儿    时间: 2019-5-30 19:53
标题: 单片机以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁程序问题
1.利用单片机设计一个简单的以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁,第一路密码为10101010,第二路密码为11110000。
2.以8个发光二极管作为输出,当输入的密码与第一路密码相同时,第一个发光二极管点亮。当输入的密码与第二路密码相同时,第二个发光二极管点亮。如果输入的密码与两路密码都不同,则8个发光二极管全部点亮。
3.必须先输入第一路密码,然后输入第二路密码才能使第二个发光二极管点亮。

求大佬看看程序哪里错了
  1. DATA_IN EQU  8000H
  2. DATA_OUT EQU  8100H

  3. ORG    0100H
  4. MOV A,#0FFH
  5. MOV DPTR,#DATA_OUT
  6. MOVX @DPTR,A
  7. LOOP:
  8. MOV DPTR,#DATA_IN
  9. MOVX A,@DPTR

  10. CJNE A,#10101010B,LOOP1
  11. MOV DPTR,#DATA_OUT
  12. MOV A,#0FEH
  13. MOV B,A
  14. MOVX @DPTR,A
  15. LOOP1:
  16. CJNE A,#11110000B,LOOP
  17. MOV A,B
  18. CJNE A,#0FEH,LOOP
  19. MOV DPTR,#DATA_OUT
  20. MOV A,#0FDH
  21. ANL A,B
  22. MOVX @DPTR,A
  23. SJMP LOOP

  24. 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)

$4GSLC(N`LAXWHQYWC{FVT1.png





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1