用51单片机计数器来控制一个LED灯闪烁一定次数后另外一个闪烁
时间: 2024-02-18 13:01:39 浏览: 86
实验目的:学习使用51单片机的计数器来控制LED灯的闪烁次数,进一步巩固IO口的使用。
实验器材:
1.51单片机板;
2.杜邦线;
3.LED灯;
4.220欧姆电阻。
实验原理:
51单片机的计数器可以通过定时器的方式控制计数,进而实现控制LED灯闪烁的次数。
实验步骤:
1.将LED灯的长脚接入P1.0口,短脚接入220欧姆电阻,再将电阻的另一端接入GND。
2.编写程序,使用计数器控制LED1闪烁指定次数后,LED2开始闪烁,重复这个过程。
3.将程序下载到51单片机中。
4.连接电源,观察LED灯的闪烁情况。
实验程序:
```c
#include <reg51.h>
#define LED1 P1_0
#define LED2 P1_1
void Delay(unsigned int t) // 延时函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void Timer0Init() // 定时器初始化函数
{
TMOD |= 0x01; // 定时器0,模式1(16位计数器)
TH0 = 0xFC; // 定时器计数初值,定时1ms
TL0 = 0x66;
ET0 = 1; // 打开定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 打开总中断
}
void main()
{
unsigned char cnt = 0;
Timer0Init(); // 初始化定时器
LED1 = 1; // 初始状态LED1亮,LED2灭
LED2 = 0;
while(1)
{
if(cnt == 10) // LED1闪烁10次后,LED2开始闪烁
{
LED1 = 1;
LED2 = 0;
}
if(cnt == 20) // LED2闪烁10次后,LED1开始闪烁
{
LED1 = 0;
LED2 = 1;
cnt = 0;
}
}
}
void Timer0() interrupt 1 // 定时器0中断服务函数
{
TH0 = 0xFC; // 重新赋初值
TL0 = 0x66;
cnt++; // 计数器加1
}
```
实验结果:
实验成功,按照程序设计,LED灯依次闪烁,当LED1闪烁10次后,LED2开始闪烁,LED2闪烁10次后,LED1重新开始闪烁,如此循环,实现了使用计数器来控制LED灯的闪烁次数的功能。
阅读全文