单片机循环程序

单片机循环程序,第1张

#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

ORG 000BH;定时器T0的中断服务程序入口地址

;定时器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灯交替点亮的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9515941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存