【Proteus仿真】使用AT89C51单片机点亮LED灯并实现流水灯效果

1.安装Proteus8软件,使用AT89C51单片机的外部引脚,点亮1个LED灯。采用汇编指令完成。

2.采用多个LED,设计一个LED流水灯电路,分别用51汇编语言和C语言编程,实现流水灯正常工作。

一、使用AT89C51单片机的外部引脚,点亮1个LED灯。采用汇编指令。

1.首先使用Proteus8绘制原理图

(1)打开Proteus8软件创建新工程,点击这两处皆可创建新工程。

(2)然后编辑名称及其路径,点击浏览可更改路径,勾选新工程(默认),点击下一步。

 

(3) 创建原理图,默认选择DEFAULT,再点击下一步。

(4)创建PCB,默认选择DEFAULT,不需要可以先以选择不创建,再点击下一步。

(5)选择创建固件项目,选择AT89C51,然后继续下一步。

 

 (6)最后点击完成。

(7)点击原理图绘制,开始绘制原理图,点击P选择元器件。

 

(8)在1处输入所需要的元件名称,选择所需要的元件。

本次所需要的元件如下图,接地点击框起来的图标选择GROUND(电源选择OPOWER)即可。

 

最终所画电路原理图:

2.接下来开始编写代码,需要使用到Keil C51来编写程序 

(1)打开Keil软件,点击Project,点击New uVision Project …

 (2)给文件命名,选择存储位置并保存

(3) 在这里输入AT89C51,选择对应的芯片,点击OK

(4)点击是

 

(5) 点击左上角新建文件,并在对应区域编写代码

 汇编语言代码:

ORG 0100H
SETB  P2.0
SJMP $        ;无条件相对转移   $为本句语言的指针地址
              ;SJMP $,就是硬件部分
END

 (6)点击左上方保存,并给文件起名,加.asm后缀(必须加!!!),点击保存 

 

(7)右键点击 Source Group 1 ,再点击 Add Existing Files to Group “Source Group 1”… 

 

(8) 文件类型选择All files(*.*),选中刚刚创建的 main.asm文件,并点击 Add 。

(9) 此文件夹下main.asm文件就被添加了

(10)点击魔法棒,在弹出的窗口内选择 Output ,再勾选 Create HEX File ,然后点击 OK。

(11)点击左上角编译,编译成功下面会显示0个错误,这就生成了.hex 文件。

 

3.最后开始仿真

(1)回到Proteus8软件的原理图,双击 AT89C51 芯片后,在弹出的窗口的编辑元件一栏选择从刚才 keil 软件编译后的路径中添加的 .hex 文件,再点击 OK 。

 

(2)点击开始按钮开始仿真

 

仿真结果:

二、使用AT89C51单片机的外部引脚,实现LED流水灯。

步骤和第一个相同,所需要的元件如下:

电路原理图:

1.  汇编语言代码:

ORG 0h
MOV P0, #0FFh ; ??? P0 ??????
LOOP:
    MOV P0, #0FEh ; ????? LED
    CALL DELAY_MS ; ??????
    MOV P0, #0FDh ; ?????? LED
    CALL DELAY_MS
    MOV P0, #0FBh
    CALL DELAY_MS
    MOV P0, #0F7h
    CALL DELAY_MS
    MOV P0, #0EFh
    CALL DELAY_MS
    MOV P0, #0DFh
    CALL DELAY_MS
    MOV P0, #0BFh
    CALL DELAY_MS
    MOV P0, #07Fh
    CALL DELAY_MS
    SJMP LOOP ; ????
DELAY_MS:
    MOV R7, DPL ; ???????? R7 ???
DELAY_LOOP_OUTER:
    MOV R6, #200 ; ????????
DELAY_LOOP_INNER:
    NOP ; ???????
    NOP
    NOP
    DJNZ R6, DELAY_LOOP_INNER ; ???
    DJNZ R7, DELAY_LOOP_OUTER ; ???
    RET
END

仿真结果:

2.c语言代码: 

用c语言代码时保存代码需要加.c后缀,区别于汇编语言的.asm后缀 

//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);
		}
	}

仿真结果:

作者:别放香菜a

物联沃分享整理
物联沃-IOTWORD物联网 » 【Proteus仿真】使用AT89C51单片机点亮LED灯并实现流水灯效果

发表评论