使用Proteus实现LED灯发光

1.使用汇编语言实现单个LED灯的点亮

        首先在Protues中完成电路图的绘制。先使用Proteus建立一个工程以便绘制电路图,建立的过程中生成一个AT89C51的芯片,然后在工具栏中选择对应组件,进行硬件部分的绘制,以便执行汇编语言的程序,最后在芯片的一个端口上接入一个LED灯和适当的电阻,并接地。大致电路图如下图所示。

        接着进入Keil进行汇编语言的编写和运行,编译完成后生成对应的hex文件。编写汇编语言时,根据绘制电路图时选择的连接LED灯的端口,在编写时写上对应的端口,跳转到对应的地址,实现LED灯的点亮。汇编语言代码如下所示。

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

      最后将生成的hex文件录入电路图中的芯片中,运行电路,就可以观察到LED灯被点亮了。

2.使用51C语言实现LED流水灯点亮

        先使用Proteus建立一个工程以绘制电路图,在建立的过程中添加AT89C51芯片,以便完成LED灯1的流水线发光,添加好后,会自动在电路中生成AT89C51芯片。接着在左边工具栏内选择对应组件进行电路图的绘制。分别连接8个LEd灯以及电阻防止击穿,并接入电源,同时给线路和元件进行命名以便代码的编写。大致电路图如下图所示。

        然后进入Keil完成c语言的编译。定义一个delay延时函数以便观察LED灯的变化情况,led函数来进行LED灯的闪烁,将代号定义为一个16进制数表示的2进制数并用“~”进行取反,然后循环依次将“0”向左移位,当对应元器件处于低电位时发光,高电位时熄灭。编译完成后生成对应hex文件。51C语言代码如下所示。

#include"reg51.h"
 sbit LED0=P2^0;
 ​
 void delay(unsigned int t)
 {
     unsigned int i=0,j=0;
     for(i=0;i<t;i++)
     {
         for(j=0;j<120;j++);
     }
 }
 ​
 void led()
 {
     int i=0;
     for(i=0;i<8;i++)
     {
         P2=~(0x01<<i);//0000 0001 -> 0000 0010
         delay(200);
     }
 }
 ​
 void main()
 {
     while(1)
     {
         led();
     }
 }

        最后将生成的hex文件导入芯片中,运行电路,便能看到LED流水灯发光。

3.使用汇编语言实现LED流水灯点亮

        与实现单个LED灯的点亮一样,先新建过程生成AT89C51芯片并进行硬件部分的绘制,接着在工具栏内选择对应组件进行电路图的绘制,分别连接8个LEd灯以及电阻防止击穿,并接入电源,同时给线路和元件进行命名以便代码的编写。大致电路图如下图所示。

        接着进行汇编语言的编写,要实现流水灯效果,需要让累加器A中的1000 0000循环右移,中间加以延时。延时程序分为两层的循环,D1和D2,分别用到R2、R3两个寄存器。两个八位寄存器,那对应的数字就是0~255注意给寄存器传送立即数时不要超过255。编译完成后生成对应hex文件。汇编语言代码如下所示。

 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

        最后将生成的hex文件导入芯片中,运行电路,便能看到LED流水灯发光。

4.总结

        对于Proteus的使用,本次完成了LED灯的单个点亮以及流水线发光,对于电路图的绘制和平时的差不多,进展的比较顺利,主要是代码的编写,最开始使用c语言编写,鉴于之前的基础,上手比较容易,只是多了一些头文件来适应Proteus的工程。然后是51汇编语言的编写,选择对应汇编语言已经有了一定程度的认识,能较好的理解汇编语言的含义,但对于汇编语言仍需要多加练习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值