5.sdi
来自「我的大学单片机课程案例和ppt」· SDI 代码 · 共 83 行
SDI
83 行
,,, ORG 0H
0000,02 00 30,, LJMP START
,,, ORG 30H
0030,75 80 FF,START,START: MOV P0,#0FFH ;P0口置1
0033,75 A0 00,, MOV P2,#0H ;P2口清0
0036,75 30 00,, MOV 30H,#0 ;初始显示00
0039,75 31 00,, MOV 31H,#0 ;
003C,90 00 CB,, MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
003F,,SCANK,SCANK:
003F,7C 02,, MOV R4,#2 ;数码管数目赋给R4
0041,79 30,, MOV R1,#30H ;R1装显示内容的地址
0043,7A 40,, MOV R2,#01000000B ;R2装位选信号
0045,,DISLOOP,DISLOOP:
0045,75 90 FF,, MOV P1,#0FFH
0048,C2 92,, CLR P1.2 ;P1.2清0,扫描第1行
004A,E5 90,, MOV A,P1 ;读键盘至A
004C,54 03,, ANL A,#00000011B
004E,64 03,, XRL A,#00000011B;判断A的低二位是否为1
0050,60 24,, JZ SCANL2 ;如果低二位为1,则无按键,转第二行扫描
0052,12 00 B9,, LCALL DELAY10MS;延时10ms(去抖延时)
0055,E5 90,, MOV A,P1 ;读键盘至A
0057,54 03,, ANL A,#00000011B
0059,64 03,, XRL A,#00000011B;判断A的低二位是否为1
005B,60 19,, JZ SCANL2 ;如果低二位为1,则无按键,转第二行扫描
005D,E5 90,, MOV A,P1 ;读键盘至A
005F,54 03,, ANL A,#00000011B;保留低二位的结果
0061,B4 02 09,, CJNE A,#00000010B,NOK0;不是K0键,转NOK0
0064,75 30 02,, MOV 30H,#2 ;是K0键将30H地址赋值为2
0067,75 31 03,, MOV 31H,#3 ;将31H地址赋值为3
006A,02 00 A4,, LJMP DISPLAY ;转显示子程序
006D,75 30 08,NOK0,NOK0: MOV 30H,#8 ;不是K0键则是K1。将30H地址赋值为8
0070,75 31 09,, MOV 31H,#9 ;将31H地址赋值为9
0073,02 00 A4,, LJMP DISPLAY ;转显示子程序
0076,75 90 FF,,SCANL2 :MOV P1,#0FFH
0079,C2 93,, CLR P1.3 ;P1.3清0,扫描第2行
007B,E5 90,, MOV A,P1 ;读键盘至A
007D,54 03,, ANL A,#00000011B
007F,64 03,, XRL A,#00000011B;判断A的低二位是否为1
0081,60 21,, JZ DISPLAY ;如果低二位为1,则无按键,转DISPLAY
0083,12 00 B9,, LCALL DELAY10MS;延时10ms(去抖延时)
0086,E5 90,, MOV A,P1 ;读键盘至A
0088,54 03,, ANL A,#00000011B
008A,64 03,, XRL A,#00000011B;判断A的低二位是否为1
008C,60 16,, JZ DISPLAY ;如果低二位为1,则无按键,转DISPLAY
008E,E5 90,, MOV A,P1 ;读键盘至A
0090,54 03,, ANL A,#00000011B;保留低二位的结果
0092,B4 02 09,, CJNE A,#00000010B,NOK2;不是K2键,转NOK2
0095,75 30 06,, MOV 30H,#6 ;是K2键将30H地址赋值为6
0098,75 31 08,, MOV 31H,#8 ; 将31H地址赋值为8
009B,02 00 A4,, LJMP DISPLAY ;转显示子程序
009E,75 30 07,NOK2,NOK2: MOV 30H,#7 ;不是K2,则一定是K3。将30H地址赋值为7
00A1,75 31 07,, MOV 31H,#7 ;将31H地址赋值为7
,,,
00A4,E7,DISPLAY,DISPLAY:MOV A,@R1 ;R1中的数据作为地址,取数据给A
00A5,93,, MOVC A,@A+DPTR;将(A+DPTR)地址中的值赋给A
00A6,8A A0,, MOV P2,R2 ;选择第一个数码管
00A8,F5 80,, MOV P0,A ;送到P0口数码管显示
00AA,12 00 C2,, LCALL DELAY ;显示延时
00AD,EA,, MOV A,R2 ;位选信号左移
00AE,23,, RL A ;
00AF,FA,, MOV R2,A ;
00B0,09,, INC R1 ;下一个显示的内容的地址
00B1,DC 03,, DJNZ R4,DT ;显示完转DT
00B3,02 00 3F,, LJMP SCANK ;重新开始扫描
00B6,02 00 45,DT,DT: LJMP DISLOOP
00B9,,DELAY10MS,DELAY10MS:
00B9,7E 14,, MOV R6,#20
00BB,7F C8,D1,D1: MOV R7,#200
00BD,DF FE,D2,D2: DJNZ R7,D2
00BF,DE FA,, DJNZ R6,D1
00C1,22,, RET
00C2,,DELAY,DELAY:
00C2,7E 64,, MOV R6,#100
00C4,7F 64,D3,D3: MOV R7,#100
00C6,DF FE,D4,D4: DJNZ R7,D4
00C8,DE FA,, DJNZ R6,D3
00CA,22,, RET
00CB,C0 F9 A4 B0,TABLE,TABLE: DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
00CF,99 92 82 F8,, DB 99H,92H,82H,0F8H,80H,90H ;4,5,6,7,8,9
000E,,, END
,,,
,,,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?