以下是使用MCS-51的P0口控制八个发光二极管LED,相邻四个二极管为一组,使两组每隔1s交替发光一次的程序:

ORG 0H
    MOV P0, #0FH ; 初始化P0口为输出,初始状态两组LED均不亮
LOOP:
    MOV A, #0FFH ; 将A寄存器赋值为0FFH
    ACALL DELAY ; 延时1s
    MOV P0, #0FH ; 两组LED均不亮
    MOV A, #0FH ; 将A寄存器赋值为0FH
    ACALL DELAY ; 延时1s
    MOV P0, #F0H ; 第一组LED亮,第二组LED不亮
    MOV A, #0FFH ; 将A寄存器赋值为0FFH
    ACALL DELAY ; 延时1s
    MOV P0, #0FH ; 两组LED均不亮
    MOV A, #0FH ; 将A寄存器赋值为0FH
    ACALL DELAY ; 延时1s
    SJMP LOOP ; 跳转到LOOP标签处,周而复始

DELAY:
    MOV R7, #30H ; 将R7寄存器赋值为30H
DELAY_LOOP:
    MOV R6, #255 ; 将R6寄存器赋值为255
DELAY_LOOP1:
    MOV R5, #255 ; 将R5寄存器赋值为255
DELAY_LOOP2:
    DJNZ R5, DELAY_LOOP2 ; R5减1,若不为0则跳转到DELAY_LOOP2标签处
    DJNZ R6, DELAY_LOOP1 ; R6减1,若不为0则跳转到DELAY_LOOP1标签处
    DJNZ R7, DELAY_LOOP ; R7减1,若不为0则跳转到DELAY_LOOP标签处
    RET ; 返回调用DELAY子程序的指令处

以上程序中,DELAY子程序用来实现延时,即程序中的1s延时。在主程序中,先将P0口初始化为输出,并将P0口赋值为0FH,即两组LED均不亮。然后进入一个循环,先延时1s,再将P0口赋值为F0H,即第一组LED亮,第二组LED不亮,再延时1s,将P0口赋值为0FH,即两组LED均不亮,再延时1s,将P0口赋值为F0H,周而复始。这样就实现了两组LED每隔1s交替发光一次的效果

使用MCS-51的P0口控制八个发光二极管LED相邻四个二极管为一组使两组每隔1s交替发光一次周而复始编写程序

原文地址: https://www.cveoy.top/t/topic/fHmt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录