欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機如何讓按鍵控制LED燈常亮30分鐘后熄滅,下次按按鍵后繼續亮30分鐘后熄滅
[打印本頁]
作者:
79498
時間:
2020-7-16 19:01
標題:
單片機如何讓按鍵控制LED燈常亮30分鐘后熄滅,下次按按鍵后繼續亮30分鐘后熄滅
本帖最后由 79498 于 2020-7-17 12:00 編輯
用定時器做的,但是LED燈只是第一次閃爍后常亮30分鐘后熄滅,第二次按按鍵后就是一直亮了,不知道為什么,請一些高手解答下。
測試代碼如下 最重要的就是第一次定時可以 第二次就不行了 STC15W100的芯片
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u1;
typedef unsigned char u2; //
unsigned char d;
unsigned char n=0;
uchar min=1; sec=59; //
uchar flag;//
sbit led2=P3^0; //
sbit led1=P3^1; //
sbit cd=P3^2; //
sbit uv=P3^3; //
sbit k1=P3^4;
bit flash;//
bit key;
sfr IE2=0xAF;
sfr AUXR=0x8E;
sfr T2H=0xD6;
sfr T2L=0xD7;
void shijian(); //
/*************************************
*************************************/
void delay_1s()
{
int a,b;
for(a=1000;a>0;a--)
for(b=150;b>0;b--);
}
/*************************************
*************************************/
void keypros()
{
if(k1==0)
{
delay_1s();
if(k1==0)
{
flash=~flash;
key=1;
}
}
while(!k1);
}
/*************************************
*************************************/
void ledflash()
{
if(flash==1&&key==1)
{
for(d=0;d<10;d++)
{
led1=0;
delay_1s();
led1=1;
delay_1s();
}
key=0;
led1=0;
uv=1;
}
if(flash==0)
{
led1=1;
uv=0;
}
}
/*************************************
*************************************/
void Int1Init() //
{
IT0=1;
EX0=1;
EA=1;
}
/*************************************
*************************************/
void Timer2Init() //
{
IE2|=0x04;
T2H=(65536-50000)/256;
T2L=(65536-50000)%256;
EA=1; //
AUXR|=0x10; //
}
/*************************************
*************************************/
void main()
{
led1=1;
uv=0;
led2=1;
flash=0;
Timer2Init();
while(1)
{
keypros();
ledflash();
Int1Init();
}
}
/*************************************
*************************************/
void Int0() interrupt 0 //
{
if(cd==0)
{
uv=0; //
led2=~led2; //
}
else
{
led2=1;
}
}
/*************************************
*************************************/
void Timer2() interrupt 12
{
T2H=(65536-50000)/256;
T2L=(65536-50000)%256;
flag++;
if(min==0&&sec==0)
{
uv=0;
}
if(flag>=20)
{
flag=0;
sec--;
if(sec<=0)
{
sec=59;
min--;
if(min<=0)
{
min=0;
sec=0;
AUXR|=0x00;
}
}
}
}
作者:
匯源科技
時間:
2020-7-16 20:19
是不是計時沒清0,
作者:
sommer78
時間:
2020-7-16 20:31
定時器要設置成重載型,你這個一次定時,肯定后面就沒有了。
作者:
wulin
時間:
2020-7-16 23:08
定時器周期50ms,按鍵按下燈亮,賦值變量36000,定時中斷一次變量減1,減到0燈滅結束。
作者:
zhai1995
時間:
2020-7-17 09:25
如果你可以在線仿真調試的話,看下每個變量的數據變化,你應該就可以找到原因啦。
作者:
權威人物
時間:
2020-7-17 09:29
發程序啊!你這樣只能用猜的了,我猜你某個變量沒清除、標志位沒處理好或者定時器沒清
作者:
壓著我頭發啦
時間:
2020-7-17 11:18
#include <reg51.h>
#define uchar unsigned char//o궨òå
#define uint unsigned int//o궨òå
sbit LED1 = P2^2;
sbit KEY = P2^3;
uchar u,num;
sfr AUXR=0x8E;
void init()
{
KEY=1;
LED1=1;
TMOD=0x01;
TH0=(65536-45872)/256; //11.0592M?50ms??45872
TL0=(65536-45872)%256;
EA=1;
ET0=1;
}
void delay_1ms(uint t)//Ñóê±
{
uint i;
while(--t)
for(i=0;i<600;i++);
}
void main()
{
init();
while(1)
{
if(KEY==0)
{
delay_1ms(20);
if(KEY==0)
{
while(KEY==0);
LED1=0;
TR0=1;
}
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256; //11.0592M?50ms??45872
TL0=(65536-45872)%256;
num++;
if(num==40)
{
num=0;
LED1=1;
TR0=0;
}
}
復制代碼
作者:
壓著我頭發啦
時間:
2020-7-17 11:19
壓著我頭發啦 發表于 2020-7-17 11:18
我試著寫了下,用proteus看了下。可以用
作者:
pcl001
時間:
2020-7-17 11:47
可以用定時器查詢,或者遞增
作者:
79498
時間:
2020-7-20 14:18
感謝各位大佬講解,已經弄好了 定時器清零后未賦值,所以工作一次
作者:
Roy-2010
時間:
2020-8-7 16:38
不用單片機。用電容。容量足夠大就可以實現。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1