org 0000h ljmp start org 0013h ljmp ext1 org 0030h start: mov r7,#0ffh setb ea ;cpu开放中断 setb ex1 ;允许外部中断1申请中断 setb it1 ;设置外部中断1触发方式为跳变触发 lcall play1 ;调用初始状态显示子程序 ajmp $ ;等待按键发出中断申请 ext1: clr ea ;进入中断,先关闭中断 lcall play2 ;调用键识别子程序 pass: setb ea ;返回主程序之前先开中断 reti ;中断返回指令, play1: mov a,#0C0H ;让最右面的数码管显示0的子程序 mov p0,a mov p2,0 ret play2: inc r7 ;查表求段码,然后送到P0口的子程序. mov a,r7 mov dptr,#tab movc a,@a+dptr mov p0,a mov p2,0 cjne a,#06fH,next;如果没有显示到最后一个数字0,就继续查表显示 mov r7,#0ffh ;否则,重新从表头开始显示 next: ret del10ms: mov r5,#10 ;延时10ms子程序 del1: mov r4,#02h del2: mov r3,#0ffh del3: djnz r3,del3 djnz r4,del2 djnz r5,del1 ret tab: db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f ;存放0~9的段码表 end