用51内部定时/计数器完成一次8只流水灯循环亮。(必做,延时时间设置为 0.8s)
时间: 2023-06-05 19:01:28 浏览: 786
要用51单片机内部定时/计数器完成一次8只流水灯循环亮,首先需要定义8个LED灯的引脚。假设8个LED的引脚分别为P0.0-P0.7。
然后需要设置定时器,以便控制灯光的亮灭。可以使用定时器0,设置定时时间为0.8秒即800ms。在定时器中断服务程序中,依次使8个LED灯亮起,每次亮一个LED,同时延时800ms,然后再依次熄灭这8个LED灯,再次每次熄灭一个LED,延时800ms。
具体代码如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar LED[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//定义8个LED的引脚,实际010为亮灯
void T0_config(void)//定时器0的设置
{
TMOD |=0x01;//设置为工作方式1,16位定时器
TH0=0x3c;//计时器初值,定时时间为0.8秒
TL0=0xaf;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//启动定时器
}
void T0_int(void) interrupt 1//定时器0的中断服务程序
{
static uint i=0,j;//i用来计数,j用来控制LED的亮灭
i++;
i=i%8;
//循环计数,保证i的值在0-7之间循环
P0=LED[i];
//将对应的LED引脚的电平为低,其他都为高,灯亮
for(j=0;j<200;j++)//延时800ms
{
;
}
P0=0xff;//所有LED引脚的电平都为高,灯熄灭
}
void main(void)
{
T0_config();//设置定时器0
while(1);//程序不结束,一直循环亮灯
}
本程序使用定时器0来实现循环8只流水灯的亮灭。定时器中断服务程序中实现了LED灯的亮灭和延时,从而实现了8只流水灯的循环亮。