TV:
MOV DPTR,#TAB
MOV R0,#30H
MOV R1,#0FEH
MOV R2,#4
tvloop:
MOV P2,#0FFh;【消隐】
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV P2,R1
LCALL DELAY
INC R0
MOV A,R1
RL A;【RR A 】
MOV R1,A
DJNZ R2,TVLOOP
MOV R1,#0FEH;;【要重新赋值】
RET
DELAY: MOV R3,#3
DJNZ R3,$
RET
子函数TV修改如上所示,代码经过仿真,无误。
你主要是没有做消隐处理,另外位选信号的处理也有误。
不懂可追问。
缺少消隐环节,改动如下:
void main()
{
uchar i = 0;
while(1) {
P1 = 0; //消隐.
P2 = control[i];//换位.
P1 = dofly[i]; //显示.
delay(200);
i++;
if(i == 8) i = 0;
}
}
看插图,程序,还没有运行。