⑴ 单片机怎样实现断开开关后led延迟熄灭
在led=1之后加一个延时10s的语句即可
delays(10);
该 子程序网上很容易搜到
时间不准的话,可调实参的值
if(k==0)
{
led=1;
while(k==0);// 等待人员离开
delays(10);//10秒延时
}
⑵ 单片机编程,控制LED延时亮灭的程序,
#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar
#definePin00x01
#definePin10x02
#definePin20x04
#definePin30x08
#definePin40x10
#definePin50x20
#definePin60x40
#definePin70x80
sbitled1=P1^1;
sbitled2=P1^2;
sbitled3=P1^3;
sbitled4=P1^4;
sbitled5=P1^5;
sbitkg1=P3^1;
sbitkey2=P3^2;
sbitkey3=P3^3;
/****************************************/
voidinit() //初始化函数
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
/////////////////////////
u8s(){//扫描按键
staticu8ms;
u8t=0;
// if(key1==0)t|=Pin1;
if(key2==0)t|=Pin2;
if(key3==0)t|=Pin3;
if(t!=0x00){
if(ms<100)ms++;
if(ms==5){
returnt;
}
}elsems=0;
return0x00;
}
///////////////////////
typedefstruct{
u16time;//n毫秒后
u8l; //亮的灯
u8m; //灭的灯
}ledcmd;
#defineLED_CMD_SIZE10
codeledcmdlcmd[]={
{0,Pin2,0},//0s后led2亮
{500,Pin4,0,},//0.5s后led4亮
{1000,0,Pin4},//1s后led4灭
{300,Pin3,0,},
{300,Pin4,0,},
{1000,0,Pin4,},
{300,0,Pin2,},
{200,Pin5,0,},
{40,0,Pin5|Pin3},
{500,0,Pin1},
};
voidled_l(u8v){//亮灯程序
P1=P1&(~v);
}
voidled_m(u8v){//灭灯程序
P1=P1|(v);
}
u8ledzt=0xff;//led任务zt为0xff表示待机
u16ledjs;//倒计时
voidled_start(){//启动程序
ledzt=0;
ledjs=lcmd[ledzt].time;
}
voidledcx(){//led流程程序
if(ledzt<LED_CMD_SIZE){
if((ledjs==0)&&(ledzt<LED_CMD_SIZE)){//计时到0
ledzt++;
if(ledzt!=LED_CMD_SIZE){
ledjs=lcmd[ledzt].time;
}
}
if(ledzt>1){//
led_l(lcmd[ledzt-1].l);
led_m(lcmd[ledzt-1].m);
}
}
}
/***********************************/
voidmain()//主函数
{
u8k;
init();//系统初始化
TR0=1;//定时器开始计时
while(1){
if(ledzt==0xff){led1=(kg1!=0);};//led不在运行状态时根据开关改变led1
k=s();//读取按键值
if((k&Pin2)!=0){//key2
if(led1==0&&ledzt==0xff){
led_start();
}
}
if((k&Pin3)!=0){//key3
ledzt=0xff;
led_m(Pin2|Pin4);
}
ledcx();
}
}
/****************************/
voidtimer0()interrupt1//1ms定时器
{
TH0=(65536-1000)/256;//重载初值
TL0=(65536-1000)%256;
if(ledjs>0)ledjs--;
}
⑶ 单片机LED灯闪烁延迟程序
int main(void)
{
while(1)
{
D3=0;
yanshi();
D3=1;
yanshi();
}
}
注意单片机程序是从main函数开始执行的,注意单片机主函数内部不加while大循环,程序会一直往下执行,直到RAM溢出产生错误为止程序将跑飞,所以主程序内部一定要加大循环,上面的格式是经过无数工程师的验证,主函数的书写格式。
⑷ 51单片机led灯亮一秒停五秒程式怎么写
void delay_s(unsigned char t);
void main()
{
while(1)
{
led = 1;//led 亮
delay_s(1);//延时1s
led = 0;//led 暗
delay_s(5);//延时5s
}
}
这是主循环,你要把delay_s()这个延时函数补充进去,另外,led亮和暗的电平你得根据你得具体电路看是1亮还是0亮。
⑸ 给单片机一个高电平信号点亮LED。无信号LED延时10秒灭。LED亮灭过程加上pwm渐亮渐灭
可以分10个段,也就是10秒,PWM值从100到0每次减10,这样就可以实现这个效果了。
⑹ 单片机怎么延时闪烁LED灯
这是我写的五种方式流水灯:
#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();
}
}
⑺ 单片机按键控制LED延时,请高手帮忙修改。
很简单。
按下时,灯亮,同时累加计时。
松开时,递减计时,减到了零,灯灭。
⑻ 51单片机LED延时闪烁delay(50000); 用定时器延时代替delay(50000)延时怎么样写
//初始化函数:用于初始化各种参数
void init() {
TMOD = 0x01; //设置定时器0,GATE = 0, C/T = 0 , M1M0 = 01(方式1,16位定时器/计数器)
//赋初值
TH0 = THx;
TL0 = TLx;
EA = 1; //中断总闸·开!
ET0 = 1; //定时器0中断·开!
TR0 = 1; //定时器0·运行!
}
//定时器0的中断函数:由定时器中断自动调用,你只需要写好中断后要怎么处理就好
void timeInt_T0 () interrupt 1 {
//每中断一次都要重新赋初值
TH0 = THx;
TL0 = TLx;
//记够20次中断后,刷新显示
if(++counter == 20)
refresh();
}
⑼ 51单片机LED按键延时3秒一次点亮,取反按键依次熄灭程序是怎么写的
现功能:按下按键三个全亮,在按下LED2灭,再按下三个LED全灭,如此循环,相当于三档,第三档是停止。第一档和第二档定时5S,5S终了,停止运行,如果此时再按1次则回到第一档。如果5S之内按下,则切换到下一档,实现功能:按下按键三个全亮,在按下LED2灭,再按下三个LED全灭,如此循环,相当于三档,第三档是停止。第一档和第二档定时5S,5S终了,停止运行,如果此时再按1次则回到第一档。如果5S之内按下,则切换到下一档。
⑽ 单片机LED延时原理问题
这个是延时程序,你通过keil编译调试中,会看到其汇编代码;
当带入的参数=1时,你单步执行汇编代码,直至 ret,然后你看看都执行了哪些指令,并把所消耗的指令周期累加起来,大致就10个机器周期,而当单片机晶振为12MHz时,则一个机器周期约为 1uS,那么就是从进入这个延时程序到返回,所经历的时间正好是10uS;