打印

关于51汇编驱动6963液晶的程序,看不明白,请大家帮忙!!

[复制链接]
844|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ycyysb639|  楼主 | 2019-7-25 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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做为循环次数,看看红色部之间的循环体,这个循环次数对吗??

使用特权

评论回复
评论
windows100 2019-7-31 08:38 回复TA
0x280不就是你说的640吗。想什么呢。循环对了呀 
ycyysb639 2019-7-26 08:54 回复TA
@ningling_21 :想用C,可这段汇编看不明白也不行啊!! 
ningling_21 2019-7-25 23:04 回复TA
怎么不用C写 

相关帖子

沙发
ningling_21| | 2019-7-26 09:18 | 只看该作者
@ycyysb639 :有时不用看懂汇编,只要看懂LCD的时序图就行

使用特权

评论回复
板凳
ycyysb639|  楼主 | 2019-7-26 09:46 | 只看该作者
ningling_21 发表于 2019-7-26 09:18
@ycyysb639 :有时不用看懂汇编,只要看懂LCD的时序图就行

谢谢你,我再看看吧

使用特权

评论回复
评论
ningling_21 2019-7-26 10:01 回复TA
屏的资料有吧 
地板
ycyysb639|  楼主 | 2019-7-30 18:23 | 只看该作者
有汇编高手吗,烦请看看!

使用特权

评论回复
5
kingTek| | 2019-7-30 19:22 | 只看该作者
本帖最后由 kingTek 于 2019-7-31 08:40 编辑

应该不是这么写的,目测b的数值很可能会被破坏掉,
得到高低字节循环次数后应该用双字节减法(减一)递减判零的方式来做循环判断

使用特权

评论回复
6
HappyXue| | 2019-8-1 16:38 | 只看该作者
本帖最后由 HappyXue 于 2019-8-1 16:57 编辑

内外两层循环,全部字节数为16位数据,高8位的值作为外层大循环,低8位的值作为内层小循环。内外两层循环整个字节数的递减。低8位减为0时,高8位减1。
楼主可以取几个临界值模拟指令流程心里跑一下,如要写255个字节,256字节等几种情况,就应该能理解了。个人觉得关键点在于8位寄存器的数据溢出,当寄存器为0时,再减1,就成了0xFF
但是代码感觉有问题,如果需要写的字节数正好是256的整数倍时,会多执行一次大循环。不过实际使用中可能不会触发这个问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝