#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依次循环亮。速求啊!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)