单片机如下电路,让显示灯从上往下依次点亮,不断循环。

如题所述

第1个回答  2017-07-02
/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。 * 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 */ /* 程序详细功能介绍: *做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上, *输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。 */ ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 ;左移次数 MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮 SETB C LOOP: MOV P0,A LCALL DELAY RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动 DJNZ R2,LOOP MOV R2,#8 ;右移次数 LOOP1: RRC A ;右移流水灯 MOV P0,A LCALL DELAY DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END追问

谢谢你的回答,可惜我看不懂

本回答被网友采纳
第2个回答  2017-07-02
#include<reg51.h>
unsigned char t;
sbit key=P0^0;
void delayms(unsigned char n)
{
char i;
while(n--)
for(i=0;i<120;++i);
}
void main()
{
while(1)
{
if(~key)
{
delayms(5);
P1=t=0xfe;
while(~key)
{
delayms(500);
P1=_crol_(t,1);
t=P1;
}
}
else P1=0x00;
}
}追问

谢谢

本回答被提问者采纳
相似回答