用51单片机做一个键盘显示,其中初始值是100,数值固化在ROM0032H中,然后将数值送<br /><br />到40H中,其中40H中的为16进制数,中断0为数值设置开始,P1.0增加,P1.1减小,用P0<br /><br />口显示40H,采用动态扫描方式显示,用P1.2,P1.3,P1.4作为片选控制,43H,42H,41H作为<br /><br />显示缓冲区,数据大小大于0,小于999,<br />ORG 0000H<br />AJMP MAIN<br />ORG 0003H<br />AJMP INSER<br />ORG 0030H<br />MAIN:MOV A,#00H;开中断<br />MOVC A,@A+PC<br />DB 64H<br />MOV 40H,A<br />MOV 43H,#01H<br />MOV 42H,#00H<br />MOV 41H,#00H<br />LCALL SHOW<br />SETB EX0<br />SETB IT0<br />SETB EA<br />HERE:LCALL SHOW;等待中断<br />AJMP HERE<br />LOOP1:INC A<br />MOV 40H,A<br />LCALL CHANGE<br />LCALL SHOW<br />MOV A,40H<br />LCALL DELAY<br />INSER:LCALL SHOW;判断增减<br />JB P1.0,LOOP<br />LCALL DELAY<br />JNB P1.0,LOOP1<br />AJMP LOOP<br />LOOP2:DEC A<br />MOV 40H,A<br />LCALL CHANGE<br />LCALL SHOW<br />MOV A,40H<br />LCALL DELAY<br />LOOP:LCALL SHOW<br />JB P1.1,INSER<br />LCALL DELAY<br />JNB P1.1,LOOP2<br />AJMP INSER<br />CHANGE:MOV B,#64H;16进制转10进制<br />DIV AB<br />JZ LP0<br />MOV 43H,A<br />MOV A,B<br />MOV B,#0AH<br />DIV AB<br />MOV 42H,A<br />MOV 41H,B<br />LP0:MOV 43H,#11H<br />MOV A,B<br />MOV B,0AH<br />DIV AB<br />JZ LP1<br />MOV 42H,A<br />MOV 41H,B<br />LP1:MOV 42H,#11H<br />MOV 41H,B<br />RETI<br />SHOW:MOV R0,#41H;显示<br />MOV DPTR,#TAB<br />CLR P1.3<br />CLR P1.4<br />SETB P1.2<br />MOV A,@R0<br />MOVC A,@A+DPTR<br />MOV P0,A<br />LCALL D1MS<br />INC R0<br />CLR P1.2<br />SETB P1.3<br />MOV A,@R0<br />MOVC A,@A+DPTR<br />MOV P0,A<br />LCALL D1MS<br />INC R0<br />CLR P1.3<br />SETB P1.4<br />MOV A,@R0<br />MOVC A,@A+DPTR<br />MOV P0,A<br />RETI<br />TAB:DB 3FH,06H,5BH,4FH,66H,6DH<br />DB 7DH,07H,7FH,6FH,77H,7CH<br />DB 39H,5EH,79H,71H,40H,00H<br />D1MS:MOV R7,#02H;延时1ms<br />DL:MOV R6,#0FFH<br />DL1:DJNZ R6,DL1<br />DJNZ R7,DL<br />RETI<br />DELAY:MOV R5,#0FAH;延时5ms<br />L1:MOV R4,#0AH<br />W1:DJNZ R4,W1<br />DJNZ R5,L1<br />RETI<br />搞了几次都不是想象的那样,PROTEUS图传不上 |