当前位置:首页 > 单片机 > 单片机
[导读]跑马灯/输入输出接口(片选地址74LS273)

;NAME: 跑马灯

;AUTOR:

;CONTENT: P1.0~P1.7接发光二极管L1~L8

CSEG AT 4000H ;定义起始地址,为什么是4000H呢

;存储器:程序存储器、数据存储器统一编址,达64K,板上ROM(16K);RAM

;(32K)供用户使用,可扩展至48k。用户存储器起始地址为4000H;8051原

;有中断入口地址均定位在偏移4000H之后的相应地址

LJMP START

CSEG AT 4100H

START:

MOV A, #01H  ; 先让第一个发光二极管点亮 ,选#01的原因是加了反相器

LOOP:

MOV P1, A   ; 从P1口输出到发光二极管

DELAY500MS: ;延时0.5秒

MOV R7,#0BH DL1:

MOV R6,#5CH DL0:

MOV R5,#7AH DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1

RL A ; 左移一位,点亮下一个发光二极管

LJMP LOOP

END

 

;NAME: 输入输出接口(读出开关的闭合还是断开);AUTOR: ;TIME: 2012年4月12日 18:22:14;CONTENT: P1.0~P1.7接按钮K1~K8;74LS273的SO0~SO7接发光 二极管L1~L8,片选端CSU8\接CS0(由程序选择的入口地址而定)。

PORT EQU 0CFA7H ;片选地址CS0 CSEG AT 4000H        ;绝对寻址,同上

LJMP START

CSEG AT 4100H

START:

MOV P1, #0FFH

LOOP:

MOV A, P1 ;从P1口读取开关状态

MOV DPTR, #PORT

MOVX @DPTR, A ;从74LS273输出到发光二极管

LJMP LOOP ;循环 END

片选地址74ls172的接法

 

74LS273是一个八位的数据/地址锁存器。本例采用74LS273扩展I/O输出端口,通过片选信号和写信号将数据总线上的值锁存在74LS273中,同时在74LS273的端口输出数据。当数据总线上的值撤销后,由于74LS273能锁存信号,所以74LS273的输出端保持不变,直到有新的数据被锁存。

1. 硬件设计

创建一个新的Design,添加如下元件(略去晶振和复位电路):

元 件 名所 在 类参 数备 注

AT89C51Microprocessor ICs

8051 Family

单片机

LED-YELLOWOptoelectronics

Leds

LED

RESResistors

Generic270Ω电阻

74LS273TTL 74LS Series

Flip-Flop & Latches双稳态多谐振荡器&闭锁锁存器

74LS32TTL 74LS Series

Gates & Inverters门电路 & 反相器或门

 

用8个发光二极管显示单片机的输出数据,输出为低电平时LED灯亮。74LS273的D0~D7为8位数据输入端,接单片机的P0口,Q0~Q7为8位数据输出端,CLK为触发时钟输入端,MR为数据清除使能端。采用或门74LS32进行地址译码,U3:A的输入端分别接单片机的P2.7口和WR口,输出端接74LS273的CLK口。

从74LS273的真值表可以看出,当MR为低电平时,所有的Q端为0,否则Q端随D端而定,因此,MR应置为高电平。CLK在上升沿时完成数据锁存操作,因此U3:A的输出必须完成一个由低到高的变化。当写指令有效时,输出低电平,只有P2.7同时为低电平时,才能在写指令完成时实现一个由低到高的电平变化,这样在写完成后,数据被74LS273锁定。可见,74LS273地址应该为0XXX XXXX XXXX XXXX,一般我们设为7FFF。

2. 程序设计

在Keil C51中,有以下的内存类型:

code 以 MOVC a,@A+DPTR 读取的程序内存

data 可以直接存取的内部数据存储器

idata 以 Mov @Rn 存取的内部数据存储器

bdata 可以位寻址(Bit Addressable)的内部存储器

xdata 以 MOVX @DPTR 存取的外部数据存储器

pdata 以 MOVX @Rn 存取的外部数据存储器

为了定义使用方便,在absacc.h文件中对此进行了宏定义,比如此例中的地址0x7fff,就可写为XBYTE[0x7fff]。

#include "at89x51.h"

#include "absacc.h"

#define A74273 XBYTE[0x7fff]

void main(void)

{

A74273 = 0x2b;

while(1);

}

注意了:当写指令有效时(应该是WR,无效时为高),输出低电平,只有P2.7同时为低电平时,才能在写指令完成时实现一个由低到高的电平变化,这样在写完成后,数据被74LS273锁定。可见,74LS273地址应该为0XXX XXXX XXXX XXXX,一般我们设为7FFF。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

销售GG在工作群里:“弟兄们,快醒醒,咱现场的跑马灯不跑了。”还在加班的程序猿:“已经查过了,程序没Bug。”带娃玩的硬件攻城狮:“硬件没问题,这都是照官方Demo弄的。”刷剧的测试MM小声嘀咕:“我可都是按用例测的,没...

关键字: 跑马灯

销售GG在工作群里:“弟兄们,快醒醒,咱现场的跑马灯不跑了。”还在加班的程序猿:“已经查过了,程序没Bug。”带娃玩的硬件攻城狮:“硬件没问题,这都是照官方Demo弄的。”刷剧的测试MM小声嘀咕:“我可都是按用例测的,没...

关键字: 跑马灯

基于51单片机学习板。用S1键作为控制跑马灯的方向按键,S5键作为控制跑马灯方向的加速度按键,S9键作为控制跑马灯方向的减速度按键,S13键作为控制跑马灯方向的启动或者暂停按键。记得把输出线P0.4一直输出低电平,模拟独...

关键字: 51单片机 数码管显示 跑马灯

本节小项目,意在“人机界面”与“过程控制”如何关联的练习。

关键字: 计数器 跑马灯

当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快。而采用C51语言编写可改善程序的可读性和可移植性,利于产品的更新换代,大大加快...

关键字: C51 汇编语言 跑马灯

一、跑马灯和流水灯的区别好多人分不清跑马灯和流水灯,还以为是同一种状态,虽然难度等级是一样的,但是灯的亮灭显示方式是不一样的。请看下图 二、单片机控制LED灯的常用电路接法弄清楚跑马灯的显示状态后可以开始

关键字: 单片机控制 跑马灯

我使用的是爱晶3ePIC实验板,以下都是自己写的程序,只是为了纪念和学习交流使用,别无它意。在我的相册里有板子的原理图。跑马灯实验:程序://适合3epic实验板,是跑马灯程序 #include unsigned...

关键字: 数码管显示 跑马灯 pic入门

;NAME:跑马灯;AUTOR:;CONTENT:P1.0~P1.7接发光二极管L1~L8    CSEGAT4000H;定义起始地址,为什么是4000H呢     ;存储器:程序存储器、数据存储器统一编址,达64K,板...

关键字: 跑马灯 输入输出接口 片选地址 74ls273

#include #define uchar unsigned char#define uint unsigned int//延时子程序void mDelay(uchar Delay){ uchar i; for(;...

关键字: C51 单片机 编程入门 跑马灯

很简单了哈,这里不罗嗦了。LED.h头文件#ifndef _LED_H_ #define _LED_H_ // 定义LED名称 #define LED1 0x01 #define LED2 0x02 #defi...

关键字: lm3s1138入门 跑马灯
关闭
关闭