l 多个数码管—数字变换—轮流显示—软件控制—扫描子程序—位指令控制
//多数码管轮换显示、定位显示—左移或右移—可以引出进位显示
ORG 0000H
MAIN:
MOV A,#00H MOV P2,A CPL A MOV P3,A
MOV P2,#0C0H MOV P3,#01H
ACALL YANSHI
MOV P2,#0F9H MOV P3,#02H
ACALL YANSHI
MOV P2,#0A4H MOV P3,#04H
ACALL YANSHI
MOV P2,#0B0H MOV P3,#08H
ACALL YANSHI
MOV P2,#99H MOV P3,#01H
ACALL YANSHI
MOV P2,#92H MOV P3,#02H ACALL YANSHI
MOV P2,#082H MOV P3,#04H ACALL YANSHI MOV P2,#0f8H MOV P3,#08H ACALL YANSHI
MOV P2,#80H MOV P3,#01H ACALL YANSHI MOV P2,#90H MOV P3,#01H ACALL YANSHI
MOV P2,#088H MOV P3,#01H ACALL YANSHI MOV P2,#83H MOV P3,#01H ACALL YANSHI
LCALL MAIN
YANSHI: MOV R5,#04H F2: MOV R7,#0FFH F1: DJNZ R7, F1 DJNZ R6, F2
RET
END
程序说明:
关于数码管问题,需要指出,单管显示、多口多管显示(一口一管、双口多管)、静态显示、计数显示、多口多管进位(一口一管、双口多管)、多口控制与扫描
a) 多个按键与多个数码管(位输入与字节输出)—动态—数组—扫描子程序
//多数码管轮换显示—可以引出进位显示—数表的应用
ORG 0000H
START:
MAIN:
MOV R0,#00H ;寄存器中放数值0
MOV DPTR,#TABLE ;指针指向数表
DISP: ;段标记
MOV A,R0 ;将寄存器中的数值转移到累加器中
MOVC A,@A+DPTR ;以DPTR作为基础,与累加器相加得到新地址给累加器
MOV P2,A ;将累加器的地址给P2口
MOV P3,#08H ;个位数显示位控制
ACALL DELAY ;调延时子程序
INC R0 ;寄存器R0加1
CJNE R0,#33H,DISP ;寄存器与立即数33比较,不相等则转移到DISP循环。相等则顺序执行
MOV R1,#00H ;寄存器中放数值0
MOV DPTR,#TABLE1 ;指针指向数表
DISP1: ;段标记
MOV A,R1 ;将寄存器中的数值转移到累加器中
MOVC A,@A+DPTR ;以DPTR作为基础,与累加器相加得到新地址给累加器
MOV P2,A ;将累加器的地址给P2口
MOV P3,#04H ;十位数显示位控制
ACALL DELAY ;调延时子程序
INC R1 ;寄存器R0加1
CJNE R1,#33H,DISP1 ;寄存器与立即数33比较,不相等则转移到DISP循环。相等则顺序执行
LJMP MAIN
DELAY: ;延时子程序---RET为止
MOV R7,#0FFH ;给寄存器植入某个数值
LOOP0:
MOV R6,#0FFH ;给寄存器植入某个数值
LOOP1:
DJNZ R6,LOOP1 ;减1比较,直至寄存器中的数值为零跳转
DJNZ R7,LOOP0 ;减1比较,直至寄存器中的数值为零跳转
RET ;返回子程序DELAY
TABLE:
DB 0C0H,0FFH,0C0H,0FFH ;间隔交替用于体现闪烁,去除则为连续递进。
DB 0C0H,0FFH,0F9H,0FFH,0A4H,0FFH,0B0H,0FFH,99H,0FFH,92H,0FFH,82H,0FFH,0F8H,
DB 80H,0FFH,90H,0FFH,88H,0FFH,83H,0FFH,0C6H,0FFH,0A1H,0FFH,86H,0FFH,8EH, 00H
TABLE1:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0c6H,0A1H,86H,8EH
END
//4个一组的数码管同步显示—数表
ORG 0000H
START:
MAIN:
MOV R0,#00H ;寄存器中放数值0
MOV DPTR,#TABLE ;指针指向数表
DISP: ;段标记
MOV A,R0 ;将寄存器中的数值转移到累加器中
MOVC A,@A+DPTR ;以DPTR作为基础,与累加器相加得到新地址给累加器
MOV P2,A ;将累加器的地址给P2口
MOV P3,#0FH ;四位数显示位控制
ACALL DELAY ;调延时子程序
INC R0 ;寄存器R0加1
CJNE R0,#33H,DISP ;寄存器与立即数33比较,不相等则转移到DISP循环。相等则顺序执行
LJMP MAIN
DELAY: ;延时子程序—RET为止
MOV R7,#0FFH ;给寄存器植入某个数值
LOOP0:
MOV R6,#0FFH ;给寄存器植入某个数值
LOOP1:
DJNZ R6,LOOP1 ;减1比较,直至寄存器中的数值为零跳转
DJNZ R7,LOOP0 ;减1比较,直至寄存器中的数值为零跳转
RET ;返回子程序DELAY
TABLE:
DB 0C0H,0FFH,0C0H,0FFH ;间隔交替用于体现闪烁,去除则为连续递进。
DB 0C0H,0FFH,0F9H,0FFH,0A4H,0FFH,0B0H,0FFH,99H,0FFH,92H,0FFH,82H,0FFH,0F8H,
DB 80H,0FFH,90H,0FFH,88H,0FFH,83H,0FFH,0C6H,0FFH,0A1H,0FFH,86H,0FFH,8EH,
//4个一组的数码管异步显示(流水、轮流、循环)—数表
ORG 0000H
START:
MAIN:
MOV R0,#00H ;寄存器中放数值0
MOV DPTR,#TABLE ;指针指向数表
DISP: ;段标记
MOV A,R0 ;将寄存器中的数值转移到累加器中
MOVC A,@A+DPTR ;以DPTR作为基础,与累加器相加得到新地址给累加器
MOV P3,A ;将累加器的地址给P3口
MOV P2,#08H ;一位数显示位控制;个位
ACALL DELAY ;调延时子程序
ACALL DELAY
ACALL DELAY ;调延时子程序
MOV P2,#04H ;一位数显示位控制;十位
ACALL DELAY ;调延时子程序
ACALL DELAY
ACALL DELAY ;调延时子程序
MOV P2,#02H ;一位数显示位控制;十位
ACALL DELAY ;调延时子程序
ACALL DELAY
ACALL DELAY ;调延时子程序
MOV P2,#01H ;一位数显示位控制;十位
ACALL DELAY ;调延时子程序
ACALL DELAY
ACALL DELAY ;调延时子程序
INC R0 ;寄存器R0加1
CJNE R0,#16H,DISP ;寄存器与立即数16比较,不相等则转移到DISP循环。相等则顺序执行
MOV P3,#0FFH
LJMP MAIN
DELAY: ;延时子程序---RET为止
MOV R7,#0FFH ;给寄存器植入某个数值
LOOP0:
MOV R6,#0FFH ;给寄存器植入某个数值
LOOP1:
DJNZ R6,LOOP1 ;减1比较,直至寄存器中的数值为零跳转
DJNZ R7,LOOP0 ;减1比较,直至寄存器中的数值为零跳转
RET ;返回子程序DELAY
TABLE: ;间隔交替用于体现闪烁,去除则为连续递进。
DB 0FFH,0FFH,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0FFH
END
关于进位显示问题
b) 单个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—静态
>数码管--点阵单输出点阵显示
点阵被广泛用于各种文字与图形的显示场合。其灵活性和多样性是其普及的主要原因。点阵在本质上仍然是LED显示技术,也就是发光二极管显示问题。用发光二极管组成一个矩形阵列,这可以用发光点来组成各种形式的文字与图形。由于是矩形震裂,这需要通过两个P口来进行控制和组合。一个P口显示文字与图形,一个P口用来扫描产生运动
|