熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
DQ EQU P3.3 ADDR0 EQU P1.0 ADDR1 EQU P1.1 ADDR2 EQU P1.2 ADDR3 EQU P1.3 ENLED EQU P1.4 ORG 000H LJMP MAIN ORG 000BH LJMP ZD MAIN: MOV TH0,#0FEH MOV TL0,#0FEH MOV TMOD,#01H SETB ET0 SETB TR0 SETB EA CLR ENLED CLR ADDR0 CLR ADDR1 CLR ADDR2 SETB ADDR3 SJMP $ ZD: CLR EA MOV R3,#10 SB: LCALL YS1 ;延時(shí)9000微妙 DJNZ R3,SB JB DQ,EXIT ;---------------以上對檢測9000微妙的初始低電平 JNB DQ,$ LCALL YS2 ;延時(shí)4.74毫秒避開4.5毫秒結(jié)果碼 MOV R1,#40H ;設(shè)定起始RAM區(qū) MOV R2,#4 ;四組八位數(shù)據(jù) PP: MOV R3,#8 JJJ: JNB DQ,$ ;等待地址碼第一個(gè)高電平信號 LCALL YS1 ;延時(shí)882微妙去判斷此時(shí)的信號高低電平狀態(tài) MOV C,DQ JNC UU LCALL YS3 ;延時(shí)1000微妙 UU: MOV A,@R1 ;將R1的地址給它 RRC A ;將C轉(zhuǎn)到最低位 MOV @R1,A ;再將A存到r1中 DJNZ R3,JJJ ;循環(huán)接受地址碼的高8位 INC R1 DJNZ R2,PP ;接受完16位地址碼和8位數(shù)據(jù)嗎和8位數(shù)據(jù)反碼 ;---------------以上將16位地址碼和8位數(shù)據(jù)嗎和8位數(shù)據(jù)反碼存放在1AH,1BH,1CH,1DH MOV A,42H CPL A XRL A,43H ;將兩數(shù)據(jù)作比較 JNZ EXIT ;不相同則丟棄退出解碼 MOV DPTR,#TABLE MOV A,43H ANL A,#0FH ;求與取其低四位 MOVC A,@A+DPTR MOV 44H,A ;將查表得到的數(shù)字存到1EH中 MOV A,43H SWAP A ;高四位與低四位交換 ANL A,#0FH ;求與取其高四位 MOVC A,@A+DPTR MOV 45H,A ;將查表到的數(shù)據(jù)放在1FH中 ;---------------以上將接受到的數(shù)據(jù)碼與數(shù)據(jù)反碼經(jīng)過查表后存放在1EH和1FH中 MOV R7,#20H DISP: MOV P0,45H ;將數(shù)據(jù)送到數(shù)碼管中 CLR P2.1 LCALL YS2 SETB P2.1 MOV P0,44H CLR P2.2 LCALL YS2 SETB P2.2 CLR P1.6 LCALL YS2 SETB P1.6 DJNZ R7,DISP EXIT: SETB EA RETI ;退出解碼程序 ;延時(shí)882微秒 YS1: MOV R4,#03H DL0: MOV R5,#91H DJNZ R5,$ DJNZ R4,DL0 RET YS2: ;延時(shí)4740微秒 MOV R6,#03H DL1: MOV R4,#08H DL2: MOV R5,#61H DJNZ R5,$ DJNZ R4,DL2 DJNZ R6,DL1 RET YS3: ;延時(shí)1000微秒 MOV R4,#01H DL3: MOV R6,#8EH DL4: MOV R5,#02H DJNZ R5,$ DJNZ R6,DL4 DJNZ R4,DL3 RET TABLE: DB 0C0h,0F9h,0A4h,0B0h,99h,92h DB 82h,0F8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh 它現(xiàn)在亮了但是不是按每個(gè)按鍵他都能亮,而且它顯示的數(shù)字也不對,大佬幫幫忙吧 |
如果不亮,很有可能是數(shù)碼管共陰共陽弄錯(cuò)了 |
是不是接線錯(cuò)了,你的數(shù)碼管怎么接的啊?按程序你應(yīng)該接P0,且是個(gè)共陽的管子。 |
分段排故,你用的應(yīng)該是開發(fā)板,先讓紅外接收器接收到信號以后讓P1口某個(gè)燈亮,然后判斷后再讓另一個(gè)燈亮,看問題是出現(xiàn)在前面還是后面。如果出現(xiàn)在后面,就不對紅外接收器收到的數(shù)據(jù)判斷,直接讓LED顯示某個(gè)數(shù)字。 |
是完全不亮嗎?程序這樣截屏還不如直接復(fù)制貼出來好方便閱讀,電路圖也一起貼出來 |
Powered by 單片機(jī)教程網(wǎng)