wanli2018 发表于 2022-3-9 23:27 R1/R0,就是1到4行的行号。00,表示第一行,11表示第4行。 反白指令是双稳态,第一次使用对应行反白,再一次使用,又不反白了。 |
write_com(0x04)——write_com(0x07) 分别代表1——4行的反显。你查扩展命令就知道了。 |
wanli2018 发表于 2022-3-9 13:36 应该 是要先设定为扩展指令,然后再使用反白指令。至于是先显示再反白,还是先反白再显示要试一下。 ![]() ![]() |
具体这个程序怎样更改呢?比喻这个程序最后显示 lcm_w_word("您好!"); 把您好 显示取反 #ifndef __LCD12864_H__ #define __LCD12864_H__ #include "zk.h" #include <delay.h> #define uchar unsigned char #define uint unsigned int /*-----------------------------定义12864液晶屏数据线---------------------------------*/ sbit LCM_RS = P5^0; //模式位,为0输入指令,为1输入数据 sbit LCM_RW = P5^1; //读写位,为0读,为1写 sbit LCM_EN = P5^2; //使能位,高脉冲 sbit LCD12864_PSB_PORT = P5^4; #define Lcd_Bus P4 //LCM12864数据总线,P0.0--P0.7对应连接DB0--DB7 /*------------------------------------------------------------------------------------*/ /*12864液晶显示屏并口驱动程序--------------------------------------------------------*/ //检查忙位 void chk_busy() { LCM_RS=0; LCM_RW=1; LCM_EN=1; Lcd_Bus=0xff; while(Lcd_Bus&0x80); LCM_EN=0; } /*写指令到LCD------------------------------------------------------------------------*/ void write_com(uchar cmdcode) { chk_busy(); LCM_RS=0; LCM_RW=0; LCM_EN=1; Lcd_Bus=cmdcode; DelayUs2x(5); LCM_EN=0; DelayUs2x(5); } /*写数据到LCD------------------------------------------------------------------------*/ void write_data(uchar Dispdata) { chk_busy(); LCM_RS=1; LCM_RW=0; LCM_EN=1; Lcd_Bus=Dispdata; DelayUs2x(5); LCM_EN=0; DelayUs2x(5); } /*向LCM发送一个字符串,长度64字符之内-------------------------------------------------*/ void lcm_w_word(uchar *s) { while(*s>0) { write_data(*s); s++; } //应用:lcm_w_word("您好!"); } |
名字不是重点 发表于 2022-3-7 00:22 具体程序怎样更改呢困扰很久了 #ifndef __LCD12864_H__ #define __LCD12864_H__ #include "zk.h" #include <delay.h> #define uchar unsigned char #define uint unsigned int /*-----------------------------定义12864液晶屏数据线---------------------------------*/ sbit LCM_RS = P5^0; //模式位,为0输入指令,为1输入数据 sbit LCM_RW = P5^1; //读写位,为0读,为1写 sbit LCM_EN = P5^2; //使能位,高脉冲 sbit LCD12864_PSB_PORT = P5^4; #define Lcd_Bus P4 //LCM12864数据总线,P0.0--P0.7对应连接DB0--DB7 /*------------------------------------------------------------------------------------*/ /*12864液晶显示屏并口驱动程序--------------------------------------------------------*/ //检查忙位 void chk_busy() { LCM_RS=0; LCM_RW=1; LCM_EN=1; Lcd_Bus=0xff; while(Lcd_Bus&0x80); LCM_EN=0; } /*写指令到LCD------------------------------------------------------------------------*/ void write_com(uchar cmdcode) { chk_busy(); LCM_RS=0; LCM_RW=0; LCM_EN=1; Lcd_Bus=cmdcode; DelayUs2x(5); LCM_EN=0; DelayUs2x(5); } /*写数据到LCD------------------------------------------------------------------------*/ void write_data(uchar Dispdata) { chk_busy(); LCM_RS=1; LCM_RW=0; LCM_EN=1; Lcd_Bus=Dispdata; DelayUs2x(5); LCM_EN=0; DelayUs2x(5); } /*向LCM发送一个字符串,长度64字符之内-------------------------------------------------*/ void lcm_w_word(uchar *s) { while(*s>0) { write_data(*s); s++; } //应用:lcm_w_word("您好!"); } |
显示取汉字字模的时候,将字模的0、1反向一下即可。 或者再建一个反向字模库,此库与原字库0、1相反。 方法很多。 我在写程序时,会设立以下标记: 1、闪标记:B_FLASH,=0/1 = 正常显示/闪动显示 2、反白标记:B_INV,=0/1 = 正常显示/反白显示 这样,在显示时只要改变对应位置的标记,就可以决定显示的反白与闪动。(当然,标记不止两个) 此时,输出字模的方案是: (字模 XOR B_INV) AND (B_FLASH * B_300MS OR /B_FLASH ) 其中: B_300MS 在定时中断服务程序中,每0.3秒反转一次0/1。显示切换也是,每0.3秒一次 大多数人采用的方式是:输出字模 = 字模,楼主也是这样的方式。 各有各的好处,供楼主参考。 |
7920有个反白显示的指令,你查一下手册 |
aidianzi 发表于 2022-3-6 13:40 就是指令没有看懂这个程序是别人的 我移植过来的 能详细说说吗 加Q 364470601 |
看看是否有专门指令 若没有可以把要写入LCD的数据部分0和1取反就行了 |