P0口的2个扩展口作为段控口和位控口,通过使用P2.6和P2.7对SN74HC573芯片的使能。P3.2(INT0)作为按钮输入口构成一个“0#~#7”的8个按钮和8个LED的显示按钮电路,系统复位时,显示“HELLO-- ”。请写出基于at89c51的汇编代码
时间: 2023-12-10 13:39:46 浏览: 282
以下是基于AT89C51的汇编代码:
```
ORG 0H
MOV SP, #0FFH ; 初始化栈指针
LJMP MAIN ; 跳转到主程序
ORG 0030H
MAIN:
MOV A, #0FFH ; 设置全局中断
MOV IE, A
MOV A, #00000000B ; 初始化P0口为输出
MOV P0, A
MOV A, #00000011B ; 初始化P2.6和P2.7为输出
MOV P2, A
MOV A, #00000100B ; 初始化P3.2为输入
MOV P3, A
INIT:
MOV A, #00000000B ; 初始化LED显示为"HELLO-- "
MOV P0, A
MOV A, #00110000B
MOV P2, A
LOOP:
JNB P3.2, $ ; 等待按钮按下
CALL DELAY ; 延时消除抖动
MOV A, P3 ; 读取按钮状态
ANL A, #00000111B ; 取低3位
CJNE A, #00000001B, BUTTON2 ; 判断哪个按钮被按下
MOV A, #01111111B ; 按钮1对应的LED亮
MOV P0, A
SJMP LOOP
BUTTON2:
CJNE A, #00000010B, BUTTON3 ; 判断哪个按钮被按下
MOV A, #10111111B ; 按钮2对应的LED亮
MOV P0, A
SJMP LOOP
BUTTON3:
CJNE A, #00000011B, LOOP ; 判断哪个按钮被按下
MOV A, #11011111B ; 按钮3对应的LED亮
MOV P0, A
SJMP LOOP
DELAY:
MOV R1, #20 ; 延时计数器
DELAY_LOOP:
NOP
DJNZ R1, DELAY_LOOP
RET
END
```
该代码实现了一个基于AT89C51的8个按钮和8个LED的显示按钮电路,其中P0口的2个扩展口作为段控口和位控口,通过使用P2.6和P2.7对SN74HC573芯片的使能。P3.2(INT0)作为按钮输入口。系统复位时,显示“HELLO-- ”。当按钮被按下时,相应的LED会亮起来,其他LED则熄灭。其中,DELAY子程序用于延时消除抖动。
阅读全文