7.sdi
来自「我的大学单片机课程案例和ppt」· SDI 代码 · 共 96 行
SDI
96 行
,,, ORG 0h
0000,01 30,, AJMP START
,,, ORG 30h
0030,75 80 FF,START,START: MOV P0,#0FFH
0033,75 A0 01,, MOV P2,#01H;选中第1个数码管进行显示
0036,C2 00,, CLR 20H.0 ;标志位初始为0,K1键标志位
0038,C2 01,, CLR 20H.1 ;K2标志位
003A,C2 02,, CLR 20H.2 ;K3标志位
003C,90 00 E5,, MOV DPTR,#TABLE;将数据表TABLE的首地址赋给DPTR
003F,75 89 01,, MOV TMOD,#01H ;定时器0方式1
0042,7E C8,, MOV R6,#200 ;计溢出次数
0044,75 90 FF,SCANK,SCANK: MOV P1,#0FFH
0047,C2 94,, CLR P1.4 ;P1.4清0,扫描第1行
0049,E5 90,, MOV A,P1 ;读键盘至A
004B,54 0F,, ANL A,#00001111B
004D,64 0F,, XRL A,#00001111B;判断A的低四位是否为1
004F,60 48,, JZ DISPLAY ;如果低四位为1,则无按键,转DISPLAY
0051,12 00 90,, LCALL DELAY10MS;延时10ms(去抖延时)
0054,E5 90,, MOV A,P1 ;读键盘至A
0056,54 0F,, ANL A,#00001111B
0058,64 0F,, XRL A,#00001111B;判断A的低四位是否为1
005A,60 3D,, JZ DISPLAY ;如果低四位为1,则无按键,转DISPLAY
005C,E5 90,, MOV A,P1 ;读键盘至A
005E,54 0F,, ANL A,#00001111B;保留低四位的结果
0060,B4 0D 0F,, CJNE A,#00001101B,NOK1;不是K1键,转NOK1
0063,D2 00,, SETB 20H.0 ;是K1键将标志位置1,0-9
0065,C2 01,, CLR 20H.1 ;其他标志位清0
0067,C2 02,, CLR 20H.2 ;
0069,7A 00,, MOV R2,#0
006B,EA,, MOV A,R2
006C,93,, MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
006D,F5 80,, MOV P0,A ;送到P0口数码管显示
006F,02 00 99,, LJMP DISPLAY ;转显示子程序
0072,B4 0B 09,NOK1,NOK1: CJNE A,#00001011B,NOK2;不是K2键,转NOK2
0075,D2 01,, SETB 20H.1 ;是K2键将标志位置1
0077,C2 00,, CLR 20H.0 ;其他标志位清0
0079,C2 02,, CLR 20H.2 ;
007B,02 00 99,, LJMP DISPLAY ;转显示子程序
007E,B4 07 18,NOK2,NOK2: CJNE A,#00000111B,DISPLAY;不是K3键,转DISPLAY
0081,D2 02,, SETB 20H.2 ;是K3键将标志位置1,9-0
0083,C2 00,, CLR 20H.0 ;其他标志位清0
0085,C2 01,, CLR 20H.1 ;
0087,7A 09,, MOV R2,#9
0089,EA,, MOV A,R2
008A,93,, MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
008B,F5 80,, MOV P0,A ;送到P0口数码管显示
008D,02 00 99,, LJMP DISPLAY ;转显示子程序
0090,,DELAY10MS,DELAY10MS:
0090,7E 0A,, MOV R6,#10
0092,7F FA,D1,D1: MOV R7,#250
0094,DF FE,D2,D2: DJNZ R7,D2
0096,DE FA,, DJNZ R6,D1
0098,22,, RET
,,,
0099,20 01 06,DISPLAY,DISPLAY:JB 20H.1,KEY2
009C,20 00 06,, JB 20H.0,KEY1
009F,20 02 23,, JB 20H.2,KEY3
00A2,02 00 44,KEY2,KEY2: LJMP SCANK ;跳到SCANK,重新开始扫描
00A5,,KEY1,KEY1:
00A5,75 8C EC,, MOV TH0,#0ECH ;高八位,5ms
00A8,75 8A 78,, MOV TL0,#78H ;低八位
00AB,D2 8C,, SETB TR0 ;启动定时器
00AD,10 8D 02,WAIT1,WAIT1: JBC TF0,WAIT2
00B0,80 FB,, JMP WAIT1
00B2,DE 90,WAIT2,WAIT2: DJNZ R6,SCANK ;溢出次数减1
00B4,7E C8,, MOV R6,#200 ;重新赋溢出次数
00B6,C2 8C,, CLR TR0
00B8,0A,, INC R2
00B9,BA 0A 02,, CJNE R2,#10,GOKEY1 ;判断是否显示数字加到10
00BC,AA 00,, MOV R2,0 ;如加到10,重新赋0
00BE,EA,GOKEY1,GOKEY1: MOV A,R2
00BF,93,, MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
00C0,F5 80,, MOV P0,A ;送到P0口数码管显示
00C2,02 00 44,, LJMP SCANK ;跳到SCANK,重新开始扫描
00C5,,KEY3,KEY3:
00C5,75 8C EC,, MOV TH0,#0ECH ;高八位,5ms
00C8,75 8A 78,, MOV TL0,#78H ;低八位
00CB,D2 8C,, SETB TR0 ;启动定时器
00CD,10 8D 02,WAIT3,WAIT3: JBC TF0,WAIT4
00D0,80 FB,, JMP WAIT3
00D2,DE CE,WAIT4,WAIT4: DJNZ R6,KEY2
00D4,7E C8,, MOV R6,#200
00D6,C2 8C,, CLR TR0
00D8,1A,, DEC R2
00D9,BA FF 02,, CJNE R2,#0FFH,GOKEY3 ;判断是否显示数字减到FF
00DC,7A 09,, MOV R2,#9 ;重新赋9
00DE,,GOKEY3,GOKEY3:
00DE,EA,, MOV A,R2
00DF,93,, MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
00E0,F5 80,, MOV P0,A ;送到P0口数码管显示
,,,
00E2,02 00 44,, LJMP SCANK ;跳到SCANK,重新开始扫描
00E5,C0 F9 A4 B0,TABLE,TABLE: DB 0C0H,0F9H,0A4H,0B0H
00E9,99 92 82 F8,, DB 99H,92H,82H,0F8H,80H,90H
000E,,, END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?