永发信息网

如何实现两个LED灯交替闪烁(要求:蓝灯连续闪两下停,接着红灯闪一下,然后蓝灯再闪两次这样交替循环)

答案:2  悬赏:0  手机版
解决时间 2021-04-06 02:05
  • 提问者网友:雾里闻花香
  • 2021-04-05 14:08
如何实现两个LED灯交替闪烁(要求:蓝灯连续闪两下停,接着红灯闪一下,然后蓝灯再闪两次这样交替循环)
最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-04-05 14:54
该功能如果用纯硬件,困难不小。给个51的吧,用1051或2051,体积非常小。
有个51的源程序,你看看能用吗。仿真测试过了(附图)

#include
#include 
#include
#include 
#define f_osc  12 //晶振频率
#define time0  20000 //定时20000μs(20ms)
unsigned char data time0_h,time0_l; //无符号8位字符
unsigned int idata time0_times; //有符号8位数据
unsigned char data out_kz = 0; //无符号8位字符
sbit mcout_z = P1^0;
sbit mcout_f = P1^1;
unsigned char sec=0,min=0,hour=0,count=0,hc_switch=0;
unsigned char TimeString[9];

void time0_init()
{
  TMOD=0x21; //定时器0方式1
  time0_times=65536-time0*f_osc/12;
  time0_h=(time0_times/256);
  time0_l=(time0_times%256);
  TH0=time0_h;
  TL0=time0_l;
  EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 //TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
 TR0=0;
 TH0=time0_h;   //重新赋值
 TL0=time0_l;
 
 count++;
 if(count==5)  //20ms×5=100ms(0.1s),这是最小时间间隔
   {count=0;
 out_kz++;
 if(out_kz==2)
   {mcout_z=1;}
 if(out_kz==3)
   {mcout_z=0;}
 if(out_kz==5)
   {mcout_z=1;}
 if(out_kz==10)
   {mcout_f=0;}
 if(out_kz==15)
   {mcout_f=1;}
 if(out_kz==20)
   {mcout_z=0;
    out_kz=0;}
}
  TR0=1;
}
//主程序
main()
{
time0_init(); //初始化定时器
TR0=1;    //启动定时器
while(1); //进入死循环,等待中断
}

全部回答
  • 1楼网友:長槍戰八方
  • 2021-04-05 15:49
这个要有一个时间算法表
在程序里面调用
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯