【Proteus仿真】用AT89C51单片机外部引脚点亮1个LED灯和实现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);
		}
	}

仿真结果:

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Proteus软件中进行51单片机仿真时,我们可以使用8个LED实现一个循环点亮流水灯效果。具体步骤如下: 1.首先,我们需要在Proteus的工作区中添加一个51单片机,并连接好其供电和晶振。 2.接下来,我们需要添加8个LED,以模拟8个流水灯的效果。将它们连接到单片机的输出引脚上。为了简化连接,我们可以使用一个扩展芯片(如74595)来控制这些LED。 3.对于循环点亮的效果,我们需要在程序中设置一个循环来不断变化LED的亮灭状态。可以通过移位运算来控制LED的亮灭状态。 4.在程序中,我们可以使用一个变量来表示LED的状态,假设取值范围为0-7。通过对该变量的处理,可以实现循环点亮的效果。 5.在Proteus中,我们可以使用Proteus VSM来调试和验证程序的正确性。通过仿真,我们可以观察到LED依次点亮的效果,完成了流水灯的循环显示。 以流水灯以顺序点亮的方式为例,程序的基本思路如下: ``` #include <reg51.h> unsigned char led_status = 1; // 定义一个变量表示LED的状态,初始为第一个LED点亮 void delay(unsigned int t) // 定义一个延时函数 { unsigned int i, j; for (i = 0; i < t; i++) for (j = 0; j < 120; j++) ; } void main() { while (1) { P1 = ~(1 << (led_status - 1)); // 点亮对应的LED,其他LED熄灭 delay(1000); // 延时1秒,控制LED点亮的速度 led_status++; // 将LED状态+1,实现流水灯的效果 if (led_status > 8) led_status = 1; // 当LED状态超过8时,重新从1开始 } } ``` 通过以上的操作步骤和程序设计,我们可以在Proteus实现一个8个LED依次循环点亮流水灯效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值