導航:首頁 > 操作系統 > 單片機led延時

單片機led延時

發布時間:2022-12-15 21:10:56

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

閱讀全文

與單片機led延時相關的資料

熱點內容
怎麼qq相冊加密自己也不能看 瀏覽:22
linuxc語言串口數據 瀏覽:857
mac下編寫python 瀏覽:973
厚襯衣程序員 瀏覽:743
一年級編程精彩內容 瀏覽:578
cc2540編程 瀏覽:794
越南離北京源碼 瀏覽:639
服裝展示網站源碼 瀏覽:325
編譯器過度優化線 瀏覽:689
安卓怎麼邊瀏覽邊錄視頻 瀏覽:653
分支限界java 瀏覽:389
phpdiscuz登錄 瀏覽:182
epr伺服器50人要什麼配置 瀏覽:780
雲伺服器ecs如何轉移 瀏覽:558
android仿應用寶 瀏覽:379
php連接mysql資料庫的方法 瀏覽:109
螺桿製冷壓縮機油鏡怎樣判斷 瀏覽:126
本地電腦如何做伺服器配置 瀏覽:860
如何對app的版權進行保護 瀏覽:822
小孩子用什麼app軟體 瀏覽:733