本文介紹一種新穎的汽車(chē)尾燈指示器,指示器由特制的發(fā)光二極管點(diǎn)陣組成,共有八組,每組同時(shí)點(diǎn)亮由九個(gè)發(fā)光二極管,置于汽車(chē)后玻璃窗上,共有五種顯示狀態(tài),當(dāng)有停車(chē)或剎車(chē)信號(hào)時(shí),八組發(fā)光管點(diǎn)陣全點(diǎn),有后退信號(hào)時(shí),發(fā)光二極管點(diǎn)陣閃亮,當(dāng)有危險(xiǎn)信號(hào)時(shí),八組發(fā)光二極管分為左右兩組交替閃亮,有右轉(zhuǎn)彎信號(hào)時(shí),右邊四組發(fā)光二極管從中間向右邊依次點(diǎn)亮,有左轉(zhuǎn)彎信號(hào)時(shí),左邊四組發(fā)光二極管從中間向左邊依次點(diǎn)亮,在轉(zhuǎn)彎信號(hào)未消失時(shí)不斷重復(fù),此指示器新穎別致,給人以賞新悅目的感覺(jué)。 本裝置采用的AT89C2051芯片是Atmel公司生產(chǎn)的自帶2KB可編程Flash存儲(chǔ)器的與MSC-51兼容的高性能處理器。它與常規(guī)的51芯片有相同的核心和相近的結(jié)構(gòu)功能如RAM、定時(shí)/記數(shù)器、中斷結(jié)構(gòu)、串行口、振蕩器和時(shí)鐘電路等;有最高達(dá)24MHz的振蕩頻率,有較少的精簡(jiǎn)I/O端口,因此體積很小,非常適用做小型應(yīng)用系統(tǒng)的處理器。 匯編程序及詳細(xì)注釋如下: STOP BIT 32H ;剎車(chē)標(biāo)志 DANGE BIT 33H ;危險(xiǎn)標(biāo)志 BACK BIT 34H ;倒車(chē)標(biāo)志 RIGHT BIT 35H ;右轉(zhuǎn)標(biāo)志 LEFT BIT 36H ;左轉(zhuǎn)標(biāo)志 FLASH BIT 37H ;閃爍標(biāo)志 LRSET BIT 38H ;依次點(diǎn)亮標(biāo)志 COUNT EQU 32H ;依次亮點(diǎn)計(jì)數(shù)器 ORG 0000H AJMP MAIN ;跳轉(zhuǎn)主程序 ORG 0030H AJMP MAIN MAIN: NOP MOV R0,#20H ;20H至60H單元清零 MOV A,#0 RES: MOV @R0,A INC R0 CJNE R0,#60H,RES MOV SP,#60H ;設(shè)置堆棧指針為60H MOV COUNT,#0 ;清依次顯示循環(huán)計(jì)數(shù)器 CLR TIME_OUT ;清定時(shí)時(shí)間到標(biāo)志 CLR EA CLR RIGHT ;清右轉(zhuǎn)標(biāo)志 CLR STOP ;清剎車(chē)標(biāo)志 CLR DANGE ;清危險(xiǎn)標(biāo)志 CLR BACK ;清倒車(chē)標(biāo)志 CLR LEFT ;清左轉(zhuǎn)標(biāo)志 CLR LRSET ;清依次點(diǎn)亮標(biāo)志 LOP: ACALL DL1 ;調(diào)用延時(shí)子程序 ACALL DL1 ;調(diào)用延時(shí)子程序 CPL FLASH ;閃爍標(biāo)志取反 JNB LRSET,LOP1 ;無(wú)依次點(diǎn)亮標(biāo)志轉(zhuǎn)LOP1 INC COUNT ;依次點(diǎn)亮計(jì)數(shù)器加1 MOV A,COUNT CJNE A,#5,LOP1 MOV COUNT,#0 ;計(jì)數(shù)計(jì)到5清零 LOP1: ACALL CL ;調(diào)用過(guò)程處理子程序 LOPA: ACALL KEY ;調(diào)用按鍵處理子程序 AJMP LOP ;返回主循環(huán) DL1 : MOV R6,#200 ;延時(shí)子程序 DL11: MOV R5,#250 DJNZ R5,$ DJNZ R6,DL11 RET CL: NOP ;過(guò)程處理子程序 JNB STOP,CL1 MOV A,#0FFH ;有停車(chē)或剎車(chē)標(biāo)志 CPL A ; 顯示器全亮 MOV P1,A AJMP CLE CL1: JNB DANGE,CL2 JB FLASH,CL11 ;有危險(xiǎn)標(biāo)志 MOV A,#0FH ;左右兩組顯示器交替閃爍 MOV P1,A AJMP CLE CL11: MOV A,#0F0H MOV P1,A AJMP CLE CL2: JNB BACK,CL3 JB FLASH,CL21 ;有倒車(chē)標(biāo)志 MOV A,#0FFH ;顯示器做全亮或全滅交替 MOV P1,A ;顯示器全亮 AJMP CLE CL21: MOV A,#00H MOV P1,A ;顯示器全滅 AJMP CLE CL3: JNB RIGHT,CL4 MOV DPTR,#RIGHT_CHAR ;有右轉(zhuǎn)標(biāo)志 MOV A,COUNT ;右邊四個(gè)一組的發(fā)光陣列依次循環(huán)亮 MOVC A,@A+DPTR ;取顯示值 CPL A MOV P1,A AJMP CLE CL4: JNB LEFT,CL5 MOV DPTR,#LEFT_CHAR ;有左轉(zhuǎn)標(biāo)志 MOV A,COUNT ;左邊四個(gè)一組的發(fā)光陣列依次循環(huán)亮 MOVC A,@A+DPTR ;取顯示值 CPL A MOV P1,A AJMP CLE CL5: MOV A,#0 ;若無(wú)任何標(biāo)志,關(guān)閉顯示器 CPL A MOV P1,A CLE: RET KEY: NOP ; 按鍵處理子程序 CLR STOP ; 清除停止標(biāo)志 CLR DANGE ; 清除危險(xiǎn)標(biāo)志 CLR BACK ; 清除倒車(chē)標(biāo)志 CLR RIGHT ; 清除右轉(zhuǎn)標(biāo)志 CLR LEFT ; 清除左轉(zhuǎn)標(biāo)志 JNB P3.2,KEY1 SETB STOP ; P3.2有鍵按下,置停止標(biāo)志 AJMP KEYE KEY1: JNB P3.3,KEY11 SETB DANGE ; P3.3有鍵按下,置危險(xiǎn)標(biāo)志 KEY11: MOV A,P3 CJNE A,#22H,KEY2 SETB DANGE ; P3.5 P3.1同時(shí)按下,置危險(xiǎn)標(biāo)志 AJMP KEYE KEY2: JNB P3.4,KEY3 SETB BACK ;P3.4有鍵按下,置倒車(chē)標(biāo)志 AJMP KEYE KEY3: JNB P3.5,KEY4 SETB RIGHT ;P3.5有鍵按下,置右轉(zhuǎn)標(biāo)志 JB LRSET,KEYE SETB LRSET ;設(shè)置左右轉(zhuǎn)循環(huán)顯示標(biāo)志 MOV COUNT,#0 ;循環(huán)顯示計(jì)數(shù)器清零 AJMP KEYE KEY4: JNB P3.1,KEY5 SETB LEFT ;P3.1有鍵按下,置左轉(zhuǎn)標(biāo)志 JB LRSET,KEYE SETB LRSET ;設(shè)置左右轉(zhuǎn)循環(huán)顯示標(biāo)志 MOV COUNT,#0 ;循環(huán)顯示計(jì)數(shù)器清零 AJMP KEYE KEY5: CLR LRSET ;清左右轉(zhuǎn)循環(huán)顯示標(biāo)志 KEYE: RET LEFT_CHAR: DB 00H,10H,30H,70H,0F0H ;從右到左依次點(diǎn)亮值 RIGHT_CHAR: DB 00H,08H,0CH,0EH,0FH ;從左到右依次點(diǎn)亮值 END |