一、Proteus设计电路
前面已经做过设计,所以这次只把最终设计图贴出来,不会的可以看这篇文章:Proteus——仿真51单片机:LED流水灯
二、Keil编写程序
因为要在Proteus上进行仿真,所以将文件的output中的生成hex文件勾选上,不会的看之前文章。
(一)51C语言编写LED流水灯
//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);
}
}
(二)c仿真运行结果
GIF帧率太低所以跳帧后出现隔一个LED亮一个的现象。
(三)51汇编语言编写LED流水灯
因为是用汇编语言写的,所以不需要使用keil的.start文件,新建文件时跳出的弹窗选择NO。并且汇编程序的后缀名为.asm。
再点击编译后,就可得到hex文件。
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP, #60H
MOV A, #0FEH;
LOOP:
INC R0;
RR A ;
MOV P0,A ;
ACALL DELAY;
AJMP LOOP;
AJMP $;
DELAY:
MOV R4, #20;
DEL1:
MOV R6, #100;
DEL2:
MOV R7, #250;
DJNZ R7,$;
DJNZ R6,DEL2;
DJNZ R4,DEL1;
RETI ;
END
运行程序后
(四)汇编仿真运行结果
将生成的hex文件