单片机点阵8*8显示汉字程序解释

ORG 0HSTART:MOV DPTR,#DATA1 ;指向点阵代码首址MOV R2,#80H ;80H 使第7 列(最左一列)阴极为低电平CLR CDISP: MOV A,#0MOVC A,@A+DPTR ;取一列点阵代码MOV P2,A ;加至阳极MOV P1,R2 ;使一列阴极为低电平CALL DELAY ;延时INC DPTR ;指向下一列代码MOV A,R2 ;R2 右移一位,为下一列阴极输出低电平作准备RRC AMOV R2,AJNC DISP ;8 列未完,转AJMP STARTDELAY: MOV R1,#0 ;延时子程序DELY0: DJNZ R1,DELY0RETDATA1: DB 24H,44H,0DCH,54H,7FH,54H,54H,44H;年的点阵代码END上面的程序是显示的“年”字,但是在解释上很难理解,希望可以有高手详细解释一下,最好解释出每个指令的含义。谢谢

1. ORG 0HSTART:MOV DPTR,#DATA1 ;指向点阵代码首址;
CLR CDISP?这个应该是CLR C(清除标志位,因为下面要判断是否移完8位)吧

2. MOV R2,#80H ; 80H 使第7 列(最左一列)阴极为低电平(这个感觉也有问题)

3.DISP:MOV A,#0; 赋初值0,为了下面能从点阵代码表中从零开始取代码
MOVC A,@A+DPTR ; 取第一列点阵代码
MOV P2,A ; 将第一列点阵代码的值赋给P2口
MOV P1,R2 ;使一列阴极为低电平?
CALL DELAY ; 调用延时
INC DPTR ; 指向下一列点阵代码
MOV A,R2 ; R2的值赋给A
RRC A ; 右移一位,为下一列阴极输出低电平作准备
MOV R2,A ;右移一位后再把值存储到R2,为了下一次右移
JNC DISP ; 8 列未完跳回到DISP继续执行

4.AJMP START 跳转到START
DELAY: MOV R1,#0 ;//这个有问题,R1不是赋零,不然怎么延时啊
DELY0: DJNZ R1,DELY0 ;延时(直到R1的值变为0)

5.RET 返回(这个子程序执行完了)

6.DATA1: DB 24H,44H,DCH,54H,7FH,54H,54H,44H; 点阵代码表

大概就这个意思,好久没看汇编了,你自己再斟酌一下!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-09
8x8点阵只能显笔画少的字,比如“一,二三,天”等等!要是显示别的字,用16x16的点阵!我扣扣373685923!欢迎交流!
相似回答