求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢

求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢,第1张

#include<reg51h>

#define uchar unsigned char

uchar led=0xfe;

sbit kr=P3^2;

sbit kl=P3^3;

uchar key;

void delay(uchar a)

{

uchar i;

while(a--)for(i=0;i<120;i++);

}

void ext0() interrupt 0

{

key=1;

while(kr==0);

}

void ext1() interrupt 2

{

key=2;

while(kl==0);

}

main()

{

EX0=1;

EX1=1;

IT0=1;

IT1=1;

EA=1;

while(1)

    {

    if(key==1){P1=led;led=_cror_(led,1);}

    else if(key==2){P1=led;led=_crol_(led,1);}

    else P1=0xff;

    delay(200);

    }

}

TLOW    EQU  0F0H

THIGH   EQU  0D8H

FLAG_DIR    BIT 20H0;FANGXIANG

COUNT_INT   DATA 30H

COUNT_K     DATA 31H

LEDVALUE    DATA 32H

COUNT_KEY   DATA 33H

KEY0    EQU P20

KEY1    EQU P21

KEY2    EQU P22

KEY3    EQU P23

;--------------------------------------------------

ORG  0000H

JMP  MAIN

ORG  0BH

JMP  T0_INT

;--------------------------------------------------

MAIN:

MOV  SP,#60H

CALL  INIT_TIMER

SETB  TR0

    CLR FLAG_DIR

    MOV LEDVALUE,#01H

    MOV COUNT_KEY,#50

    MOV COUNT_K,#50

MAIN_LOOP:

READKEY0:

    JB KEY0,READKEY1

    JNB KEY0,$

    SETB FLAG_DIR

    AJMP READKEYEND

READKEY1:

    JB KEY1,READKEY2

    JNB KEY1,$

    CLR FLAG_DIR

    AJMP READKEYEND

READKEY2:

    JB KEY3,READKEY3

    JNB KEY3,$

    CLR C

    MOV A,COUNT_KEY

    ADDC A,#5

    JNC COUNT_KEY_NOT_OV

    MOV A,#250

COUNT_KEY_NOT_OV:    

    MOV COUNT_KEY,A

    MOV COUNT_K,A 

    AJMP READKEYEND

READKEY3:

    JB KEY2,READKEYEND  

    JNB KEY2,$    

    MOV A,COUNT_KEY

    SUBB A,#5

    JNC COUNT_KEY_NOT_OV2

    MOV A,#5

COUNT_KEY_NOT_OV2:     

    MOV COUNT_KEY,A

    MOV COUNT_K,A

    AJMP READKEYEND

READKEYEND:    

 ;   MOV A,COUNT_KEY

;    MOV COUNT_K,A

JMP MAIN_LOOP

;;-------------------------   

;;-------------------------

INIT_TIMER:                ;初始化定时器

MOV  TMOD,#01H    ;设置定时器0 工作模式为模式1

MOV  IE,  #82H    ;启用定时器0 中断产生

MOV  TL0,#TLOW      ;10MS

MOV  TH0,#THIGH

RET

;;-------------------------

T0_INT:

PUSH  ACC

PUSH  PSW

MOV  TL0,#TLOW

MOV  TH0,#THIGH

    INC COUNT_INT

    MOV A,COUNT_INT

    CJNE A,#1,RUNOUT

    MOV COUNT_INT,#0

    DJNZ COUNT_K,RUNOUT

    MOV A,COUNT_KEY

    MOV COUNT_K,A

RUN:   

    JB  FLAG_DIR,RUN_R;

RUN_L:

    MOV A,LEDVALUE

    RL A

    MOV LEDVALUE,A

    AJMP RUNOUT

RUN_R:

    MOV A,LEDVALUE

    RR A

    MOV LEDVALUE,A

    AJMP RUNOUT  

RUNOUT:

 ;   MOV A,LEDVALUE

    MOV P0,LEDVALUE

T0_T:

POP PSW

   POP  ACC

RETI

;;-------------------------

END

#include "REG52H"

// 显示花样流水灯编码

const unsigned char Expetr_ROM[] = { 0xFD, 0xF7, 0xDF, 0x7F, 0xFE, 0xFB, 0xEF, 0xBF

} ;

// 延时1ms

void Delay_1ms(unsigned int Cnt)

{

unsigned int x, y;

for(x = Cnt; x > 0; x--)

for(y = 120; y > 0; y--);

}

int main(void)

{

unsigned char i;

while(1)

{

for(i = 0; i < 8; i++)

{

P1 = Expetr_ROM[i];

Delay_1ms(500);

}

}

}

以上就是关于求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢全部的内容,包括:求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢、求汇编单片机程序 请问如何用四个键来控制流水灯的快慢和左右流向,例如: k0:流水灯向左闪 k1:、单片机流水灯c语言程序。灯按从左到右2468然后1357依次循环亮。速求啊!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10174969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存