简单流水灯仿真(入门级实验)
实验介绍:
简单流水灯实验是通过单片机控制几个发光二极管(常见控制8个)的点亮状态,形成一个流动的效果,所以称为流水灯实验。流水灯实验是闪烁灯实验的进阶,也属于入门级实验。流水灯效果在普遍应用于路边的广告牌以及各式的霓虹灯。
实验目的:
该实验的主要目的是通过流水灯效果的控制,熟悉单片机I/O接口的使用。学习移位指令(汇编语言:RR、RL,C语言:_crol_、_cror_)的使用方法。
仿真原理图:
在仿真软件Proteus中绘制仿真仿真原理图如上图所示。(注意事项:在仿真过程中,电阻R2~R9的大小要合适,太大LED将无法点亮。仿真时如果想使用P0口,则需要添加上拉电阻。注意发光二极管的极性,如果发光二极管接反了,则无法点亮。)
程序HEX代码如下:
:03000000020832C1
:0C083200787FE4F6D8FD75810702081DF0
:10080000E4FFFEE4FDFC0DBD00010CBC03F8BDE8F7
:0C081000F50FBF00010EEF64644E70E7AE
:01081C0022B9
:10081D0075A0FEAFA07801EF08800123D8FDF5A0EB
:05082D0012080080EE3E
:00000001FF
程序HEX使用方法:
1)新建txt文档
2)将HEX代码复制到txt文档中,保存
3)将该txt文档另存为“程序名.hex”,例如:pro.hex 4)在仿真软件中打开即可实现仿真。
汇编语言代码以及C语言代码如下:
汇编语言代码1(移位方法):
ORG 0H
JMP MAIN
ORG 30H
MAIN:
MOV A,#0FEH
X1:
MOV P2,A
CALL DELAY
RL A
JMP X1
DELAY:
MOV R2,#20
X3:MOV R3,#40
X2:MOV R4,#250
DJNZ R4,$
DJNZ R3,X2
DJNZ R2,X3
RET
END
汇编语言代码2(直接赋值方法):
ORG 0H
JMP MAIN
ORG 30H
MAIN:
MOV P2,#0FEH
CALL DELAY
MOV P2,#0FDH
汇编语言转c语言的软件
CALL DELAY
MOV P2,#0FBH
CALL DELAY
MOV P2,#0F7H
CALL DELAY
MOV P2,#0EFH
CALL DELAY
MOV P2,#0DFH
CALL DELAY
MOV P2,#0BFH
CALL DELAY
MOV P2,#7FH
CALL DELAY
JMP MAIN
DELAY:
MOV R2,#20
X3:MOV R3,#40
X2:MOV R4,#250
DJNZ R4,$
DJNZ R3,X2
DJNZ R2,X3
RET
END
注意:对于指令“MOV A,#0FEH”中,“#”后面的数字“0”不可以省略。C语言代码:
#include <reg52.h>
#include <intrins.h>
void delay() //延时函数
{ unsigned int i,j;
for(i=0;i<100;i++)
for(j=0;j<1000;j++)
_nop_;
}
void main()
{ P2=0xfe; //装入初值
while (1)
{
P2=_crol_(P2,1); //循环左移
delay();
}
}
注意:程序中对P2口进行赋值与移位操作时,字母“P”必须大写。