如何实现两个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); //进入死循环,等待中断
}
有个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
这个要有一个时间算法表
在程序里面调用
在程序里面调用
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯