8255芯片实现7段LED显示器

题目是:
软件:Proteus、emu8086

  • 在最小系统和译码电路的基础上,学习使用8255芯片。开关设置的二进制信息由B口输入,经程序转换成对应的七段LED段码后,通过A口输出,由七段LED显示开关二进制的状态值。注:若B口读入的值为0000,则LED显示器将显示0,以此类推,若B口读入的值为1111,则LED显示器将显示F。
    预期效果:
    在这里插入图片描述
    思路:
    就是通过B端口进行数据输入,然后通过A端口进行输出,1-4排成从低到高的二进制数,然后再通过根据输入具体数据找到相对应A端口中7个引脚的输出关系,从而达到控制电子数字显示的功能;
  1. 第一步:因为7引脚的LED显示屏中有七个不同块,由七个引脚分别控制,所以需要找出在相应0-F的显示下7个引脚的状态;
    注:当相应引脚为低电平时,引脚控制相应的块就会亮;
    在这里插入图片描述
  2. 第二步:找出0-F对应的编码。

040H,0F9H,024H,030H,019H,012H,02H,078H,00H,010H,08H,03H,046H,21H,06H,0EH

  1. 第三步、编码编译
 ;端口地址
INB EQU 2B2H    ;portB读入
OUTA EQU 2B0H   ;portA输出
CTL  EQU 2B6H   ;控制字端口  
;输出端口        0    1    2    3   4   5    6   7    8   9    A    B   C    D    E   F      
DigitalLED  DB 040H,0F9H,024H,030H,019H,012H,02H,078H,00H,010H,08H,03H,046H,21H,06H,0EH
CODE SEGMENT
	ASSUME CS:CODE 
	;初始化控制配置端口
START:MOV DX,CTL 
    MOV AL,10000010B  ;控制字
	OUT DX,AL         ;控制字输入到控制端口 
	;实现B口进,A口出   
INPUT:MOV DX,INB
	IN  AL,DX  			;接收B端口输入的数据
	AND AL,0FH    		;取最低4位 
	MOV BX,OFFSET  DigitalLED   ;将输入字对应内容偏移量送到BX
	XLAT                        ;命令含义:AL<-(DS*16+BX+AL)
	
    MOV DX,OUTA
	OUT DX,AL
	JMP INPUT       ;转回重新B端口输入
CODE ENDS
	END START
  1. 执行查看效果:
    在这里插入图片描述
    在这里插入图片描述

最难的部分应该是当时想到对应的转换关系,然后想到OFFSET以及XLAT指令选择不同的输出,比一开始纯用CMP和JZ好太多了;

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,这是一个编程类的问题,我可以回答。以下是一个简单的示例代码,可以实现4位动态led显示器的秒表功能: ```lua -- 初始化引脚 local pin1 = 1 local pin2 = 2 local pin3 = 3 local pin4 = 4 gpio.mode(pin1, gpio.OUTPUT) gpio.mode(pin2, gpio.OUTPUT) gpio.mode(pin3, gpio.OUTPUT) gpio.mode(pin4, gpio.OUTPUT) -- 定义计时器 local timer = tmr.create() -- 定义计时器回调函数 local function tick() -- 获取当前时间 local time = tmr.now() / 1000000 -- 计算小时、分钟、秒数和毫秒数 local hour = math.floor(time / 3600) local minute = math.floor((time % 3600) / 60) local second = math.floor(time % 60) local millisecond = math.floor((time - math.floor(time)) * 1000) -- 将小时、分钟、秒数和毫秒数转换为字符串 local hour_str = string.format("%02d", hour) local minute_str = string.format("%02d", minute) local second_str = string.format("%02d", second) local millisecond_str = string.format("%03d", millisecond) -- 在动态led显示器上显示时间 gpio.write(pin1, 0) gpio.write(pin2, 0) gpio.write(pin3, 0) gpio.write(pin4, 0) gpio.write(pin1, 1) tmr.delay(500) gpio.write(pin1, 0) gpio.write(pin2, 1) tmr.delay(500) gpio.write(pin2, 0) gpio.write(pin3, 1) tmr.delay(500) gpio.write(pin3, 0) gpio.write(pin4, 1) tmr.delay(500) gpio.write(pin4, 0) tmr.delay(500) gpio.write(pin4, 1) tmr.delay(500) gpio.write(pin4, 0) tmr.delay(500) gpio.write(pin3, 1) tmr.delay(500) gpio.write(pin3, 0) tmr.delay(500) gpio.write(pin2, 1) tmr.delay(500) gpio.write(pin2, 0) tmr.delay(500) gpio.write(pin1, 1) tmr.delay(500) gpio.write(pin1, 0) -- 重复计时器 timer:start() end -- 启动计时器 timer:register(1000, tmr.ALARM_AUTO, tick) timer:start() ``` 这个代码使用了NodeMCU开发板上的GPIO引脚来控制4位动态led显示器,通过计时器来实现秒表功能。每秒钟,计时器会调用一次回调函数tick(),在这个函数中,我们获取当前时间并将其转换为小时、分钟、秒数和毫秒数,然后在动态led显示器上显示时间。最后,我们重复计时器,以便下一次调用tick()函数。 ### 回答2: 要设计一个4位动态LED显示器实现秒表功能,首先需要明确秒表的基本功能。秒表的基本功能包括计时、暂停、复位和显示计时时间。根据这些功能需求,可以设计如下方案。 1. 硬件设计: - 使用4位动态LED数字管作为显示器。每个数字管包含7个发光二极管来显示数字。 - 增加4个开关按钮,分别是开始/暂停、复位、拆分和结束。 - 使用一个计时器芯片实现计时。 2. 软件设计: - 初始化所有的变量。 - 设置中断,以每毫秒调用一次计时函数。 - 计时函数包括以下功能: - 毫秒累加。 - 当毫秒达到1000时,将秒数加1,毫秒数归零。 - 当秒数达到60时,将分钟数加1,秒数归零。 - 当分钟数达到60时,将小时数加1,分钟数归零。 - 当小时数达到24时,将小时数归零。 - 在开始/暂停按钮按下时,切换计时功能的状态。 - 在复位按钮按下时,将所有变量归零。 - 在拆分按钮按下时,记录当前计时时间,并在显示屏上显示。 - 在结束按钮按下时,停止计时,并将计时结果显示在显示屏上。 这样设计的4位动态LED显示器就能实现秒表功能。当开始按钮按下后,显示屏开始显示计时时间;在暂停按钮按下后,显示屏上的计时时间暂停;在复位按钮按下后,计时时间归零;在拆分按钮按下后,显示屏显示当前计时时间;在结束按钮按下后,计时停止,显示屏显示最终计时结果。这样设计的秒表功能简单易用,可以满足大部分计时需求。 ### 回答3: 要设计一个4位的动态LED显示器,可用于实现秒表功能,可以按照以下步骤进行设计: 首先,我们需要选择一个适合的控制芯片来驱动LED显示器。常用的选择包括MAX7219、TM1637等。 其次,我们需要连接电源电路,确保LED显示器正常运行。一般情况下,我们可以使用一个稳压器来为电路提供所需的电压,如5V直流电压。 接下来,我们需要设计一个计时器电路,用于实现秒表功能。可以使用一颗计时器芯片,如555定时器。该芯片可以通过外部元件来设置计时精度和计时范围。 然后,我们需要将计时器的计时结果显示在LED显示器上。可以通过程序控制,将计时结果转换成适合的数据格式,然后通过控制芯片将数据发送到LED显示器上。我们可以使用微控制器,如Arduino或者树莓派来编写控制程序,并通过串行通信方式与控制芯片进行数据传输。 最后,我们需要设计一个操作界面,让用户可以方便地启动、停止和重置秒表功能。可以采用按钮或者旋钮等手动输入设备,通过程序来进行相应的动作控制。 综上所述,要设计一个4位的动态LED显示器实现秒表功能,我们需要选择适合的控制芯片、设计电源电路、计时器电路、编写控制程序以及设计操作界面。这样,就可以实现秒表功能并将计时结果动态地显示在LED显示器上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值