本帖最后由 ycyysb639 于 2019-7-26 10:25 编辑
① 建立CGRAM 子程序
CODE1 EQU 33H // 汉字字符代码
CGRAM : MOV DAT1,#03H // 设置CGRAM 偏置地址
MOV DAT2,#00H
MOV COM,#22H
LCALL PR1
MOV DAT1,#00H // 设置存储器地址指针
MOV DAT2,#1CH
MOV COM,#24H
LCALL PR1
MOV COM,#0B0H // 设置自动写方式
LCALL PR12
MOV A,COUNT // 计算写入的字节数
MOV B,#08H
MUL AB
MOV COUNT,A // 计算低8 位数据
INC B // 计算高8 位数据
MOV DPTR,#CGTAB // 取字符库首地址
PUSH DPH // 存字符库指针
PUSH DPL
CGRAM1 : LCALL ST3 // 判自动写状态位
POP DPL // 取字符库指针
POP DPH
CLR A
MOVC A,@A+DPTR // 取数据
INC DPTR // 字符库指针加一
PUSH DPH // 存字符库指针
PUSH DPL
LCALL PR13 // 写入数据
DJNZ COUNT,CGRAM1 // 计数循环
DJNZ B,CGRAM1
MOV COM,#0B2H // 写入结束自动写指令
LCALL PR12
POP ACC // 修正栈指针
POP ACC
RET
; 汉字库
CGTAB : DB 00H,040H,37H,10H,081H,061H,22H,0AH // "液"
DB 16H,02BH,0E2H,22H,22H,22H,023H,22H
DB 80H,044H,0FEH,20H,20H,03CH,44H,64H
DB 98H,048H,50H,20H,50H,08EH,004H,00H
DB 00FH,08H,08H,00FH,08H,08H,00FH,08H // "晶"
DB 07EH,42H,42H,07EH,42H,42H,07EH,42H
DB 0E0H,20H,20H,0E0H,20H,20H,0E0H,24H
DB 0FEH,84H,84H,0FCH,84H,84H,0FCH,84H
请大侠看看,这是一段向T6963 GCRAM中写入字节信息的汇编,主要是红色字体部分,假入我要写入8*80=640个字节,按正常的想法是要做640次循环,
但这段汇编中次count这个数送A,#08H这个数送B,再将A和B相乘,然后再将乘积的低字节送count(送后COUNT中值为80H),高字节在B中(02H),然后用count和B做为循环次数,看看红色部之间的循环体,这个循环次数对吗??
|
0x280不就是你说的640吗。想什么呢。循环对了呀
@ningling_21 :想用C,可这段汇编看不明白也不行啊!!
怎么不用C写