lcd 程序解释 pg12864仿真的程序。能帮我解释下第一句 地址指针 为什么这么设置,第二句的意思。谢谢.

2024-12-26 18:22:02
推荐回答(2个)
回答1:

不知道你cmd2,cmd3函数内部怎么实现的,就给个函数名和形参怎么判断函数的功能?
要知道,告诉函数+形参相当于什么都没说

我通过参数和注释大概猜想一下吧
前面的X便宜4位加上Y,目的应该是将俩个参数放到一块内存里面方便调用
调用的时候(假设内存是a)
a>>4为x的值,a只去俩位为y的值,我猜想

第二个函数无符号字符减去32,32刚好是大写字母和小写字母的差值(比如,A的ASCII值为97,a的ASCII值为65,刚好差32),应该目的是为了大写字母转换为小写字母,或者就是按你注释上面说的字符表刚好与ASCII每位差32,0xc0是16进制,具体怎么用得看函数体。

回答2:

这是个网上流传很广的程序,函数传递的2个参数解释:x 表示12864需要显示的字符行数,范围0-7表示最低显示1行(x=0),最大8行(x=7)。y 表示程序定义的是每行显示最低显示1个字符(y=0),最大显示16个字符(y=15)。
第一句解释:(((x*2)<<4)+y), (x*2)<<4和(x*2)*16的结果是一样的 结果就是x*32.原因是这样的:pg12864内置的驱动芯片是t6963c,t6963c每行最大可以显示32个字符,而12864屏支持每行16个字符,程序(((x*2)<<4)+y),就是把x*32后,表示显示完一行的16个字符以后,直接把t6963c的显示地址调到这一行的结尾,那么下一个字符 就自动重启一行写了,也就是把t6963c的显示地址的 17-32个字符给跳过了,这就是x要乘以32的由来,因为每一行的起始地址都是32个字符的整倍数。
(ch-32,0xc0)第二句就好解释了,ch表示的是asii码的编码值,而t6963c内置的字符编码值刚好和asii码相差32,ch表示的是asii码的编码值减去32以后刚好是t6963c内置字符码的码值,这样12864才能正确显示出字符来。