【Proteus8软件仿真】使用AT89C51单片机的外部引脚,点亮1个LED灯(采用汇编指令完成);采用多个LED,设计一个LED流水灯电路,分别用51汇编语言和C语言编程,实现流水灯正常工作

一、点亮一个LED灯(汇编)

1、在proteus中进行元器件的摆放,电路图如下:

其中在选择LED灯和固定电阻时,选择左边竖行中的元件模式:

 然后在Pick Devices中分别搜索“LED”和“RES”:

 接地标识则选择终端模式,GROUND(GND)就是接地符号:

2、在keil软件中使用汇编语言写出代码,步骤如下:

(1)首先,在主页面创建新项目,并给项目取名LED(single):

(2) 然后,在弹出的搜索框内选择AT89C51单片机:

(3)然后点击创建空白文档,将你所设计的汇编代码写上去:

汇编代码如下 :

ORG 0100H
SETB  P2.0
SJMP $        ;???????     $???????????
                ;SJMP $,??????
END
(4)然后点击保存按钮,此处要注意!!因为使用的是汇编语言,不是C文件,所以后缀要加" .asm "!!! 此处我命名为 " main.asm " :

(5)右键点击 Source Group 1 ,再选择第三个选项,将你刚刚保存的 main.asm 添加进去:

这里的文件类型先切换成All files,然后文件中才会出现 .asm 后缀文件:

点击Add,就可以看见这个文件在Source Group 1的子目录里了: 

(6)点击魔法棒,选择第三个选项Output,将Create HEX File选项勾选:

(7)最后点击编译按钮,这样就生成了 .hex 文件: 

3、在protues中进行仿真实验进行验证

 (1)首先双击AT89C51芯片,然后点击Program File文件:

将在keil中创建的 .hex 文件添加进去,点击确定:

(2)最后点击左下角调试按钮,进行仿真:

(3) 仿真结果一致:

二、点亮LED流水灯(汇编+C语言) 

 (在操作步骤上,流水灯与单个灯的步骤一致,因此省略详细的操作步骤,只保留了电路图、代码和仿真结果)

电路图如下:

1、C语言

代码如下:

//51单片机编程常用的头文件
	#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);
		}
	}

仿真结果如下:

 2、汇编语言

 代码如下:

org 0H
ljmp start
org 30H
start: mov a, #0feH
      mov p0, a
      acall delay
      mov a, #0fdH
      mov p0, a
      acall delay
      mov a, #0fbH
      mov p0, a
      acall delay
      mov a, #0f7H
      mov p0, a
      acall delay
      mov a, #0efH
      mov p0, a
      acall delay
      mov a, #0dfH
      mov p0, a
      acall delay
      mov a, #0bfH
      mov p0, a
      acall delay
      mov a, #07fH
      mov p0, a
      acall delay
      sjmp start

delay: mov r2, #0ffH
       mov r3, #0ffH ; 
delay_loop1$: 
    mov r1, #0ffH
delay_loop2$: 
    mov r3, #0ffH
    nop             ; 
	nop             ;
	nop             ;
    djnz r1, delay_loop2$
    djnz r2, delay_loop1$
    ret
end

仿真结果如下:

 

 三、总结 

1、无论是使用汇编语言点亮单个LED灯还是用汇编+C语言点亮流水灯,两次仿真的结果都与预期所想一致

2、通过本次使用keil和Proteus软件对LED灯进行点亮,我基本掌握了两个软件的基本操作用法。知道了怎么用Proteus去创建电路原理图,明白如何用keil去生成 .hex 文件,然后添加到电路图中。两个软件都十分方便,在以后的使用中也能更加熟练的去掌握他们的操作方法。

四、参考资料 

1、Proteus使用教程并仿真51程序——LED流水灯_电阻的英语-CSDN博客 

2、一个51程序设计和仿真——流水灯-CSDN博客

3、51单片机的汇编语言_汇编语言数据表-CSDN博客

4、单片机实验笔记(汇编、Proteus仿真) | 码农家园 (codenong.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值