SETB TR1//启动定时器 1 TBACK: POP PSW POP ACC RETI7 TIME2: SETB P1.2 //关掉电灯 CLR TR1//关闭定时器 1 RETI TRANS: MOV 3CH,LDAN //亮度档值显示拆字 MOV 3EH,#16 MOV 3FH,#17 RET DISP: MOV DIRLOP,#4 //串行显示程序( 4位数码管) MOV R0,#3FH //3CH 到3FH 是显示缓冲区 DL0: MOV A,@R0 MOV DPTR,#TAB MOVC A,@A+DPTR //查得相应的七段代码 MOV SBUF,A //串行发送 DL1: JNB TI,DL1 CLR TI DEC R0 DJNZ DIRLOP,DL0 RET TAB: DB0FCH,60H,0DAH,0F2H,66H,0B6H //共阴七段数码管代码表 DB0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH DB7AH,9EH,8EH,02H,1CH END ②无级调光源程序 DIRLOP EQU 38H //显示字节数 DISP0 EQU 39H //串行显示寄存器 0 DISP1 EQU 3AH //串行显示寄存器 1 DISP2 EQU 3BH //串行显示寄存器 2 LDAN EQU 58H //电灯亮度档值 T2H EQU 59H //T1 高8位定时值存储器 T2D EQU 5AH //T1 低8位定时值存储器 LAMP EQU P1.2 // 0000H AJMP 000BH LJMP TIME1 //T0 中断程序(产生 PWM 基频) ORG 001BH LJMP TIME2 //T1 中断程序(控制脉冲宽度) ORG 0030H START: SETB LAMP //程序初始化 MOV A,#0 MOV LDAN,A