如何用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呢?
展开
 我来答
jwoodt
2013-05-14 · 超过16用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:34万
展开全部
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);
}
追问
这个没有用定时器啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2017-07-15 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
定时器中断,是重点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式