标题: 请教大佬关于LCD12864反白显示程序问题 [打印本页]

作者: wanli2018    时间: 2022-3-6 11:45
标题: 请教大佬关于LCD12864反白显示程序问题
本帖最后由 wanli2018 于 2022-3-6 17:25 编辑

请问一下这个程序怎样让  write_com(0x82); lcm_w_word("—名称设置");  名称设置  反白就是字是空白的 空白区添冲  显示成图三

51hei图片20220306114454.png (85.64 KB, 下载次数: 61)

51hei图片20220306114454.png

51hei图片20220306114441.png (20.06 KB, 下载次数: 63)

51hei图片20220306114441.png

51hei图片_20220306172527.png (447.59 KB, 下载次数: 56)

51hei图片_20220306172527.png

作者: aidianzi    时间: 2022-3-6 13:40
看看是否有专门指令 若没有可以把要写入LCD的数据部分0和1取反就行了
作者: wanli2018    时间: 2022-3-6 17:24
aidianzi 发表于 2022-3-6 13:40
看看是否有专门指令 若没有可以把要写入LCD的数据部分0和1取反就行了

就是指令没有看懂这个程序是别人的 我移植过来的  能详细说说吗 加Q 364470601

作者: 名字不是重点    时间: 2022-3-7 00:22
7920有个反白显示的指令,你查一下手册

作者: yzwzfyz    时间: 2022-3-7 16:32
显示取汉字字模的时候,将字模的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秒一次

大多数人采用的方式是:输出字模 = 字模,楼主也是这样的方式。
各有各的好处,供楼主参考。
作者: wanli2018    时间: 2022-3-9 13:36
名字不是重点 发表于 2022-3-7 00:22
7920有个反白显示的指令,你查一下手册

具体程序怎样更改呢困扰很久了
#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("您好!");
}

作者: wanli2018    时间: 2022-3-9 13:37
具体这个程序怎样更改呢?比喻这个程序最后显示 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-9 16:06
wanli2018 发表于 2022-3-9 13:36
具体程序怎样更改呢困扰很久了
#ifndef __LCD12864_H__
#define __LCD12864_H__

应该 是要先设定为扩展指令,然后再使用反白指令。至于是先显示再反白,还是先反白再显示要试一下。






作者: glinfei    时间: 2022-3-9 16:44
write_com(0x04)——write_com(0x07) 分别代表1——4行的反显。你查扩展命令就知道了。
作者: wanli2018    时间: 2022-3-9 23:27
glinfei 发表于 2022-3-9 16:44
write_com(0x04)——write_com(0x07) 分别代表1——4行的反显。你查扩展命令就知道了。

请问一下这个反白里 R1 和R0代表是什么意思这个有点看不懂  功能设定里的X 是代表0 还是多少?求大佬指教

51hei截图20220309232353.jpg (18.79 KB, 下载次数: 49)

51hei截图20220309232353.jpg

作者: 名字不是重点    时间: 2022-3-10 00:44
wanli2018 发表于 2022-3-9 23:27
请问一下这个反白里 R1 和R0代表是什么意思这个有点看不懂  功能设定里的X 是代表0 还是多少?求大佬指教 ...

R1/R0,就是1到4行的行号。00,表示第一行,11表示第4行。
反白指令是双稳态,第一次使用对应行反白,再一次使用,又不反白了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1