Proteus仿真并点亮LED灯

1.汇编语言

汇编语言指令格式

[标号:] 操作码 [第一操作数] [,第二操作数] [,第三操作数] [;注释]

此处用到的51单片机汇编指令

1.ORG xxxxH命令

是指向程序不同功能固定入口。

如:0000H----系统复位入口 0013H—外中断1入口

0003H—外部中断0入口 001BH—T1溢出中断入口

000BH—T0溢出中断入口 0023H串口中断入口

2.数据传送类指令

MOV direct, A; 累加器传送到直接地址

MOV A,#data; data就是数据,直接赋给A

3.逻辑运算类指令

RR A; 累加器循环右移

4.控制转移类指令

JMP @A+DPTR; 相对DPTR的无条件间接转移

DJNZ Rn,rel; 寄存器减1,不为0则转移

RET 从子程序转移

LJMP add16 无条件长转移

L CALL add16 长调用子程序

SJMP 无条件相对转移

SETB C 置位进位位

LOOP 循环指令

2.点亮一个LED灯

汇编程序:
在这里插入图片描述

(1)ORG 0100H:在汇编语言中,ORG(Origin)指令用于程序的起始地址。因此在该代码中,

ORG 0100H 设置的起始地址为0x0100

(2)SETB P2.0:把P2.0置1,使接入P2.0端口的LED灯亮。

(3)SJMP $:为无条件相对转移指令

硬件部分:

在这里插入图片描述

电路图设计原理:

点亮一个LED灯的电路设计原理是先引入一个AT89C51芯片,然后将LED灯接入芯片的某一个端口,在这里是将LED接入P2.0端,最后把代码生成的hex文件导入芯片中,来控制P2.0端,从而点亮LED灯。

3.LED流水灯电路

汇编程序:

ORG 0000H
LJMP MAIN

ORG 0100H
MAIN:
MOV A,#80H
LOOP:
MOV P2,A
LCALL DELAY
RR A  
LJMP LOOP

DELAY:
MOV R2,#255
D1:MOV R3,#250
D2:DJNZ R3,D2       ;寄存器减1,不为0 则转移
DJNZ R2,D1
RET

END

要实现流水灯效果,只需要让累加器A中的1000 0000循环右移,中间加 以延时即可。延时要足够长,否则会看到所有的灯都是亮的。

延时程序分为两层的循环,D1和D2,分别用到R2、R3两个寄存器。两个八位寄存器,那对应的数字就是0~255,注意给寄存器传送立即数时不要超过255。

C语言编程:

#include <reg51.h>
	#include <intrins.h>

	void delay_ms(int a)
	{
		int i,j;
		for(i=0;i<a;i++)
		{
			for(j=0;j<1000;j++) _nop_();
	
		}
	}
	
	void main(void)
	{
		while(1)
		{
			P0=0xfe;
			delay_ms(50);
			P0=0xfd;
			delay_ms(50);
			P0=0xfb;
			delay_ms(50);
			P0=0xf7;
			delay_ms(50);
			P0=0xef;
			delay_ms(50);
			P0=0xdf;
			delay_ms(50);
			P0=0xbf;
			delay_ms(50);
			P0=0x7f;
			delay_ms(50);
		}
	}

首先写了一个delay_ms的延迟函数,其次在main函数中通过while循环,把地址为0xfe的P0端口置为1,接入该端口的LED灯点亮,延时一段时间后,地址为0xfe的端口置为0,LED灯灭;把地址为0xfd的P0端口置为1,该端口的LED灯点亮,然后依次让接入P0端口的LED灯点亮,从而完成流水灯的设计。

硬件部分:

在这里插入图片描述

电路图设计原理:

实现LED流水灯的电路原理主要是首先将LED依次接入到AT89C51芯片的P0端,拉一条总线进行连接,通过编号形成一一对应的关系,然后将汇编程序或C语言编程生成的hex文件导入到此芯片中来控制P0端的输入和输出,从而间接控制LED灯的亮灭和流水灯的实现。

4.总结

通过此次的电路仿真实验,加强了对Proteus电路仿真平台和Keil软件编译器的了解,更能熟练地运用到实践中,它们使用起来十分方便,不过要更加熟练地掌握,还需要上网查阅更多的资料。在流水灯的仿真过程中,我也学习到了除C语言外的汇编语言。每种语言都需要我们深入地去学习,才能体会到它的魅力。

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值