原理图如下:
代码如下:
采用汇编语言
ORG 0000H;伪指令、程序开始、中断入口地址 LJMP MAIN ORG 0003H LJMP A1 ORG 000BH LJMP A2 ORG 0013H LJMP A3 ORG 1000H ;主程序 MAIN:MOV TMOD,#01H;设工作方式 MOV TL0,#0F0H;设初值,单片机晶振12M,定时10ms MOV TH0,#0D8H SETB EA;开放总中断 SETB ET0;开放T0中断 SETB TR0;启动T0定时 SETB EX0;开放外中断0 SETB EX1;开放外中断1 SETB IT0;设外中断0为边沿触发 CLR IT1;设外中断1为低电平有效 SETB PT0 CYCLE: MOV R0,#60;南北方向绿灯显示时间 MOV R1,#65;东西方向红灯显示时间 MOV R2,#25;为延时1秒而用 ;东西红灯南北绿灯 LOOP1:SETB P3.4 MOV P1,#01H SETB P1.7;点亮红灯 SETB P1.4;点亮绿灯 LCALL DISPLAY;调用显示程序 DJNZ R2,LOOP1 MOV R2,#25 DEC R1 DJNZ R0,LOOP1 MOV R0,#3;南北方向黄灯显示时间 ;东西红灯南北黄灯 LOOP2:MOV P1,#01H SETB P1.7;点亮红灯 SETB P1.3;点亮黄灯 LJ: LCALL DISPLAY;调用显示程序 CPL P1.3 DJNZ R2,LJ DEC R1 MOV R2,#25 DJNZ R0,LOOP2 MOV R0,#40;南北方向红灯显示时间 ;东西红灯南北红灯 LOOP3:MOV P1, #01H SETB P1.7;点亮红灯 SETB P1.2;点亮红灯 LCALL DISPLAY;调用显示程序 DJNZ R2,LOOP3 MOV R2,#25 DEC R0 DJNZ R1,LOOP3 MOV R1,#35;东西方向绿灯显示时间 ;东西绿灯南北红灯 LOOP4:MOV P1,#01H SETB P1.5;点亮绿灯 SETB P1.2;点亮红灯 LCALL DISPLAY ;调用显示程序 DJNZ R2,LOOP4 MOV R2,#25 DEC R0 DJNZ R1,LOOP4 MOV R1,#3;东西方向黄灯显示时间 ;东西黄灯南北红灯 LOOP5:MOV P1,#01H SETB P1.6;点亮黄灯 SETB P1.2;点亮红灯 LJ1:LCALL DISPLAY;调用显示程序 CPL P1.6 DJNZ R2,LJ1 MOV R2,#25 DEC R0 DJNZ R1,LOOP5 LJMP CYCLE ;键盘中断程序 A1:LCALL DISPLAY JB P3.6,Q2 INC R1 INC R0 CJNE R1,#99,JIAO2 MOV R1,#00H JIAO2:CJNE R0,#99,JIAO3 MOV R0,#00H JIAO3:LCALL DISPLAY JNB P1.0, Z2 Q2: JB P3.7,WAIT1 DEC R1 DEC R0 CJNE R1,#00H, JIAO MOV R1,#99 JIAO: CJNE R0,#00H, JIAO1 MOV R0, #99 JIAO1:LCALL DISPLAY WAIT1:JNB P1.0, Z2 WAIT: LJMP A1 Z2:RETI ;时间中断程序 A2:MOV TL0,#0F0H;重新赋值 MOV TH0,#0D8H CLR P3.4 RETI ;应急通道中断程序 A3:MOV P1,#85H MOV P0,#30H MOV P2,#35H JNB P3.3,A3 RETI ;数显显示 DISPLAY:MOV A,R0;东西方向时间的显示 MOV B,#10 DIV AB;把要显示的数的十位存放在A中,个位存放在B中 ADD A,#10H;位选通十位 MOV P0,A;显示十位数字 TI0:JNB P3.4,TT SJMP TI0 TT: SETB P3.4 MOV A,B ADD A,#20H;位选通个位 MOV P0,A;显示个位数字 TI1:JNB P3.4, TT1 SJMP TI1 TT1:SETB P3.4;南北方向的显示 MOV A,R1;南北方向时间的显示 MOV B,#10 DIV AB ADD A,#10H;位选通十位 MOV P2,A;显示十位数字 TI2:JNB P3.4, TT2 SJMP TI2 TT2:SETB P3.4 MOV A,B ADD A,#20H;位选通个位 MOV P2,A;显示个位数字 TI3:JNB P3.4, TT3 SJMP TI3 TT3:SETB P3.4 RET END
|