1 共阳极数码管
ORG 00H
MAIN: MOV DPTR, #TABLE ; 把后面的表值存在DPTR中
MOV R0, #0 ; 向R0设定初值
LOOP: MOV A, R0 ;把初值给累加器A
MOVC A, @A+DPTR; 间接寻址,取表中代码,@A等同于指向DPTR的指针
MOV P0, A ;把上一句中取到的码从P0送出
ACALL DLY1S ; 调用1秒延时
INC R0 ;R0自加一
CJNE R0, #16 , LOOP ;R0中的值不是16,循环
JMP MAIN; 重新开始,间断循环
//这里 MAIN: 到 JMP MAIN; 形成一个大循环
DLY1S: MOV R5, #50 ; 延时子函数
D1: MOV R6, #100;
D2: MOV R7, #100 ;
DJNZ R7, $ ;
DJNZ R6, D2;
DJNZ R5, D1 ;
RET
;这是一个数组
TABLE: DB 0c0H,0f9H, 0a4H, 0b0H, 99H,92H,82H,0f8H
DB 80H,90H,88H,83H,0c6H,0a1H,86H,8eH ;字符码表
END
MOVC 指令
MOVC A, @A+DPTR
; 以DPTR为基址,A为偏移量
MOV DPTR, #TABLE ; 设置表首地址
MOV A, #INDEX ; 设置偏移量(0,1,2,...)
MOVC A, @A+DPTR ; 读取表中第INDEX个数据
CJNE 指令
全称:Compare and Jump if Not Equal
功能 :比较两个操作数,不相等则跳转
同时影响:进位标志CY
CJNE A, #data, rel
; 累加器A与立即数比较
CJNE A, #30H, NEXT ; 如果A≠30H,跳转到NEXT
; 如果A=30H,顺序执行