⑴ 單片機怎樣實現斷開開關後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;