1、 CLR C ;进位位清零,为接受P1口的值做准备 MOV P1.0,#00H ;赋值,全灭 MOV C,P1.0 ;P1.0口值送进位位 MOV P1.2,C ;进位位C送值到P1.2口,输出 ACALL DELAY重复上面操作 MOV P1.1,#00H MOV C,P1.1 MOV P1.3,C MOV R6, #1 ;延时子程序.MOV R7, #1 实验二 外部中断 LED EQU P1.0 ;P1.0口连接LED显示灯 LEDBUF EQU 00H ;初始值设为0,即为低电平 LJMP START ORG 0003H ;外部中断0(INT0)的入口地址 LJMP INT0 ;跳转到
2、中断入口处 ORG 0100HSTART: MOV SP,#60H ;地址指针 CLR LEDBUF CLR LED MOV TCON,#01H ;初始化,设置为工作方式1 MOV IE,#10000001B ;EA=1开中断,EX0=1外部中断0中断允许 ORL IP,#0000H ;中断优先级设置 LJMP $INT0:PUSH PSW ;程序状态字PSW内容压入堆栈保存 CPL LEDBUF ;取反,即发生翻转 MOV C,LEDBUF MOV LED,C POP PSW ;恢复程序状态字PSW的内容 RETI END 实验三 八段数码管显示LEDMAP:DB 3FH,06H,5BH,4
3、FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H DB 00H,49HMOV 40H,#08H MOV 41H,#00H MOV 42H,#08H MOV 43H,#01H MOV 44H,#00H MOV 45H,#04HLOOP1:MOV R0,#40H ;送数据地址,即显示缓冲区地址 MOV R1,#6 ;循环次数 MOV R2,#00100000B ;从左边第一个开始显示LOOP2:MOV DPTR,#8002H ;送位口地址 CLR A MOVX DPTR,A ;关所有位 MOV A,R0 ;取显示数据 MOV DPTR,#L
4、EDMAP ;送段码表首地址 MOVC A,A+DPTR ;由序码找段码 MOV DPTR,#8004H ;送段口地址送段码 MOV DPTR,#8002H ; MOV A,R2 ;显示位显示取显示位 RR A ;右移,下一位显示 MOV R2,A INC R0 ;数据地址加1,准备取下一个数 DJNZ R1,LOOP2 ;(R1-1)0,即6位未显示完,循环 JMP LOOP1MOV R6,#2 ;延时1ms D1:MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET 实验四 行列扫描式键盘 OUTBIT EQU 8002H ;位显示地址和列 OUTSEG EQU 800
5、4H ;段显示地址 IN EQU 8001H ;键盘行地址 LEDBUF EQU 40H ;显示缓冲区地址 RKEY EQU 46H ;键值存储区 LJMP MAIN DB 3FH,06H,5BH,4FH,66H ;04 DB 6DH,7DH,07H,7FH,6FH ;59 DB 77H,7CH,39H,5EH,79H,71H ;AF DB 00H,49H ;关断和“三”延时子程序* MOV R7,#0FAHDL0: DJNZ R7,DL0 ;执行时间大约1ms DJNZ R6,DELAYLED显示子程序*DISPLAY: MOV R0,#LEDBUF 循环六次 MOV R2,#20H ;从高
6、位开始点亮 MOV DPTR,#OUTBIT ;送位地址 MOV A,#00H MOVX DPTR,A ;关断所有数码管 MOVC A,A+DPTR ;由序码求段码 MOV DPTR,#OUTSEG ; MOVX DPTR,A MOV A,R2 位显示 MOV R6,#03H LCALL DELAY ;调用子程序右移 MOV R2,A数据地址加1,准备显示下一位 DJNZ R1,LOOP ;键盘子程序*KEY: LCALL TESTKEY JZ KEYQ ;没有按下,跳转退出 MOV R6,#10防抖延时10ms LCALL TESTKEY ;再次确认 JZ KEYQ LCALL GETKEY
7、 ;取键值等待按键释放WAITREL:防抖延时 JNZ WAITREL ;没有松开继续循环KEYQ:按键测试子程序,判断有无键按下TESTKEY:MOV DPTR,#OUTBIT ;送列地址 MOV A,#0H对列置零 MOV DPTR,#IN ;送行地址 MOVX A,DPTR CPL A ANL A,#0FH ;对行进行判断获取键值子程序从第五列开始判断GETKEY: MOV A,#11011111B第5列置零K58: CJNE A,#08H,K54 MOV RKEY,#07H ;7键按下,送键值存储区 LJMP GETKQK54: CJNE A,#04H,K52 MOV RKEY,#04
8、H ;4键按下,送键值存储区K52: CJNE A,#02H,K51 MOV RKEY,#01H ;1键按下,送键值存储区K51: CJNE A,#01H,K48 MOV RKEY,#00H ;0键按下,送键值存储区*进入第四列判断K48: MOV A,#11101111B第4列置零送行地址 CJNE A,#08H,K44 MOV RKEY,#08H ;8键按下,送键值存储区 K44: CJNE A,#04H,K42 MOV RKEY,#05H ;5键按下,送键值存储区K42: CJNE A,#02H,K41 MOV RKEY,#02H ;2键按下,送键值存储区K41: CJNE A,#01H
9、,K38 MOV RKEY,#0FH ;F键按下,送键值存储区*进入第三列判断K38: MOV A,#11110111B第3列置零对行进行判断 CJNE A,#08H,K34 MOV RKEY,#09H ;9键按下,送键值存储区K34: CJNE A,#04H,K32 MOV RKEY,#06H ;6键按下,送键值存储区K32: CJNE A,#02H,K31 MOV RKEY,#03H ;3键按下,送键值存储区K31: CJNE A,#01H,K28 MOV RKEY,#0EH ;E键按下,送键值存储区*进入第二列判断K28: MOV A,#11111011B第2列置零 CJNE A,#08
10、H,K24 MOV RKEY,#0AH ;A键按下,送键值存储区K24: CJNE A,#04H,K22 MOV RKEY,#0BH ;B键按下,送键值存储区K22: CJNE A,#02H,K21 MOV RKEY,#0CH ;C键按下,送键值存储区K21: CJNE A,#01H,K18 MOV RKEY,#0DH ;D键按下,送键值存储区*进入第一列判断K18: MOV A,#11111101B第1列置零 CJNE A,#08H,K14 MOV RKEY,#10H ;10键按下,送键值存储区 K14: CJNE A,#04H,K12 MOV RKEY,#11H ;11键按下,送键值存储区
11、K12: CJNE A,#02H,K11 MOV RKEY,#12H ;12键按下,送键值存储区K11: CJNE A,#01H,K08 MOV RKEY,#13H ;13键按下,送键值存储区*进入最后一列判断K08: MOV A,#11111110B第0列置零K04: CJNE A,#04H,K02 MOV RKEY,#14H ;14键按下,送键值存储区K02: CJNE A,#02H,K01 MOV RKEY,#15H ;15键按下,送键值存储区K01: CJNE A,#01H,K00 MOV RKEY,#16H ;16键按下,送键值存储区K00: MOV RKEY,#0EEH SJMP
12、GETKQGETKQ:主程序*MAIN: MOV SP,#60H MOV LEDBUF,#0DH MOV LEDBUF+1,#00H MOV LEDBUF+2,#08H MOV LEDBUF+3,#01H MOV RKEY,#0DAHMLOOP: LCALL DISPLAY LCALL KEY MOV A,RKEY ANL A,#0F0H SWAP A MOV LEDBUF+4,A ;显示高位 ANL A,#0FH MOV LEDBUF+5,A ;显示低位 LJMP MLOOP 实验五 计数器 MOV 40H,#00H ;千 MOV 41H,#00H ;百 MOV 42H,#00H ;十 MO
13、V 43H,#00H ;个 MOV 44H,#02H MOV 45H,#02H MOV TMOD,#05H ;初始化,工作方式设置 MOV TL0,#00H ;初值设为0,低4位 MOV TH0,#00H ;初值设为0,高4位 SETB TR0 ;TR0=1,启动计数器MOV R3,TL0 ;低位送到R3 MOV A,R3低八位低4位 个 MOV 40H,A SWAP A ;高低位交换 MOV 41H,A ;低八位高4位 十 MOV R3,TH0 ;高位送到R3高八位低4位 百 MOV 42H,A高八位高4位 千 MOV 43H,A MOV R0,#40H ;数据缓冲区地址 MOV R1,#6
14、 ;最高位开始显示去显示数据 MOV DPTR,#8004H ; MOV A,R2MOV R6,#3 ; 实验六 定时器 ORG 000BH ;定时器T0溢出中断入口地址 LJMP SINT0MOV TMOD,#01H ;设置定时器T0工作在方式1 MOV TH0,#3CH ;置初值,高8位送TH0 MOV TL0,#0B0H ;置初值,低8位送TL0 SETB ET0 ;ET0置1,定时器T0溢出中断允许 SETB EA ;EA置1,开中断 MOV R7,#10 ;开始计时 SETB P1.0 ;P1.0置1,即输出高电平CJNE R7,#00H,LOOP1 ;R70,继续循环 CPL A
15、;交换A值 MOV P1,A ;A值送P1口输出,即发生反转SINT0: DJNZ R7,B1 ;判断循环次数,跳转 CPL P1.0 JMP B2 B1:重新装载时间常数 MOV TL0,#0B0H B2:RETI 实验七 模拟量输入 ;AD_CS-CS1 CS0832 EQU 09000H OUTBIT EQU 0A002H ;位显示地址 OUTSEG EQU 0A004H ; CS0809 EQU 8000H RADING EQU 31H ;I0I7通道号寄存器 RAD EQU 32H ;AD值寄存器 DJNZ R7,DL0 MOV R0,#LEDBUF ;循环次数 MOV R2,#20
16、H ;从高位开始显示,即左边开始段显示送显示位 MOV R6,#03H CALL DELAY ;右移,准备显示下一位数据存储区加1,准备显示下一位 MOV LEDBUF,#08H MOV LEDBUF+1,#01H MOV LEDBUF+2,#00H MOV LEDBUF+3,#04H MOV LEDBUF+4,#00H MOV LEDBUF+5,#00H MOV R5,#0FFH ;数字量应00到0FFHDIRLOP: LCALL DISPLAY ;调用显示子程序 DJNZ R5,DIRLOP ;(R5-1)0,跳转ADLOOP:MOV RADING,#01H ;置初值 LCALL AD ;调用AD转换子程序 LCALL ADDIR ;调用读取和显示AD转换结果子程序 LJMP ADLOOP ;AD: MOV DPTR,#CS0809 ;指向0通道 MOV A,DPL ; ADD A,RADING MOV DPL,A启动AD转换 MOV R5,#40H ;查询,是否转换结束 DJNZ R5,$ MOVX A,DPTR ;读取转换结果 MOV RAD,A ;送转换结果ADDIR: MOV A,RAD ;取转换结果交换高低位 ANL A,#0FH ;低位清零 MOV LEDBUF+4,A ; MOV LEDBUF+5,A ;显
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1