此程序上电后开始显示并不正常,过一会才正常,按键似乎并没有用,希望能明白怎么回事
频率12mhz ,从零开始计到99秒,原理为先通过十六进制和十进制的转换后使用变址寻址把数据
显示出来,十位和各位共延时4毫秒,如果有按键按下计数从零开始
DIZHI EQU 21H ;用于中间的数据传送 COUNT EQU 22H ;用于计数器的自加 ORG 0000H JMP START ORG 0030H TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极代码 START: CLR COUNT WORK1: CALL DISPY ;十六进制的转换,输出代码显示 INC COUNT JNB P2.0 , FUYUAN ;s4按下从零开始计数 MOV A ,COUNT CJNE A ,#100 ,WORK2 CLR COUNT CALL START WORK2: LJMP WORK1 DISPY: MOV A ,COUNT MOV B ,#10 DIV AB MOV R1 ,#250 ;寄存器计数250次,一次4毫秒 MOV DIZHI ,A DISP: MOV A ,DIZHI ;数据的中间交换 MOV DPTR ,#TAB MOVC A ,@ A+DPTR;变址寻址 MOV P0 ,A ;P0为段选 CLR P2.5 ;P2位选,显示十位 CALL DEL SETB P2.5 MOV A ,B MOVC A , @A+DPTR MOV P0 ,A ;显示个位 CLR P2.4 CALL DEL SETB P2.4 DJNZ R1 ,DISP RET FUYUAN:CALL DEL MOV P0 ,#11111111B MOV P2 ,#11111111B LJMP START ;从零开始 DEL: MOV R6 ,#4 F1: MOV R7, #250 ;延时两个毫秒 F2: DJNZ R7 ,F2 DJNZ R6 ,F1 RET END