A04基于8086六位数码管秒表Proteus设计,asm
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-13 10:29:18    阅读:14 次   消耗积分:20 分

image.png

A04基于8086六位数码管秒表Proteus设计,asm

用8086汇编语言做一个六位数码管秒表仿真:6位共阳数码管显示时分秒,两个按键控制秒表的暂停和清零。资料包含Proteus仿真文件和完整汇编源码,适合学汇编语言和8253/8255/8259接口实验的同学参考。

一、设计实现功能

本设计功能简介:使用8086芯片和汇编语言设计一个简易秒表,要求以下功能:

1、使用汇编语言编写程序。
2、使用6位共阳数码管显示时钟。
3、使用两个按键控制秒表的暂停和清零,当暂停按键按下的时候秒表暂停,松开的时候秒表开启。当清零按键按下的时候秒表显示清零,按键松开的时候秒表继续显示。

二、资源汇总

1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。
2、程序文件:main.asm汇编源码,以及编译好的main.exe。
3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。

三、设计介绍

拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。

这套设计是经典的"三片接口芯片"组合:8253定时器产生基准脉冲,经8259中断控制器向8086申请中断;8255的A口送段码、B口做位选,驱动6位共阳数码管动态扫描;C口负责读按键和给8253送GATE控制信号。

图1 Proteus仿真总览

仿真原理图

三片芯片的端口分配如下:

芯片端口地址作用
8253控制口0206H写控制字
8253计数器00200H初值0x500
8253计数器10202H初值0x50
8255控制口0106H写控制字
8255A口0100H段码输出
8255B口0102H位选输出
8255C口0104H按键输入 + GATE控制
8259初始化口0304H/0306H中断初始化

显示缓冲BUF共6个字节,和数码管位的对应关系是:BUF秒个位、BUF+1秒十位、BUF+2分个位、BUF+3分十位、BUF+4时个位、BUF+5时十位。时、分、秒的计数值分别存在DAT3、DAT2、DAT1里,显示时先除以10拆出十位和个位,再查段码表送A口。

段码表LEDTAB存的是0~F共16个段码(3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH、77H、7CH、39H、5EH、79H、71H)。因为数码管是共阳的,查表取出的段码要先用NOT指令取反,再送A口。

位选码从B口高6位逐位送出:秒个位11100000B、秒十位11010000B、分个位11001000B、分十位11000100B、时个位11000010B、时十位11000001B。每点亮一位短暂延时后清屏,6位轮流扫描,利用视觉暂留显示完整时钟。

图2 汇编程序源码

程序截图

中断部分:程序先用CLI关中断,把服务程序INTB的入口地址写进中断向量表2号入口(偏移地址8),再向8259送初始化命令字(ICW1=00010011B、ICW2=00000010B、ICW4=00000001B),最后STI开中断。服务程序INTB本身只做一件事:向20H端口发中断结束字20H(EOI),计时累计在主程序里完成。

两个按键都接在C口,低电平有效。C口bit0是暂停键:按下时先把当前显示值存进备份区,再向C口送01110000B控制8253计数器1的GATE门,计数暂停、显示保持;松开后恢复计时。C口bit1是清零键:按下时把BUF六位和DAT2清零、DAT3置1,再向C口送10110000B控制计数器0的GATE门,秒表从0重新开始。

特别注意: 仿真跑起来数码管不亮,先检查压缩包是否解压完整;Proteus用7.8或8.6版本;改了汇编源码要重新编译生成exe再跑仿真。

四、日期修改

资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。

五、资料下载

付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A03基于8086单片机交通灯Proteus设计,asm
下一篇:A05基于51单片机汇编流水灯Proteus设计,asm
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}