;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,添加如下元件(略去晶振和复位电路):
元 件 名 | 所 在 类 | 参 数 | 备 注 |
AT89C51 | Microprocessor ICs 8051 Family |
| 单片机 |
LED-YELLOW | Optoelectronics Leds |
| LED |
RES | Resistors Generic | 270Ω | 电阻 |
74LS273 | TTL 74LS Series Flip-Flop & Latches | 双稳态多谐振荡器&闭锁 | 锁存器 |
74LS32 | TTL 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。
关键字:跑马灯 输入输出接口 片选地址 74LS273
引用地址:
跑马灯/输入输出接口(片选地址74LS273)
推荐阅读最新更新时间:2024-03-16 15:28
STM32F103标准库开发:LED跑马灯实验
一、硬件电路分析 具体LED原理图如下图所示: 由LED原理图可知: 当单片机的引脚,PB14和PB15输出低电平的时候,LED1和LED2 亮 。 当单片机的引脚,PB14和PB15输出高电平的时候,LED1和LED2 灭。 二、LED灯GPIO配置 1. GPIO初始化配置 使能GPIO时钟 APB2外设时钟启用和禁用函数 /** *@功能:启用和禁用APB2外设时钟 *@参数1:指定外围设备 *@参数2:指定外围设备状态 *@返回值:无 */ void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
[单片机]
PIC16F684单片机定时中断跑马灯
初学PIC,写了一个定时跑马灯程序,以供新手学习PIC提供子资料,文中给出了详细代码和注释,对照手册,新手完全可以看懂,便于理解和后期开发,给予新手打开PIC的大门钥匙。 1、开发环境:我选择的是 MPLAB x IDE 2、芯片型号:8位单片机,PIC16F684 3、程序功能: (1)RC3、RC4接两个LED灯,低电平点亮 (2)时钟选用内部时钟8MHZ (3)定时时间为1ms进一次中断 (4)计时500ms,小灯500ms亮,500ms灭 /*********************************************/ /*** 芯片型号:PIC16F684 1、RC3、RC4接两个LED灯
[单片机]
跑马灯实验-寄存器版
1、参考资料 《STM32F1开发指南-寄存器》-第六章 跑马灯实验6.1小节 《STM32中文参考手册_V10》-8.2 GPIO寄存器描述 7.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 2、编写步骤: 使能IO口时钟。配置寄存器RCC_APB2ENR。 初始化IO口模式。配置寄存器GPIOx_CRH/CRL 操作IO口,输出高低电平。配置寄存器GPIOX_ODR或者BSRR/BRR。 3、详细 新建文件夹HARDWARE,在此文件夹中新建led.c,led.h 在工程中新建分组HARDWARE,在path中添加路径 RCC_APB2ENR寄存器
[单片机]
STM32 LED跑马灯-库函数
一,GPIO知识回顾 1,四种输入模式: 输入浮空 输入上拉 输入下拉 模拟输入 2,四种输出模式: 开漏输出 开漏复用输出 推挽输出 推挽复用输出 3,三种最大输出速度 2MHz 10MHz 50MHz 每组GPIO共16个IO口,含下7个寄存器 GPIOx_CRL : 端口配置低寄存器 GPIOx_CRH : 端口配置高寄存器 GPIOx_IDR : 端口输入寄存器 GPIOx_ODR : 端口输出寄存器 GPIOx_BSRR : 端口位设置/清除寄存器 GPIOx_BRR : 端口位清除寄存器 GPIOx_LCKR : 端口配置锁存寄存器 二,LED硬件连接
[单片机]
STM32F1x系列——跑马灯实验-库函数
今天根据网上的教程实现了STM32F1系列单片机的跑马灯实验,首先主要分为三个步骤: (1)使能IO口时钟,调用函数RCC_APB2PeriphClockCmd();不同的IO口,调用的使能时钟不一样 (2)初始化IO口模式。调用函数GPIO_Init(); (3)操作IO口,输出高低电平。GPIO_SetBits();GPIO_ResetBits(); 新建一个样板工程,在工程添加文件夹HAREWARE,并在文件夹添加LED(名字自取)的.c和.h文件,按照上述的步骤,依次添加步骤。 LED.h: #ifndef __LED_H_ #define __LED_H_ void L
[单片机]
基于CC2530的跑马灯实验
实验要求 代码实验 #include ioCC2530.h #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4 //延迟函数 void Delay(unsigned int t) { while(t--); } //端口函数 void Init_Prot() { //选择端口的功能 P1SEL &=~0x1B; //配置端口的方向 P1DIR |=0x1B; } //跑马灯函数 void LED_Running() { D4 = 1; Delay(60000); D3 = 1; Delay(60000); D6 = 1;
[单片机]
STM32F103C8T6学习笔记_跑马灯
1、跑马灯 IO口的设置 推挽输出 GPIO_Mode_Out_PP 输出高、低电平,连接数字器件(管脚负载能力强、开关速度快) led.c怎么写? #include led.h void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //时钟使能 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //哪个端口? GPIO_Ini
[单片机]
AVR单片机跑马灯的仿真设计
简易的跑马灯设计。基于AVR单片机 仿真原理图如下: 单片机源程序如下: /******************************************************************** 汇诚科技 *********************************************************************/ #include iom16v.h /********************************************************************** 函数数据类型说明
[单片机]