请问以下程序如何实施左移?查表指令是什么?高分悬赏!追加分数.

来源:百度知道 编辑:UC知道 时间:2024/06/24 14:21:55
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV DPTR,#TAB ;字码表初址赋值
MOV R1,#00H ;列控制码
MOV R4,#96 ;移动“ ”及“单片机仿真”6个字符,共96列
CM: MOV R5,#5 ;每屏反复显示5次
MOV R3,#16 ;列数
C1: MOV R2,#0 ;取码指针
C16: MOV P0,#00H
MOV P2,#00H ;关显示
CLR P3.0
MOV A,R2
MOVC A,@A+DPTR ;取当前列显示字码的第一个字节
MOV P0,A ;送1~8行控制口
INC R2
MOV A,R2
MOVC A,@A+DPTR ;取当前列的显示字码的第二个字节
MOV P2,A ;送9~15行控制口
INC R2
MOV P1,R1 ;送列控制码
INC R1
ACALL D1MS ;显示2MS
ACALL D1MS
DJNZ R3,C16 ;一屏16列是否显示完
MOV R3,#16
DJNZ R5,C1 ;未显示5次,继续
INC DPTR ;一屏反复显示5次完,字码表初值加2
INC DPTR
DJNZ R4,CM ;96列未移动完,继续
AJMP MAIN ;96列移动完,返回,重新从“ ”开始显示
D1MS: MOV R6,#2
MOV R7,#248
DJNZ R7,$
DJNZ R6,$-4
RET
TAB: DB 000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ;
DB 000H ,000H ,000H ,000H ,000H ,000H ,000H ,000H ,00

你的显示器是16行96列的LED矩阵,显示的“ ”及“单片机仿真”共7个字,每个字在屏幕上显示占有16行8列点阵.
从屏幕右边开始(第一列开始)显示,每运行一次INC R1指令,显示内容向左边移动一列,每次显示2ms时间,当移动16列时,一个字被完整显示,为加深视觉效果重复5次.
由于计算机速度快,各个点虽然间隔显示,但人的视觉上是连续的.

MOVC A,@A+DPTR 就是查表指令.此指令正确执行的前提是事先要建立一个相应的数据表,连同程序代码存入ROM中,这块数据的第一个单元地址就是表首地址,当表首地址放入DPTR后,再在A中放入适当的数,就可以用MOVC A,@A+DPTR 指令到ROM中预存的数据表里面读取到你所需要的那个数据.如何改变A和DPTR的内容就靠编程人员控制了.