如何用C语言写一个循环彩灯的程序,采用定时器方式1工作。

如何用C语言写一个循环彩灯的程序,采用定时器方式1工作。,第1张

unsigned char lights = 0; //lights到各位分别表示P10~P17

int i=0;

while (1)

{

//①L1、L2、…L8依次点亮

lights = 0x01;

for (i=0; i<7; i++)

{

delay(500);

lights = lights << 1;

}

delay(500);

//②L1、L2、…L8依次熄灭

lights = 0xfe;

for (i=0; i<7; i++)

{

delay(500);

lights = (lights << 1) + 0x01;

}

delay(500);

//③L1、L2、…L8全亮

lights = 0xff;

delay(500);

//全灭

lights = 0x00;

delay(500);

}

恩,不知道你要什么语言的!但是我觉得你提问本身矛盾哈!一只怎么左移?你是亮一只吧!

下面是我一个移位的流水灯程序,你先看看这个程序,延时这里你修改一下就是哈,用定时器来触发移位。提示你,你每秒移动移位,那你每个亮多久呢?要考虑好哦!后面我附加一个1s的定时器,你就自己稍微拼凑哈,挺简单的,希望你能解决!

#include

<reg52h>

#include

<intrinsh>

#define

uint

unsigned

int

#define

uchar

unsigned

char

void

delay(uint);

void

main()

{

uchar

aa;

aa=0xfe;

while(1)

{

P1=aa;

delay(800);

aa=_crol_(aa,1);

}

}

void

delay(uint

z)

{

uint

x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

定时器的

void

T0_time()

interrupt

1

//隔50ms跑过来到中断程序里来,

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

num++;

if(num==20)//50ms20为1s

{

num=0;

led1=~led1;//实现灯的闪动

led2=~led2;

}

}

稍微融合一下就OK

ORG 0000H

LJMP BEGIN

ORG 000BH

LJMP T0ISR

ORG 0030H

;---------------------------------------

BEGIN:

MOV SP,#5FH

MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV A,#0

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

SETB TR0

SETB ET0

SETB EA

MOV R2,#0

MOV R4,#0

MOV R7,#0

SJMP $

T0ISR:

CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

INC R7

CJNE R7,#10,T01

T01:

JC T0E

MOV R7,#0

INC R2

INC R4

CJNE R2,#10,T02

T02:

JC LP

MOV R2,#0

LP:

MOV A,R2

MOV DPTR,#TABLE

MOVC A,@A+DPTR ;找到相应位显示代码

MOV P1,A

CJNE R4,#9,T03

T03:

JC LEDDIS

MOV R4,#1

LEDDIS:

MOV A,#0FFH

CLR C

PUSH 04H

LEDDIS1:

RLC A

DJNZ R4,LEDDIS1

MOV P0,A

POP 04H

T0E:

RETI

TABLE: ; 共阴极数码管显示代码表

DB 3FH,06H,5BH,4FH,66H ;01234

DB 6DH,7DH,07H,7FH,6fh ;56789

END

while{}是一个死循环,然后定时器要先设定定时时长。程序在死循环里跑然后每当定时时间到的时候就中断来处理定时器的程序,同时重新更改定时值。然后跳出中断再回到主程序while{}中中断的位置继续执行。如此往复!

以上就是关于如何用C语言写一个循环彩灯的程序,采用定时器方式1工作。全部的内容,包括:如何用C语言写一个循环彩灯的程序,采用定时器方式1工作。、控制一只二极管亮,用定时器每隔一秒循环左移位的程序<单片机>急、用汇编语言写一程序,利用定时计数器,定时一秒,一个数码管秒个位加1,同时有八个LED灯在循环流动。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9837339.html

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

发表评论

登录后才能评论

评论列表(0条)

保存