Deepseek生成8088单板机的流水灯程序
摘要:本文介绍了一个基于emu8086编写的8位LED流水灯控制程序,端口地址为800H,程序加载地址为CS:IP=0000:2000。程序实现了多种流水灯效果,包括左右流动、中心汇聚/扩散和全闪效果。通过子程序调用实现不同模式切换,并包含基本延时控制。程序采用循环移位和位操作实现灯效变化,最终生成可执行代码在emu8086环境中运行。该设计展示了8086汇编语言对硬件端口的控制能力。
·
1.Deepseek会话指令
8位LED,端口地址800H,程序加载地址CS:IP 为0000:2000,用emu8086编写一流水灯程序

2.DeppSeek生成的程序
#make_bin#
; BIN is plain binary format similar to .com format, but not limited to 1 segment;
; All values between # are directives, these values are saved into a separate .binf file.
; Before loading .bin file emulator reads .binf file with the same file name.
; All directives are optional, if you don't need them, delete them.
; set loading address, .bin file will be loaded to this address:
#LOAD_SEGMENT=0500h#
#LOAD_OFFSET=0000h#
; set entry point:
#CS=0500h# ; same as loading segment
#IP=0000h# ; same as loading offset
; set segment registers
#DS=0500h# ; same as loading segment
#ES=0500h# ; same as loading segment
; set stack
#SS=0500h# ; same as loading segment
#SP=FFFEh# ; set to top of loading segment
; set general registers (optional)
#AX=0000h#
#BX=0000h#
#CX=0000h#
#DX=0000h#
#SI=0000h#
#DI=0000h#
#BP=0000h#
; add your code here
; ============================================
; 流水灯控制程序
; 控制8位LED,端口地址800H
; 程序加载地址:CS:0000, IP:2000
; 功能:实现多种流水灯效果
; ============================================
PORT_LED EQU 800H ; LED控制端口地址
ORG 2000H ; 设置IP=2000H
START:
; 初始化:关闭所有LED
MOV AL, 0FFH ; 假设高电平灭,低电平亮(可根据实际调整)
CALL OUTPUT_LED
MAIN_LOOP:
; 效果1:从左到右流水(单灯流动)
CALL FLOW_LEFT_TO_RIGHT
; 效果2:从右到左流水
CALL FLOW_RIGHT_TO_LEFT
; 效果3:两边向中间汇聚
CALL FLOW_CENTER_IN
; 效果4:中间向两边扩散
CALL FLOW_CENTER_OUT
; 效果5:全亮全闪
CALL BLINK_ALL
JMP MAIN_LOOP ; 无限循环
; ============================================
; 子程序:向LED端口输出数据
; 输入:AL = 要输出的数据
; ============================================
OUTPUT_LED PROC
MOV DX, PORT_LED
OUT DX, AL
RET
OUTPUT_LED ENDP
; ============================================
; 效果1:从左到右流水(单灯移动)
; ============================================
FLOW_LEFT_TO_RIGHT PROC
PUSH CX
PUSH AX
MOV CX, 8 ; 循环8次
MOV AL, 01111111b ; 初始:最左灯亮(第7位为0)
FLOW_LR_LOOP:
CALL OUTPUT_LED ; 输出到LED
CALL DELAY ; 延时
ROR AL, 1 ; 循环右移:01111111→10111111→11011111...
LOOP FLOW_LR_LOOP
POP AX
POP CX
RET
FLOW_LEFT_TO_RIGHT ENDP
; ============================================
; 效果2:从右到左流水
; ============================================
FLOW_RIGHT_TO_LEFT PROC
PUSH CX
PUSH AX
MOV CX, 8
MOV AL, 11111110b ; 初始:最右灯亮(第0位为0)
FLOW_RL_LOOP:
CALL OUTPUT_LED
CALL DELAY
ROL AL, 1 ; 循环左移:11111110→11111101→11111011...
LOOP FLOW_RL_LOOP
POP AX
POP CX
RET
FLOW_RIGHT_TO_LEFT ENDP
; ============================================
; 效果3:两边向中间汇聚
; ============================================
FLOW_CENTER_IN PROC
PUSH CX
PUSH AX
MOV CX, 4 ; 4个步骤
MOV AL, 01111110b ; 初始:两边亮(第7位和第0位为0)
FLOW_CI_LOOP:
CALL OUTPUT_LED
CALL DELAY_LONG ; 稍长延时
; 修改位模式:01111110→10111101→11011011→11100111
; 先右移左边0位,再左移右边0位
MOV AH, AL
AND AH, 0F0H ; 保留高4位
SHR AH, 1 ; 右移
AND AL, 0FH ; 保留低4位
SHL AL, 1 ; 左移
OR AL, AH ; 合并
LOOP FLOW_CI_LOOP
POP AX
POP CX
RET
FLOW_CENTER_IN ENDP
; ============================================
; 效果4:中间向两边扩散
; ============================================
FLOW_CENTER_OUT PROC
PUSH CX
PUSH AX
MOV CX, 4
MOV AL, 11100111b ; 初始:中间两个亮
FLOW_CO_LOOP:
CALL OUTPUT_LED
CALL DELAY_LONG
; 修改位模式:11100111→11011011→10111101→01111110
MOV AH, AL
AND AH, 0F0H
SHL AH, 1 ; 左移
AND AL, 0FH
SHR AL, 1 ; 右移
OR AL, AH
LOOP FLOW_CO_LOOP
POP AX
POP CX
RET
FLOW_CENTER_OUT ENDP
; ============================================
; 效果5:全亮全闪
; ============================================
BLINK_ALL PROC
PUSH CX
PUSH AX
MOV CX, 5 ; 闪烁5次
BLINK_LOOP:
MOV AL, 00000000b ; 全亮
CALL OUTPUT_LED
CALL DELAY_SHORT
MOV AL, 11111111b ; 全灭
CALL OUTPUT_LED
CALL DELAY_SHORT
LOOP BLINK_LOOP
POP AX
POP CX
RET
BLINK_ALL ENDP
; ============================================
; 延时子程序(基本延时)
; ============================================
DELAY PROC
PUSH CX
PUSH DX
MOV CX, 02H ; 外循环
DELAY_OUTER:
MOV DX, 0FFFFH ; 内循环
DELAY_INNER:
DEC DX
JNZ DELAY_INNER
LOOP DELAY_OUTER
POP DX
POP CX
RET
DELAY ENDP
; ============================================
; 较长延时(用于汇聚/扩散效果)
; ============================================
DELAY_LONG PROC
PUSH CX
PUSH DX
MOV CX, 02H
DELAY_LONG_OUTER:
MOV DX, 0FFFFH
DELAY_LONG_INNER:
DEC DX
JNZ DELAY_LONG_INNER
LOOP DELAY_LONG_OUTER
POP DX
POP CX
RET
DELAY_LONG ENDP
; ============================================
; 较短延时(用于闪烁效果)
; ============================================
DELAY_SHORT PROC
PUSH CX
MOV CX, 0FFFH
DELAY_SHORT_LOOP:
LOOP DELAY_SHORT_LOOP
POP CX
RET
DELAY_SHORT ENDP
DB 55H,55H,55H,55H,55H,55H ;添加Bootloader接受结束标志数据串
; ============================================
; 程序结束
; ============================================
END START
HLT ; halt!
3.拷入Emu8086,编译生成可执行代码



4.下载运行


火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)