单片机怎么延时闪烁LED灯
//定时器中断控制的独立式键盘扫描实验#include//包含51单片机寄存器定义的头文件sbitS3=P1^6;//将S3位定义为P1.6引脚sbitS4=P1^7;/...
//定时器中断控制的独立式键盘扫描实验#include//包含51单片机寄存器定义的头文件sbitS3=P1^6; //将S3位定义为P1.6引脚sbitS4=P1^7; //将S4位定义为P1.7引脚unsignedchar keyval; //储存按键值voidled_delay(void){ unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ;}voidstop(void){ P0=0xff; //关闭8个LED}voidflash(void){ P0=0xff; //关闭8个LED led_delay(); P0=0x00; //点亮8个LED led_delay();} voidmain(void) //主函数{ TMOD=0x01; //使用定时器T0的模式1 EA=1; //开总中断 ET0=1; //定时器T0中断允许 TR0=1; //启动定时器T0 TH0=(65536-1000)/256; //定时器T0赋初值,每计数200次(217微秒)发送一次中断请求 TL0=(65536-1000)%256; //定时器T0赋初值 keyval=0; //按键值初始化为0,什么也不做 while(1) { switch(keyval) { case 3:stop(); break; case 4: flash(); break; } }} /***函数功能:定时器T0的中断服务子程序***/voidTime0_serve(void) interrupt 1 using 1{ if((P1&0xf0)!=0xf0) //第一次检测到有键按下 { delay20ms(); //延时20ms再去检测 if(S3==0) //按键S3被按下 keyval=3; if(S4==0) //按键S4被按下 keyval=4; } TH0=(65536-1000)/256; TL0=(65536-1000)%256;}
我调节灯的闪烁频率2秒钟,但是不知道中断指令应该加在哪里。 展开
我调节灯的闪烁频率2秒钟,但是不知道中断指令应该加在哪里。 展开
展开全部
这是我写的五种方式流水灯:
#include<reg52.h> //五种花样流水灯
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint a,b=7,e,f=4,h;
uchar c,d;
uchar code deng[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯位置
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
} //延时
void y1() //第一流水灯程序 指针
{
while(h<=16&&h>=0)
{
P1=*(deng+a);
delay(200);
a++;
if(a==8)
a=0;h++;
}
}
void y2() //第二流水灯程序 数组
{
while(h<=30&&h>16)
{
P1=deng[b];
delay(100);
b--;
if(b==0)
b=7;h++;
}
}
void y3() //第三流水灯程序 左右移
{
c=0xe7;
while(h<=43&&h>30)
{
P1=c;
delay(500);
c=c>>1;
c=c<<2;h++;
}
}
void y4() //第四流水灯程序 库函数
{
d=0xaa;
while(h<=51&&h>43)
{
P1=d;
delay(100);
d=_crol_(d,1);h++;
}
}
void y5() //第五流水灯 定时器
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(h>51)
{
P1=deng[f];h++;
}
}
void y() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
e++;
if(e==6)
e=0;
f++;
if(f==8)
f=0;
}
void main()
{
while(1)
{
y1();
y2();
y3();
y4();
y5();
}
}
#include<reg52.h> //五种花样流水灯
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint a,b=7,e,f=4,h;
uchar c,d;
uchar code deng[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯位置
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
} //延时
void y1() //第一流水灯程序 指针
{
while(h<=16&&h>=0)
{
P1=*(deng+a);
delay(200);
a++;
if(a==8)
a=0;h++;
}
}
void y2() //第二流水灯程序 数组
{
while(h<=30&&h>16)
{
P1=deng[b];
delay(100);
b--;
if(b==0)
b=7;h++;
}
}
void y3() //第三流水灯程序 左右移
{
c=0xe7;
while(h<=43&&h>30)
{
P1=c;
delay(500);
c=c>>1;
c=c<<2;h++;
}
}
void y4() //第四流水灯程序 库函数
{
d=0xaa;
while(h<=51&&h>43)
{
P1=d;
delay(100);
d=_crol_(d,1);h++;
}
}
void y5() //第五流水灯 定时器
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(h>51)
{
P1=deng[f];h++;
}
}
void y() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
e++;
if(e==6)
e=0;
f++;
if(f==8)
f=0;
}
void main()
{
while(1)
{
y1();
y2();
y3();
y4();
y5();
}
}
更多追问追答
追问
可以任意调用其中某一组灯,并且让某一组只做单循环么。我想用按键控制任意一组灯的开停
追答
这是可以的,你以按键做标志位,每个标志时执行一种亮灯方式就行了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询