;-------------------------------------------- 
        ORG    0000H 
        AJMP   MAIN 
        ORG    0030H        ;程序从30H开始 
MAIN:   JB     P1.0,Check ;检测p1.0是否为高 
        AJMP   MAIN         ;循环检测 
Check:   MOV R1,#05H         ;赋值给R1 
        JB P1.0,START        ;在检测P1.0是否为高,是跳至 
        RET                 ; 
START:   CPL    P1.4         ;LED灯亮  
        LCALL  DELAY        ;延时 
        SETB  P1.4          ;LED灯消灭 
        LCALL DELAY         ;延时 
        DJNZ  R1,START       ;不是5次继续 
        JNB P1.0, $         ;等待下次按键被按下        
        RET 
;------ 延时子程序 ------ 
DELAY:  MOV   R7,#228 
SDL1:   MOV   R6,#0FFH 
SDL0:   DJNZ  R6,SDL0 
        DJNZ  R7,SDL1 
        RET 
        END 
程序的作用是P1。0连接一个按键,被按下在台起后(不考虑去抖),使连接在P1。4的LED灯闪亮5次后停止,等待下次触发P1。0 
 
用C语言怎样写 
#include <reg51.h> 
#define on  1 
#define off 0 
sbit led=P1^4; 
sbit key=P1^0; 
void delay100ms();//延时100ms函数 
void led_flash(unsigned char count);//led闪烁函数 
void main() 
{ 
while(1) 
        { 
                key=1;//置1输入 
                while(key==1);//等键按下 
                //delay();去抖延时 
                while(key==0);//等键抬起 
                led_flash(5);//led闪5次 
         } 
} 
void delay100ms() 
{ 
        unsigned char i,j; 
        for(i=200;i!=0;i--) 
                for(j=250;j!=0;j--); 
} 
void led_flash(unsigned char count) 
{ 
        while(count--) 
                { 
                        led=on; 
                        delay100ms(); 
                        led=off; 
                        delay100ms(); 
                 } 
} |