setb p1^0
pUSH 04H
PUSH 05H
PUSH 06H
MOV R4,#50
DELAY5S_0:MOV R5,#200
DELAY5S_1:MOV R6,#245
DJNZ R6,$
DJNZ R5,DELAY5S_1
DJNZ R4,DELAY5S_0
POP 06H
POP 05H
POP 04H
clr p1^0
pUSH 04H
PUSH 05H
PUSH 06H
MOV R4,#50
DELAY5S_0:MOV R5,#200
DELAY5S_1:MOV R6,#245
DJNZ R6,$
DJNZ R5,DELAY5S_1
DJNZ R4,DELAY5S_0
POP 06H
POP 05H
POP 04H
pUSH 04H
PUSH 05H
PUSH 06H
MOV R4,#50
DELAY5S_0:MOV R5,#200
DELAY5S_1:MOV R6,#245
DJNZ R6,$
DJNZ R5,DELAY5S_1
DJNZ R4,DELAY5S_0
POP 06H
POP 05H
POP 04H
ORG 0000H
LJMP MAIN
ORG 000B ;定時(shí)器T0中斷程序入口地址
LJMP IST0
ORG 0030H
MAIN: JNB P3.0 NEXT ;P3.0接開關(guān)
LJMP MAIN
NEXT:CLR P1.0
MOV 30H,#00H ;用軟件計(jì)數(shù)器
MOV 31H,#00H
MOV TMOD,#01H ;用定時(shí)器T0,并設(shè)置在方式1,在定時(shí)狀態(tài)。
MOV TH0,#3CH ;設(shè)置初值15536,讓定時(shí)器定時(shí)50000us。
MOV TL0,#B0H
SETB ET0 ;打開T0中斷。
SETB EA ;打開中斷總開關(guān)。
MOV TCON,#10H(或者:SETB TR0) ;開啟定時(shí)。
LJMP $
IST0:PUSH ACC ;中斷服務(wù)子程序。
PUSH PSW
INC 30H
INC 31H
MOV A,30H
CJNE A,#100,NEXT1 ;讓其定時(shí)50000us X 100=5s。
SETB P1.0 5s后P1.0滅。
MOV 30H,#00H
MOV TH0,#3CH ;重裝初值,需要繼續(xù)引起中斷。
MOV TL0,#B0H
NEXT1:MOV A,31H ;繼續(xù)定時(shí)。
CJNE A,#200,LOOP1 ;定時(shí)10s后,P1.1亮。
CLR P1.1
MOV 31H,#00H
LOOP1:MOV TH0,#3CH 重裝初值。。
MOV TL0,#B0H
POP PSW
POP ACC
RETI 中斷返回
END
說明:此程序未在實(shí)驗(yàn)板上驗(yàn)證過,只提供一種思路。。。
#include <reg51.h>
sbit led = P1^1;
sbit key = P1^0;
unsigned char x,y;
void delay(void)
{
unsigned char i,j,k;
for(..;...;..)
for(..;...;..)
for(..;...;..);
} //延時(shí)1秒;
void main(void)
{
if(key==0)
{
led=0;
for(x=5;x>0;x--) //點(diǎn)亮5秒;
{
delay();
}
led=1; //熄滅10s;
for(x=10;x>0;x--)
{
delay();
}
led=0;
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |