❶ 单片机的P1端口输出控制8个指示灯LED0~LED7,写出指示灯LED0到LED7依次流水灯显示的程序。
与你LED接法有关,输出1 LED亮 还是输出0 LED亮
假设输出1 LED亮,程序如下:
#include<REG51.H>
#define uchar unsigned char
#define uint unsigned int
void delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void main(void)//主程序
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P1=0x01<<i;
delay1ms(500);
}
}
}
❷ 汇编语言,利用AT89C51单片机结合8个发光二极管L0~L7,要求每间隔0.5秒依次点亮一盏灯,
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R2,#3
MOV A,#0FEH
LOOP:
MOV P1,A
LCALL DELAY
RL A
DJNZ R2,LOOP
MOV P1,#0FFH
SJMP $
DELAY:
MOV R3,#10
DLY1:
MOV R4,#100
DLY2:
MOV R5,#250
DJNZ R5,$
DJNZ R4,DLY2
DJNZ R3,DLY1
RET
END
❸ 用汇编语言,利用AT89C51单片机结合8个发光二极管L0~L7,要求每间隔0.5秒
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV A,#0FEH
MOV P1,A
MOV R2,#24
MOV R3,#10
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R3,T0E
MOV R3,#10
RL A
MOV P1,A
DJNZ R2,T0E
MOV P1,#0FFH
CLR TR0
T0E:
RETI
END
❹ 利用AT89C51单片机结合8个发光二极管L0~L7,要求每间隔0.5秒依次点亮一盏
假设高电平点亮LED,LED接在P0口,主要程序语句如下:
uchar c=0;
uchar i;
while(c<3)
{
for(i=0;i<8;i++}
{
P0=1<<i;
DELAY_MS(500);
}
c++;
}
P0=0X00;
❺ 单片机编程:P1口P1.1-P1.7接八个LED灯L0-L7。分别用查询方式,中断方式编写一程序,使八个LED灯轮流点亮
点亮子函数:
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
void dd()
{
uchar temp=0xfe,i;
for(i=0;i<8;i++)
{
P1=temp;
temp=_crol_(temp,1);//左移函数
delay();
}
}
然后你要什么中断你就在中断函数里面调用这个函数就可以
❻ 发光二极管L0-L7分别连接在单片机的输出口P1.0-P1.7,一个按钮开关连接在P2.0口,要求每按动一次按钮,
假设使用51系列单片机
简单程序如下:
DAT1 equ 02eH
ORG 0000
JMP SHART
..................
START: MOV P1,#00H(CLR P1.0-1.7)
MOV DAT1,#00h
...................
START1: MOVE A,P2
JNB ACC.0,STP1
INC DAT1
STP1: MOV A,DAT1
MOV P1,A
JMP START1
........................
END
❼ 单片机如下电路,让显示灯从上往下依次点亮,不断循环。
/* 实验目的:初步了解单片机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
❽ 编写一段程序,用单片机控制八支发光二极管L1L2L3L4L5L6L7L8循环点亮
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
ucharcnt;
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
P1=_corl_(P1,1);
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
P1=0xfe;
while(1);
}