单片机原理及接口技术电路仿真实验报告实验一:独立式键盘与LED显示示例例4—17:功能:数码管的数据端与P0口引脚采用正序,试编写程序,分别实现功能:上电后数码管显示“P”,按下任何键后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,进入等待按键状态。
Keil编程:电路图:初始状态时:3秒后:程序:TEMP EQU 30HORG 0000HJMP STARTORG 0100HSTART:MOV SP,#5FHMOV P0,#8CHMOV P3,#0FFH NOKEY:MOV A,P3CPL AJZ NOKEYMOV TEMP,P3CALL D10msMOV A,P3CJNEA,TEMP,NOKEYMOV R7,#16MOV R2,#0LOOP:MOV A,R2MOVDPTR,#CODE_P0MOVCA,@A+DPTRMOV P0,AINC R2SETB RS0CALL D_1SCLR RS0DJNZ R7,LOOPJMP STARTD_1S:MOV R6,#100D10:CALL D10msDJNZ R6,D10RETD10ms:MOV R5,#10D1ms:MOV R4,#249DL:NOPNOPDJNZ R4,DLDJNZ R5,D1msRETCODE_P0:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB80H,90H,88H,83H,0C6H,0A1H,86H,8EHEND例4—18:功能:执行程序时,先显示“P”1、按键K0按下后,数码管显示拨动开关S3~S0对应的十进制值;2、按键K1按下后,P0口数码管显示拨动开关S3~S0对应的十六进制值;3、按键K2按下后,P2口数码管显示拨动开关S3~S0对应的十六制值;4、按键K3按下后,数码管显示拨动开关S3~S0状态对应的ASCII码。
Keil编程:电路图:K0按下,S0~S3闭合时:K1按下,S0~S3闭合:K2按下,S0~S3闭合:K3按下,S0~S3闭合:程序:ORG 0000HJMP STARTORG 0100H START:MOV SP,#5FHMOV P0,#8CHMOV P3,#0FFH KEY0:JB P3.0,KEY1CALL D10msJNB P3.0,$MOV A,P3CPL AANL A,#0F0HSWAP ADA APUSH ACCANL A,#0FHMOV DPTR,#CODE_P2MOVC A,@A+DPTRMOV P2,APOP ACCANL A,#0F0HSWAP AMOV DPTR,#CODE_P0MOVC A,@A+DPTRMOV P0,AJMP KEY0KEY1:JB P3.1,KEY2CALL D10msJNB P3.1,$MOV A,P3CPL AANL A,#0F0HMOV DPTR,#CODE_P0MOVC A,@A+DPTRMOV P0,AMOV P2,#0FFHJMP KEY0KEY2:JB P3.2,KEY3CALL D10msJNB P3.2,$MOV A,P3CPL AANL A,#0F0HSWAP AMOV DPTR,#CODE_P2MOVC A,@A+DPTRMOV P2,AMOV P0,#0FFHJMP KEY0KEY3:JB P3.3,KEY0CALL D10msJNB P3.3,$MOV A,P3CPL AANL A,#0F0HSWAP APUSH ACCCLR CSUBB A,#0AHPOP ACCJC LPLP:ADD A,#30HPUSH ACCANL A,#0FHMOV DPTR,#CODE_P2MOVC A,@A+DPTRMOV P2,APOP ACCANL A,#0F0HSWAP AMOV DPTR,#CODE_P0MOVC A,@A+DPTRMOV P0,AJMP KEY0D10ms:MOV R5,#10D1ms:MOV R4,#249DL:NOPNOPDJNZ R4,DLDJNZ R5,D1msRETCODE_P0:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB80H,90H,88H,83H,0C6H,0A1H,86H,8EHCODE_P2:DB03H,9FH,25H,0DH,99H,49H,40H,1FHDB01H,09H,11H,0C1H,63H,85H,61H,71HEND实验二:矩阵式键盘与LED显示示例例4—19功能:执行程序时,在P0口数码管显示“P”,然后根据所按的按键在P2口数码管显示对应十六进制键号。
Keil编程:电路图:按下开关7时:按下开关B时:程序:LNUM EQU 30HORG 0000HJMP STARTORG 0100H START:MOV SP,#5FHMOV LNUM,#4MOV P0,#8CHCLR F0ST1:CALL MAKEYJNB F0,ST1ANL A,#0FHMOV DPTR,#CODE_P2MOVC A,@A+DPTRMOV P2,AJMP START MAKEY:CALL KEYHNJNZ HAVEJMP NRET HAVE:CALL D10msCALL KEYHNJNZ TRUEJMP NRET TRUE:MOV R1,#0EFHMOV R4,#0 SCAN:MOV A,R1MOV P1,AMOV A,P1JB ACC.0,L1MOV A,#0JMP KEYNUML1:JB ACC.1,L2MOV A,#4JMP KEYNUML2:JB ACC.2,L3MOV A,#8JMP KEYNUML3:JB ACC.3,NEXTMOV A,#0CHKEYNUM:ADD A,R4PUSH ACCUPKEY:CALL KEYHNJNZ UPKEYPOP ACCSETB F0JMP HRETNRET:CLR F0HRET:RETNEXT:INC R4MOV A,R1DJNZ LNUM,NDONEJMP NRETNDONE:RL AMOV R1,AJMP SCANKEYHN:MOV P1,#0FHMOV A,P1CPL AANL A,#0FHRETD10ms:MOV R5,#10D1ms:MOV R4,#249DL:NOPNOPDJNZ R4,DLDJNZ R5,D1msRETCODE_P2:DB03H,9FH,25H,0DH,99H,49H,40H,1FHDB01H,09H,11H,0C1H,63H,85H,61H,71HEND例4—20功能:执行程序时,在P0口数码管显示“P”,然后根据所按的按键在P2口数码管显示对应十六进制键号。
Keil编程:电路图:开关5按下时:开关C按下时:程序:ORG 0000HJMP MAINORG 0100H MAIN:MOV SP,#5FHMOV P0,#8CHCLR F0ST1:CALL MAKEYJNB F0,ST1MOV A,R3MOV DPTR,#CODE_P2MOVC A,@A+DPTRMOV P2,AJMP MAIN MAKEY:CALL KEYHNJNZ HAVEJMP NRET HAVE:CALL D10msCALL KEYHNJNZ TRUEJMP NRET TRUE:CPL AANL A,#0FHMOV B,AMOV P1,#0F0HMOV A,P1ANL A,#0F0HKEYNUM:ORL B,AMOVDPTR,#KEY_TABMOV R3,#0SCTAB:MOV A,R3MOVC A,@A+DPTRCJNE A,B,NEXTPUSH ACCUPKEY:CALL KEYHNJNZ UPKEYPOP ACCSETB F0JMP HRETNRET:CLR F0HRET:RETNEXT:INC R3JMP SCTABKEYHN:MOV P1,#0FHMOV A,P1CPL AANL A,#0FHRETD10ms:MOV R5,#10D1ms:MOV R4,#249DL:NOPNOPDJNZ R4,DLDJNZ R5,D1msRETKEY_TAB:DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DHDB0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77HCODE_P2:DB03H,9FH,25H,0DH,99H,49H,40H,1FHDB01H,09H,11H,0C1H,63H,85H,61H,71HEND。