#include<reg51h>
#include<intrinsh>
#define uchar unsigned char
void delay(int a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
{
uchar i,j;
P0=0xfe;
for(i=0;i<5;i++)
for(j=0;j<8;j++)
{
P0=_crol_(P0,1);
delay(1000);
}
}
ORG 0000
LJMP MAIN
;定时器T0的中断服务程序
INIT0:
MOV TMOD, #01H
MOV TH0, #3CH;定时器T0计数50000次(STC89C52晶振12M)约50ms 利用寄存器R0 软件计数20次 ,5020=1000ms=1s
MOV TL0, #0B0H;50000次计数计数初值设为3CB0
SETB EA;总的中断开关位置1开启
SETB ET0;定时器T0中断开关置1开启
SETB TR0;启动定时器T0
DJNZ R0,OUTPUT;减1不为零跳转
MOV R0, #20;寄存器R0初值,R0被减到零就需要重设R0的值
RL A;循环左移
MOV P2,A;我接的是P2口,要copy代码 就改成 MOV P1,A
OUTPUT:
RETI
MAIN:
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB EA
SETB ET0
SETB TR0
MOV A, #0FEH;我的是低电平点亮led(共阳),led接法不一样,想改成高电平点亮的电路,改为#01H
MOV P2, A;MOV P1,A
CLR RS1;使用4组Rn寄存器中的0组
CLR RS0;使用4组Rn寄存器中的0组
MOV R0, #20;寄存器R0初值
SJMP $
END
#include "reg51h"
main()
{
unsigned int i,j;
while(1)
{
P1=0xfe; //点亮第一个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfd; //点亮第二个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfb; //点亮第三个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xf7; //点亮第四个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xef; //点亮第五个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xdf; //点亮第六个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xbf; //点亮第七个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0x7f; //点亮第八个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
}
或:
#include "reg51h"
void delay(unsigned int t)
{
unsigned inti,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char w,i;
while(1)
{
w=0xfe;
for (i=0;i<8;i++)
{
P1=w; //循环点亮LED
w<<=1; //点亮灯的位置移动,最低位补0
w=w|0x01; //将最低位置1
delay(500); //延时
}
}
}
或:
#include "reg51h"
//程序中使用_crol_函数,所以要包含头文件"intrinsh"
#include "intrinsh"
void delay(unsigned int t)
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char temp;
temp=0xfe;
while(1)
{
P1=temp;
delay(500); //延时
temp=_crol_(temp,1); //点亮LED的位置循环左移一位
}
}
/ 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 / / 程序详细功能介绍: 做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P00-P07接口上, 输出“0”时,发光二极管亮,开始时P00→P01→P02→P03→┅→P07→P06→┅→P00亮,重复循环。 / ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 ;左移次数 MOV A,#0FEH ;A的初始值,即 P00的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
#include<reg51h>
unsigned char ledtab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++){P0=ledtab[i];delay(100);}
for(i=0;i<8;i++){P0=ledtab[7-i];delay(100);}
}
}
以上就是关于单片机循环程序全部的内容,包括:单片机循环程序、单片机,汇编,求程序。单循环点亮、单片机控制8个led灯交替点亮的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)