建材秒知道
登录
建材号 > 设计 > 正文

霓虹灯模拟控制器 汇编课程设计

彪壮的战斗机
完美的蜗牛
2022-12-29 11:15:01

霓虹灯模拟控制器 汇编课程设计

最佳答案
潇洒的衬衫
动听的铃铛
2026-04-28 08:57:28

霓虹灯模拟控制器

汇编课程设计

............

摘要

1

前言

2

关键器件和设备

3

设计内容

4

单片机介绍

4.1概述

4.2

单片机内部逻辑结构

4.3引脚功能说明

5

硬件设计

5.1

时钟电路

5.2

复位电路

5.3

主控模块电路设计

6

软件设计

6.1

程序流程图设计

6.2

延时子程序设计

6.3

汇编语言程序

总结

致谢

参考文献

最新回答
有魅力的飞鸟
傻傻的帽子
2026-04-28 08:57:28

data segment

io8255a equ 288H

io8255b equ 289H

io8255c equ 28AH

io8255t equ 28BH

data ends7

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov dx,io8255t 控制端口

mov al,81H 设置8255为A口输出

out dx,al

mov dx,io8255a

mov al,00H 设置8个灯全灭

out dx,al

mo:mov dx,io8255c

in al,dx

cmp al,01h

jz k1

cmp al,02h

jz k2

cmp al,04h

jz k3

jmp theend

k1: jmp l1

k2: jmp l2

k3: jmp l3

l1:

call deng

l2:

mov dx,io8255a

mov al,01h

out dx,al

l3:

mov dx,io8255a

mov al,00h

out dx,al

theend:

mov al,00h

mov dx,io8255a

out dx,al

jmp mo

deng proc

mov dx,io8255a 数据端口

mov al,01H 1号灯

out dx,al

call delay延迟1秒

mov al,04H 3号灯

out dx,al

call delay延迟1秒

mov al,10H 5号灯

out dx,al

call delay延迟1秒

mov al,40H 7号灯

out dx,al

call delay延迟1秒

mov cl,5

return1:mov al,55H 1,3,5,7号灯

out dx,al

call sdelay延迟1秒

mov al,00H

out dx,al

call sdelay延迟1秒

loop return1

mov al,02H 2号灯

out dx,al

call delay延迟1秒

mov al,08H 4号灯

out dx,al

call delay延迟1秒

mov al,20H 6号灯

out dx,al

call delay延迟1秒

mov al,80H 8号灯

out dx,al

call delay延迟1秒

mov cl,5

return2:mov al,0AAH 2,4,6,8号灯

out dx,al

call sdelay延迟1秒

mov al,00H

out dx,al

call sdelay延迟1秒

loop return2

deng endp

delay proc 延迟1秒的子程序

push cx

mov bx,10000

again1:mov cx,2801

wait0:loop wait0

dec bx

jnz again1

pop cx

ret

delay endp

sdelay proc 延迟0.1秒的子程序

push cx

mov bx,1000

again2:mov cx,2801

wait1:loop wait1

dec bx

jnz again2

pop cx

ret

sdelay endp

code ends

end start

魔幻的水壶
失眠的冬天
2026-04-28 08:57:28
本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

-----------------------------------------

功能:显示指定地址(Str_Addr)的字符串

入口:

Str_Addr=字符串地址(要求在数据段)

用法: Output Str_Addr

用法举例:Output PromptStr

Output MACRO Str_Addr

push dx

lea dx,Str_Addr

mov ah,9

int 21h

pop dx

EndM

-----------------------------------------

功能:输出一个字符

入口:dl=要显示的字符

Output_Chr proc Near

push ax

mov ah,02h

int 21h

pop ax

ret

Output_Chr endp

-----------------------------------------

功能:输出回车换行

Output_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Output_CTLF endp

-----------------------------------------

功能:取光标位置

入口:无

出口:DH=行号,DL=列号

GetCursor Proc Near

PUSH AX

PUSH BX

PUSH CX

XOR BX,BX

MOV AH,3

INT 10H

MOV Cursor_Row,DH

MOV Cursor_Col,DL

POP CX

POP BX

POP AX

RET

Cursor_Row DB ?

Cursor_Col DB ?

GetCursor EndP

-----------------------------------------

功能:置光标位置

入口:Cursor_Row=行坐标Cursor_Col: 列坐标)

SetCursor Proc Near

PUSH CX

PUSH BX

PUSH AX

MOV DH,Cursor_Row

MOV DL,Cursor_Col

XOR BX,BX

MOV AH,2

INT 10H

POP AX

POP BX

POP CX

RET

SetCursor EndP

-----------------------------------------

功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码

入口:AL

出口:AL=转换后的ASCII码

AL_ASCII Proc Near

cmp al,10 AL<10?

jb @@To_ASCII AL<10,按数字处理

add al,7 AL>=10,按大写字母处理

@@To_ASCII: add al,'0' 转换成相应的数字或大写字母

ret

AL_ASCII EndP

-----------------------------------------

功能:将AL中的字节数据转换成十六进制显示的ASCII码

入口:AL

出口:AX=转换后的ASCII码

Byte_ASCII Proc Near

push cx

mov cx,4

xor ah,ah 将AH置0

shl ax,cl 将AX左移4位

shr al,cl 将AL右移4位

xchg ah,al

call AL_ASCII 调用子程序,将AL中的值转换成相应的ASCII码

xchg ah,al

call AL_ASCII

xchg ah,al

pop cx

ret

Byte_ASCII EndP

-----------------------------------------

功能:将AL中的字节数据转换成十六进制显示的ASCII码,并在当前光标位置显示

入口:AL

出口:AX=转换后的ASCII码

ByteD_ASCII Proc Near

push dx

push ax

call Byte_ASCII 将AL中的字节数转换成十六进制显示的ASCII码

cmp al,'9'

jbe $+7

mov dl,'0'

call Output_Chr 显示一个字符

mov dl,al

call Output_Chr 显示一个字符

mov dl,ah

call Output_Chr 显示一个字符

mov dl,'H'

call Output_Chr 显示一个字符

pop ax

pop dx

ret

ByteD_ASCII EndP

-----------------------------------------

功能:将AX中的字数据转换成十六进制显示的ASCII码,并在当前光标位置显示

入口:AX

WordD_ASCII Proc Near

push dx

push ax

push ax

xchg ah,al

call Byte_ASCII 将AL中的字节数转换成十六进制显示的ASCII码

cmp al,'9'

jbe $+7

mov dl,'0'

call Output_Chr 显示一个字符

mov dl,al

call Output_Chr 显示一个字符

mov dl,ah

call Output_Chr 显示一个字符

pop ax

call Byte_ASCII 将AL中的字节数转换成十六进制显示的ASCII码

mov dl,al

call Output_Chr 显示一个字符

mov dl,ah

call Output_Chr 显示一个字符

mov dl,'H'

call Output_Chr 显示一个字符

pop ax

pop dx

ret

WordD_ASCII EndP

-----------------------------------------

功能:输入内存单元的段地址或偏移地址

入口参数:无

出口参数:若直接回车(没有输入地址)或地址中含有无效字符,进位标志置位;

否则,进位标志清位,BX=有效地址

Input_Addr Proc Near

lea dx,Buffer 字符串缓冲区地址

mov ah,0ah

int 21h

lea si,Buffer[1] 实际输入的字符数地址

lodsb 读入实际输入的字符数

test al,0ffh

jz @@Invalid

xor bx,bx 有效地址初值

mov cl,al

xor ch,ch

@@Checking: lodsb 读入一个字符

cmp al,'0' 字符<'0'?

jb @@Letter 是,判断是否字母

cmp al,'9' 字符<='9'?

jbe @@Valid 是,累加有效地址

@@Letter: mov ah,al

and ah,0dfh

cmp ah,'A' 字符<'A'?

jb @@Invalid 是,无效字符

cmp ah,'Z' 字符<'Z'?

ja @@Invalid 是,无效字符

@@Valid: and al,0fh

push cx

mov cx,4

shl bx,cl 有效地址左移4位

or bl,al 加上低4位

pop cx

loop @@Checking 下一位

clc 进位标志清位

ret

@@Invalid: stc 进位标志置位

ret

Input_Addr EndP

-----------------------------------------

Segment_Str db 'Please input a segment address(heximal): $'

Offset_Str db 13,10,'Please input a offset address(heximal): $'

Memory_Addr dd ? 内存地址。偏移地址在前、段地址在后

Press_Key db 7,13,10,13,10,'Press any key to exit...$'

Start: push cs

pop ds

push cs

pop es 使数据段、附加段与代码段同段

cld

Output Segment_Str 提示输入段地址

call GetCursor 取光标位置

@@Segment: call SetCursor 置光标位置

call Input_Addr 输入地址

jc @@Segment 若地址无效,重新输入

mov word ptr Memory_Addr[2],bx 保存段地址

Output Offset_Str 提示输入偏移地址

call GetCursor

@@Offset: call SetCursor

call Input_Addr

jc @@Offset

mov word ptr Memory_Addr,bx 保存偏移地址

call Output_CTLF 输出一个回车、换行

call Output_CTLF

mov dl,'['

call Output_Chr

mov ax,word ptr Memory_Addr[2] 取内存单元段地址

call WordD_ASCII 将AX中的字数据转换成十六进制显示的ASCII码,并在当前光标位置显示

mov dl,':'

call Output_Chr

mov ax,word ptr Memory_Addr 取内存单元偏移地址

call WordD_ASCII

mov dl,']'

call Output_Chr

mov dl,'='

call Output_Chr

lds si,Memory_Addr 装入有效地址

lodsb 读入这个内存单元的一个字节

push cs

pop ds

call ByteD_ASCII 将AL中的字节数据转换成十六进制显示的ASCII码

Exit_Key: Output Press_Key

mov ah,1

int 21h

Exit_Proc: mov ah,4ch 结束程序

int 21h

Buffer db 5 段地址、偏移地址输入缓冲区

Code ENDS

END Start 编译到此结束

粗犷的大叔
大胆的冷风
2026-04-28 08:57:28
1.

在屏幕左上角或右下角显示数字电子表,格式为:时:分:秒;

2.

整点报时

1.

功能设计(功能模块及模块图)

2.

要用文字说明各主模块的功能。

3.

详细设计

3.1设计方法:各功能模块主要关键技术的运用,计算公式,实现方法(文字表述)

3.2各功能模块程序的流程图;

3.3本设计的重点、难点及解决方法。

4.

总结(体会)

5.

参考文献

6.

附:源程序。