找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于LCD12864只有蓝色底,没有背光(mcu程序仿真是没有问题的)

[复制链接]
跳转到指定楼层
楼主
我这个LCD12864在proteus上面仿真是可以显示的,但是实际上接好线,同样的代码,就是只有蓝色底(连背光也没有),接线是没有问题的,大家觉得问题可能出现在哪里

QQ截图20190127205040.jpg (208.52 KB, 下载次数: 18)

QQ截图20190127205040.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:473159 发表于 2019-1-28 04:11 | 只看该作者
LCD12864仿真与现实用的LCD12864没有那一款是相同的,所以不能用仿真的代码驱动现实的LCD,你应该将你的LCD图片传上来让大家看看你用的是哪种(现实板的也有很大的不同,有有字库与无字库,驱动用的芯片也有很多不一样的)

我这有一个

#include<reg51.h>
#define uint  unsigned int
#define uchar unsigned char

sbit  RS  =  P2^6;             //(数据命令)寄存器选择输入
sbit  RW  =  P2^5;             //液晶读/写控制
sbit  EN  =  P2^7;             //液晶使能控制
sbit  PSB =  P3^2;             //串/并方式控制
sbit  RST =  P3^4;                           //复位端
void  LCD12864_init();
void  delay(uint c);
uchar  Busy(void);          //判忙
void  WriteCmd(uchar cmd);        //写指令
void  WriteData(uchar dat); //写数据
void  SetWindow(uchar x, uchar y);  // SetWindow
void disp(uchar *wc);        //显示

uchar code    zhifu1[]="相见时难别亦难,东风无力百花残。春蚕到死丝方尽,蜡炬成灰泪始干。0 ";
uchar code    zhifu2[]="晓镜但愁云鬓改,夜吟应觉月光寒。蓬山此去无多路,青鸟殷勤为探看。0 ";
uchar code    shiju1[]="黄河远上白云间,一片孤城万仞山。羌笛何须怨杨柳,春风不度玉门关。0 ";
uchar code    shiju2[]="两个黄鹂鸣翠柳,一行白鹭上青天。窗含西岭千秋雪,门泊东吴万里船。0 ";
uchar code    shiju3[]="  千山鸟飞绝,    万径人踪灭。    孤舟蓑笠翁,    独钓寒江雪。  0 ";
uchar code       ci1[]="春花秋月何时了?往事知多少。    小楼昨夜又东风,故国不堪回首    0 ";  
uchar code       ci2[]="月明中。        雕栏玉砌应犹在,只是朱颜改。    问ju能有几多愁?0 ";//         我晕!没有君!
uchar code       ci3[]="恰似一江春水    向东流。                                        0 ";
uchar code  zhaopin1[]="    【招聘】    电子软件工程师: 1 名            1.要会吹牛      0 ";   
uchar code  zhaopin2[]="2.要会勾妹仔,  多勾多得!      3.要会忽悠      赵本山十级俱佳。0 ";
void  disp(uchar *wc)
{                                                                                  
        uchar t;
                t=0;
                SetWindow(0, 0);
                while(wc[t]!='\0')
                {
                        WriteData(wc[t]);
                        t++;
                        if (t==16)SetWindow(1,0);   //第一行满写第三行
                        if (t==32)SetWindow(2,0);        //第三行满写第四行
                        if (t==48)SetWindow(3,0);        //第三行满写第四行               
                }
                delay(5000);
}




void main()
{
  uchar         j=0;
        LCD12864_init();
        while(1)
        {       
         disp(&zhifu1);
         disp(&zhifu2);
         disp(&shiju1);
         disp(&shiju2);
         disp(&shiju3);       
         disp(&ci1);
         disp(&ci2);
         disp(&ci3);
         disp(&zhaopin1);
         disp(&zhaopin2);
       

        }       
}

void  LCD12864_init()  //初始化LCD12864
{
        PSB = 1;          //选择并行输入
        RST = 1;          //复位
        WriteCmd(0x30);  //选择基本指令操作
        WriteCmd(0x0c);  //显示开,关光标
        WriteCmd(0x01);  //清除LCD12864的显示内容
}

void  delay(uint c)
{
    uchar a,b;
        for(; c>0; c--)
        {
                for(b=199; b>0; b--)
                {
                        for(a=1; a>0; a--);
                }
        }
}

uchar  Busy(void) //判忙
{
        uchar i = 0;
       
        RS = 0;           //选择命令
        RW = 1;        //选择读取
        EN = 1;
        delay(1);
       
        while(( P0 & 0x80) == 0x80)        //检测读取到的值
        {
                i++;
                if(i > 100)
                {
                        EN = 0;
                        return 0;           //超过等待时间返回0表示失败
                }
        }
        EN = 0;
        return 1;
}

void  WriteCmd(uchar cmd)        //写指令
{
        uchar i;
        i = 0;
        while(  Busy() == 0)
        {
                delay(1);
                i++;
                if( i>100)
                {
                        return;           //超过等待退出
                }       
        }
        RS = 0;     //选择命令
        RW = 0;     //选择写入
        EN = 0;     //初始化使能端
        P0 = cmd;   //放置数据
        EN = 1;                   //写时序
        delay(5);
        EN = 0;                                           
}

void  WriteData(uchar dat) //写数据
{
        uchar         i = 0;
        while(  Busy() == 0)
        {
                delay(1);
                i++;
                if( i>100)return;//超过等待退出               
        }
        RS = 1;        //选择数据
        RW = 0;        //选择写入
        EN = 0;        //初始化使能端
        P0 = dat;      //放置数据
        EN = 1;                   //写时序
        delay(5);
        EN = 0;                                                                   
}

void  SetWindow(uchar x, uchar y)  // SetWindow
{
        uchar con;
        if(x == 0)      x = 0x80;  // 第一行的地址是80H
        else if(x == 1) x = 0x90;  // 第二行的地址是90H       
        else if(x == 2)        x = 0x88;  // 第三行的地址是88H
        else if(x == 3)        x = 0x98;  // 98
        con = x + y;
        WriteCmd(con);
}


这几点控制点你要改成你板上的,数据口也要改


sbit  RS  =  P2^6;             //(数据命令)寄存器选择输入
sbit  RW  =  P2^5;             //液晶读/写控制
sbit  EN  =  P2^7;             //液晶使能控制
sbit  PSB =  P3^2;             //串/并方式控制
sbit  RST =  P3^4;                           //复位端

下面是我用的12864带字库




评分

参与人数 7黑币 +108 收起 理由
zhengchong60 + 12
sheng7533967 + 12
钻牛尖滴刘尖尖 + 12
站着说话不腰疼 + 12
shuisheng60 + 35
刀刀见红 + 15 回帖助人的奖励!
Trump1438 + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:161151 发表于 2019-1-28 09:59 | 只看该作者
对比度控制部分电路怎么处理的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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