找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2364|回复: 2
收起左侧

单片机以8位逻辑电平开关K0~K7作为8位密码输入,设两路密码锁程序问题

[复制链接]
ID:500398 发表于 2019-5-30 19:53 | 显示全部楼层 |阅读模式
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
复制代码


回复

使用道具 举报

ID:500398 发表于 2019-5-31 07:29 | 显示全部楼层
为啥用到这在个电路上没法实现啊?是画错了么?
$4GSLC(N`LAXWHQYWC{FVT1.png
回复

使用道具 举报

ID:517466 发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表