让LED从L1开始流到L8,(间隔1S,使用定时器)然后全灭LED,然后从L1开始进行呼吸灯状态。之后L1,L3,L5,L7点亮,然后L2,L4,L6,L8点亮。最后所有LED全亮
#include <REGX52.H>
#include<INTRINS.H>
sbit LED = P2 ^ 0;
unsigned int TOTOTO = 0;
int number = 0;
unsigned int Time;
unsigned int i;
//配置定时器
void Timer0Init(void) //定时器1ms@12.000MHz
{
TMOD &= 0xF0; //工作模式寄存器TMOD配置 只配置了定时器0
TMOD |= 0x01; // TCON控制寄存器配置中TF1和TR1是定时器1,TF0和TR0是定时器0
TL0 = 0x18; //是低位寄存器赋初值 提升计数器初始时间
TH0 = 0xFC; //是高位寄存器赋初值 提升计数器初始时间
TF0 = 0; //等于1是产生中断,清零
TR0 = 1; //等于1是定时器0开启
ET0 = 1; //等于1是中断路线连接
EA = 1; //等于1是中断路线中开关连接
PT0 = 0; //等于0是默认等于0 开关拨下 联通
}
//延时函数
void Delay(unsigned int t)
{
while (t--);
}
//主函数
void main()
{
Timer0Init();
while (1)
{
}
}
//定时器0的中断程序
void Timer0_Routine() interrupt 1 //中断号
{
TL0 = 0x18; //计数器溢出归0 重新给计数器赋初值
TH0 = 0xFC;
TOTOTO++; //进入中断的次数,1ms进入1次
switch (TOTOTO) //用定时器每隔1s LED灯流水
{
case 1000:P2 = ~(0x01 << 0);
break;
case 2000:P2 = ~(0x01 << 1);
break;
case 3000:P2 = ~(0x01 << 2);
break;
case 4000:P2 = ~(0x01 << 3);
break;
case 5000:P2 = ~(0x01 << 4);
break;
case 6000:P2 = ~(0x01 << 5);
break;
case 7000:P2 = ~(0x01 << 6);
break;
case 8000:P2 = ~(0x01 << 7);
break;
}
// if(TOTOTO>=1000)
// {
//
//
// TOTOTO=0;
// P2=~(0x01<<number);
// number++;
// }
if (TOTOTO == 9000) //第九秒LED灯全灭
{
P2 = 0xFF;
}
if (TOTOTO == 10000) //第10秒LED1呼吸
{
for (Time = 0; Time < 50; Time++)//不断改变占空比
{
for (i = 0; i < 20; i++)//延长波形变化
{
LED = 0;
Delay(Time);
LED = 1;
Delay(50 - Time);
}
}
for (Time = 50; Time > 0; Time--)//从后往前报数
{
for (i = 0; i < 20; i++)
{
LED = 0;
Delay(Time);
LED = 1;
Delay(50 - Time);
}
}
}
if (TOTOTO == 11000)//第11秒1357灯亮
{
P2 = 0x55;
}
if (TOTOTO == 12000)//第12秒2468灯亮
{
P2 = 0xAA;
}
if (TOTOTO == 13000)//第13秒灯全亮
{
P2 = 0x00;
}文章来源:https://www.toymoban.com/news/detail-550151.html
}
文章来源地址https://www.toymoban.com/news/detail-550151.html
到了这里,关于51单片机用定时器控制流水灯,呼吸灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!