;特別說明,本程序僅供單片機(jī)愛好者自己學(xué)習(xí)使用, ;不得做為其它商業(yè)用途 ;此程序在硬件上調(diào)試通 ;晶振頻率為11.0592MHZ ;用定時器1延時,外部中斷0接緊急控制 ;R0為100MS延時常數(shù),R2為狀態(tài)延時常數(shù) ;8279控制數(shù)碼管顯示時間 ;用P1口控制雙色燈 ;此程序?qū)懹?007-7-6,作者:徐學(xué)軍 Z8279 EQU 0FF82H ;8279 狀態(tài)/命令口地址 D8279 EQU 0FF80H ;8279 數(shù)據(jù)口地址 LEDMOD EQU 00H ;左邊輸入 八位字符顯示 ;外部譯碼鍵掃描方式,雙鍵互鎖 LEDFEQ EQU 33H ;掃描速率 LEDCLS EQU 0C1H ;清除顯示 RAM LEDWR0 EQU 80H ;設(shè)定的將要寫入的顯示RAM地址 ORG 0000H LJMP START ORG 0003H ;INT 0 中斷入口地址 LJMP INT_0 ORG 001BH ;T1中斷入口地址 LJMP INT_T1 ORG 0040H START: MOV SP,#60H MOV TMOD,#10H ;置T1為方式1 SETB EX0 ;INT 0 中斷有效 SETB IT0 SETB EA MOV TL1,#00H ;延時50mS常數(shù) MOV TH1,#4cH MOV R0,#2 ;延時100mS常數(shù) SETB TR1 ;啟動T1 SETB ET1 setb pt1 ;必須設(shè)置定時器1的中斷優(yōu)先級高于外部中斷0 LCALL INIT8279 ;初始化8279 LCALL STATUS0 ;初始狀態(tài)(都是紅燈) CIRCLE: LCALL STATUS1 ;南北綠燈,東西紅燈 LCALL STATUS2 ;南北綠燈閃轉(zhuǎn)黃燈,東西紅燈 LCALL STATUS3 ;南北紅燈,東西綠燈 LCALL STATUS4 ;南北紅燈,東西綠燈閃轉(zhuǎn)黃燈 LJMP CIRCLE INT_0: PUSH PSW ;保護(hù)現(xiàn)場 PUSH 2 PUSH 90H clr ex0 MOV P1,#0FH ;南北,東西都亮紅燈 MOV R2,#100 ;延時10秒 LCALL DELAY_DISPLAY setb ex0 POP 90H ;恢復(fù)現(xiàn)場 POP 2 POP PSW RETI INT_T1: PUSH ACC PUSH PSW CLR TR1 MOV TL1,#00H ;延時 50mS 常數(shù) MOV TH1,#4CH SETB TR1 DJNZ R0,EXIT MOV R0,#2 ;延時 100ms常數(shù) DEC R2 EXIT: POP PSW POP ACC RETI STATUS0: ;南北紅燈,東西紅燈 MOV P1,#0FH MOV R2,#10 ;延時1秒 LCALL DELAY_DISPLAY RET STATUS1: ;南北綠燈,東西紅燈 MOV P1,#96H ;南北綠燈,東西紅燈 MOV R2,#200 ;延時20秒 LCALL DELAY_DISPLAY RET STATUS2: ;南北綠燈閃轉(zhuǎn)黃燈,東西紅燈 MOV R3,#03H ;綠燈閃3次 FLASH: MOV P1,#9FH MOV R2,#03H LCALL DELAY_DISPLAY MOV P1,#96H MOV R2,#03H LCALL DELAY_DISPLAY DJNZ R3,FLASH MOV P1,#06H ;南北黃燈,東西紅燈 MOV R2,#10 ;延時1秒 LCALL DELAY_DISPLAY RET STATUS3: ;南北紅燈,東西綠燈 MOV P1,#69H MOV R2,#200 ;延時20秒 LCALL DELAY_DISPLAY RET STATUS4: ;南北紅燈,東西綠燈閃轉(zhuǎn)黃燈 MOV R3,#03H ;綠燈閃3次 FLASH1: MOV P1,#6FH MOV R2,#03H LCALL DELAY_DISPLAY MOV P1,#69H MOV R2,#03H LCALL DELAY_DISPLAY DJNZ R3,FLASH1 MOV P1,#09H ;南北紅燈,東西黃燈 MOV R2,#10 ;延時1秒 LCALL DELAY_DISPLAY NOP RET INIT8279: ;8279初始化子程序 PUSH DPH ;保存現(xiàn)場 PUSH DPL PUSH ACC LCALL DELAY ;延時 MOV DPTR ,#Z8279 MOV A,#LEDMOD ;置8279工作方式 MOVX @DPTR,A MOV A,#LEDFEQ ;置鍵盤掃描速率 MOVX @DPTR,A MOV A,#LEDCLS ;清除 LED 顯示 MOVX @DPTR,A LCALL DELAY ;延時 POP ACC ;恢復(fù)現(xiàn)場 POP DPL POP DPH RET ;顯示字符子程序 ;輸入: R4,位置 R5,值 DISLED: PUSH DPH ;保存現(xiàn)場 PUSH DPL PUSH ACC MOV A,#LEDWR0 ;置顯示起始地址 ADD A,R4 ;加位置偏移量 MOV DPTR,#Z8279 MOVX @DPTR,A ;設(shè)定顯示位置 MOV DPTR,#LEDSEG ;置顯示常數(shù)表起始位置 MOV A,R5 MOVC A,@A+DPTR ;查表 MOV DPTR,#D8279 MOVX @DPTR,A ;顯示數(shù)據(jù) POP ACC ;恢復(fù)現(xiàn)場 POP DPL POP DPH RET DELAY: ;延時子程序 PUSH 0 ;保存現(xiàn)場 PUSH 1 MOV 0,#0H DELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ;恢復(fù)現(xiàn)場 POP 0 RET DELAY_DISPLAY: ;延時和顯示時間子程序 PUSH 1 PUSH 0 push acc loopwait: MOV b,#10 MOV a,2 div ab MOV b,#10 div ab MOV r4,#1 MOV r5,a LCALL DISLED ;顯示秒高位 MOV r4,#0 MOV r5,b LCALL DISLED ;顯示秒低位 MOV a,2 jnz loopwait ;延時等待 pop acc POP 0 POP 1 RET LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' END
|