如何用C语言写一个循环彩灯的程序,采用定时器方式1工作。 10
由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的L1~L8。要求编写程序模拟一循环彩...
由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的L1~L8。要求编写程序模拟一循环彩灯。彩灯变化花样可自行设计。例程给出的变化花样为:①L1、L2、…L8依次点亮;②L1、L2、…L8依次熄灭;③L1、L2、…L8全亮、全灭。各时序间隔为0.5秒。让发光二极管按以上规律循环显示下去。
#include <reg51.h>
char buf;
void time1(void) interrupt 3
{
TR1 = 0;
TL1 = 0xaf;
TH1 = 0x3c;
buf++;
TR1 = 1;
}
void main(void)
{
unsigned char led=1;
TMOD = 0x10;
TL1 = 0xaf;
TH1 = 0x3c;
IE = 0x88;
TR1 = 1;
buf = 0;
P1 = 0xfe;
while(1)
{
if(buf==10)
{
led<<=1;
if(!led) led = 1;
P1 = ~led;
buf = 0;
}
}
}
这个程序是如何运行的?buf如何实现自加?怎样跳到中断子程序time1呢? 展开
#include <reg51.h>
char buf;
void time1(void) interrupt 3
{
TR1 = 0;
TL1 = 0xaf;
TH1 = 0x3c;
buf++;
TR1 = 1;
}
void main(void)
{
unsigned char led=1;
TMOD = 0x10;
TL1 = 0xaf;
TH1 = 0x3c;
IE = 0x88;
TR1 = 1;
buf = 0;
P1 = 0xfe;
while(1)
{
if(buf==10)
{
led<<=1;
if(!led) led = 1;
P1 = ~led;
buf = 0;
}
}
}
这个程序是如何运行的?buf如何实现自加?怎样跳到中断子程序time1呢? 展开
展开全部
unsigned char lights = 0; //lights到各位分别表示P1.0~P1.7
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);
}
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);
}
追问
这个没有用定时器啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询