ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 0030H
MAIN:
MOV SP,#5FH ;堆栈顶设为5FH
SETB EA ;开中断
SETB IT0 ;外部中断0沿触发
SETB EX0 ;开外部中断0
MOV 30H,#0 ;计数初值为0
SJMP $ ;死循环
EXTINT0:
INC 30H ;计数器加1
RETI ;中断返回
END
//晶振12M
KEY BIT P32 ;按键接P32
LED_bits BIT P31;个位显示控制端
LED_ten BIT P30;十位显示控制端
DATA_bits DATA 30H;个位
DATA_ten DATA 31H;十位
ORG 00H
LJMP MAIN
ORG 30H
MAIN: ;主程序
SETB LED_bits
SETB LED_ten
SETB KEY
MOV DATA_bits,#0
MOV DATA_ten,#0
LOOP:
ACALL DISPLAY;显示
ACALL KEY_COUNT;键控
LJMP LOOP
KEY_COUNT:;键控计数
JB KEY, KEY_END
ACALL DELAY10MS
JNB KEY,$
ACALL COUNT
KEY_END:
RET
COUNT: ;计数
INC DATA_bits
MOV A,DATA_bits
CJNE A,#10,COUNT_END
MOV DATA_bits,#0
INC DATA_ten
MOV A,DATA_ten
CJNE A,#10,COUNT_END
MOV DATA_ten,#0
COUNT_END:
RET
DISPLAY: ;显示
MOV A,DATA_bits
MOV DPTR,#LEDSHOW
MOVC A,@A+DPTR
MOV P2,A
CLR LED_bits
ACALL DELAY1MS
SETB LED_bits
MOV A,DATA_ten
MOV DPTR,#LEDSHOW
MOVC A,@A+DPTR
MOV P2,A
CLR LED_ten
ACALL DELAY1MS
SETB LED_ten
RET
DELAY10MS: ;误差 0us
MOV R7,#01H
DL1:
MOV R6,#26H
DL0:
MOV R5,#82H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
DELAY1MS: ;误差 0us
MOV R7,#01H
DL3:
MOV R6,#8EH
DL2:
MOV R5,#02H
DJNZ R5,$
DJNZ R6,DL2
DJNZ R7,DL3
RET
LEDSHOW:
DB 03FH;0
DB 006H;1
DB 05BH;2
DB 04FH;3
DB 066H;4
DB 06DH;5
DB 07DH;6
DB 007H;7
DB 07FH;8
DB 06FH;9
END
在按键按下后,用循环语句,等待抬起计数
if(按键按下){
延时;
if(按键按下)
{
while(按键没有松开); //如果按键没有松开,程序会停在这里
count++; //按键松开后,程序会运行到这里,计数值加1
}
}
以上就是关于51单片机用计数器中断实现100以内的按键计数,汇编语言程序是怎样的,能帮忙一下么,谢谢啦。。。全部的内容,包括:51单片机用计数器中断实现100以内的按键计数,汇编语言程序是怎样的,能帮忙一下么,谢谢啦。。。、汇编语言编程,一个按键,一个2位数码管,实现按键计数显示在数码管上。、51单片机 按键按下去 计数一次 程序应该怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)