找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2520|回复: 10
打印 上一主题 下一主题
收起左侧

请教大佬关于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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:41656 发表于 2022-3-6 13:40 | 只看该作者
看看是否有专门指令 若没有可以把要写入LCD的数据部分0和1取反就行了
回复

使用道具 举报

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

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

使用道具 举报

地板
ID:824490 发表于 2022-3-7 00:22 | 只看该作者
7920有个反白显示的指令,你查一下手册
回复

使用道具 举报

5#
ID:123289 发表于 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秒一次

大多数人采用的方式是:输出字模 = 字模,楼主也是这样的方式。
各有各的好处,供楼主参考。
回复

使用道具 举报

6#
ID:265485 发表于 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("您好!");
}
回复

使用道具 举报

7#
ID:265485 发表于 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("您好!");
}
回复

使用道具 举报

8#
ID:824490 发表于 2022-3-9 16:06 | 只看该作者
wanli2018 发表于 2022-3-9 13:36
具体程序怎样更改呢困扰很久了
#ifndef __LCD12864_H__
#define __LCD12864_H__

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





回复

使用道具 举报

9#
ID:844772 发表于 2022-3-9 16:44 | 只看该作者
write_com(0x04)——write_com(0x07) 分别代表1——4行的反显。你查扩展命令就知道了。
回复

使用道具 举报

10#
ID:265485 发表于 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
回复

使用道具 举报

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表