找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3851|回复: 13
收起左侧

基于STC89C52的无字库LCD12864不显示,大神帮忙看看什么问题

[复制链接]
ID:387860 发表于 2018-8-25 10:38 | 显示全部楼层 |阅读模式
网上下了好多测试程序,都显示不了,无字库的12864,分屏的,大神给帮忙看看,程序如下:#include <reg52.h>
#include"intrins.h"
#define  uchar unsigned char
#define  uint  unsigned  int
#define databus P0 //数据口
sbit RS=P2^6;  //写指令/数据
sbit RW=P2^5; //读/写
sbit EN=P2^7;  //使能
sbit CS1=P3^2;//片选1,控制左半屏,高电平有效
sbit CS2=P3^3;//片选1,控制右半屏,高电平有效
void delay(uchar  ms)  //延迟
{
   uchar   i;
   uchar   j;
   for(i=0;i<100;i++)
   for(j=0;j<ms;j++);
}

void busy()        //忙检查
{
   P0=0x00;
   RS=0;
   RW=1;
   EN=1;
   while(P0&0x80);
   EN=0;
}
void write_cmd(uchar value)//写指令
{
   busy();
   RS=0;
   RW=0;
   EN=1;
   databus=value;
   EN=1;
   delay(5);
   EN=0;

}
void write_data(uchar value)//写数据
{
   busy();
   RS=1;
   RW=0;
   EN=1;
   databus=value;
   EN=1;
   delay(5);
   EN=0;

}
void set_page(uchar page)//设置页
{
   page=0xb8||page;
   write_cmd(page);

}
void set_line(uchar startline)//设置行
{
   startline=0xc0|startline;
   write_cmd(startline);

}
void set_column(uchar column)//设置列
{
   column=column&0x3f;
   column=0x40|column;
   write_cmd(column);

}

void set_onoff(uchar onoff)//开关显示
{
   onoff=0x3e|onoff;
   write_cmd(onoff);

}

void slectscreen(uchar screen)//选择屏幕
{
   switch(screen)
   {
    case 0:CS1=0;CS2=0;break;
    case 1:CS1=0;CS2=1;break;
    case 2:CS1=1;CS2=0;break;
    default:break;
   }

}

void clearscreen(uchar screen) //清屏
{
   uchar i,j;
   slectscreen(screen);
   for(i=0;i<8;i++)
   {
    set_page(i);
    set_column(0);
    for(j=0;j<64;j++)
    {
     write_cmd(0x00);
    }
   }

}

void init()        //初始化
{
   busy();
   slectscreen(0);
   set_onoff(0);
   slectscreen(0);
   set_onoff(1);
   clearscreen(0);
   set_line(0);

}

void display(uchar ss,uchar page,uchar column,uchar *p)        //显示函数
{
   uchar i;
   slectscreen(ss);
   set_page(page);
   set_column(column);
   for(i=0;i<16;i++)
   {
    write_data(p[i]);
   }
   set_page(page+1);
   set_column(column);
   for(i=0;i<16;i++)
   {
    write_data(p[i+16]);
   }
}
uchar code  huan[]=
{0x00,0x08,0x18,0x28,0x08,0x08,0xE8,0x0F,0x18,0x20,0x1C,0x64,0x84,0x44,0x24,0x14,
0x00,0x20,0x60,0x30,0x18,0x06,0x03,0x0C,0x10,0x20,0x2C,0x43,0x43,0x4C,0x10,0x20,
};
uchar code  ying[]=
{0x00,0x00,0xFC,0x04,0x04,0x04,0xFC,0x02,0x02,0x04,0xFC,0x00,0x04,0xCE,0x41,0x40,
0x00,0x40,0x43,0x44,0x42,0x40,0x5F,0x40,0x41,0x42,0x47,0x40,0x20,0x1F,0x20,0x40,
};
void main()        //主函数
{
init();
clearscreen(0);
while(1)
{
set_line(1);
display(1,0,2*16,huan);
display(1,0,3*16,ying);
}
}



接线图

接线图

12864

12864

实际显示

实际显示
回复

使用道具 举报

ID:387860 发表于 2018-8-25 15:50 | 显示全部楼层
第一次发帖,没人回复啊,是需要悬赏?
回复

使用道具 举报

ID:97554 发表于 2018-8-25 16:20 | 显示全部楼层
3脚V0对地接个电阻调下对比度。另外LCD不同厂家生产的时序不一定一样。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:97554 发表于 2018-8-25 16:35 | 显示全部楼层

这个是官网找的PDF,上边有例程,供参考

DS12864-10说明书V11.pdf

1.03 MB, 下载次数: 56

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:384109 发表于 2018-8-25 17:42 | 显示全部楼层
需要调节对比度的,要看你的学习板的电路该如何和12864连接,学习板的电路要和12864对应上

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:96682 发表于 2018-8-26 00:35 | 显示全部楼层
明显是开发板端口设置问题,这时液晶屏并未与单片机有关联,只是背光得电发光而已

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:387860 发表于 2018-8-29 21:34 | 显示全部楼层
多谢大家了,端口也检查了,电位器也加了,还是不行,直接换了带字库的屏,没有片选的,新手入门,带片选的太难了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:527430 发表于 2019-5-5 10:07 | 显示全部楼层
这个问题我刚刚好知道,在接口正确的情况下,在LCD屏的接口第1、3、18脚接一颗5.1K电位器。就是说电位器1脚接GND,2脚接V0,3脚接VOUT;原理就是LCD需要一个负电压才能点亮,而屏不需要直接给负压,给个电位器就行了。
回复

使用道具 举报

ID:535176 发表于 2019-8-6 14:17 | 显示全部楼层
yekai_yh 发表于 2018-8-29 21:34
多谢大家了,端口也检查了,电位器也加了,还是不行,直接换了带字库的屏,没有片选的,新手入门,带片选的 ...

带字库的怎么弄啊。求解
回复

使用道具 举报

ID:535176 发表于 2019-8-6 14:55 | 显示全部楼层
yekai_yh 发表于 2018-8-25 15:50
第一次发帖,没人回复啊,是需要悬赏?

咱俩情况一样哎
回复

使用道具 举报

ID:959867 发表于 2021-9-4 08:40 | 显示全部楼层
今天遇到了同样的问题,在stc90c51上能跑通的程序,换上stc89c51就跑不通,通过排除法发现卡在12864初始化清屏这一块,直接卡死了?反正后续程序不跑了,把这一段屏蔽掉后续就能跑.....
回复

使用道具 举报

ID:420213 发表于 2021-9-4 09:26 | 显示全部楼层
不关你片不片选的事,你要写好字库取模,没字库的他不会内置取模好的字库给你,要自己做模,然后跟程序一并烧录进单片机的flash里面才行的。
回复

使用道具 举报

ID:959867 发表于 2021-9-4 09:33 | 显示全部楼层
elic885 发表于 2021-9-4 08:40
今天遇到了同样的问题,在stc90c51上能跑通的程序,换上stc89c51就跑不通,通过排除法发现卡在12864初始化 ...

更新进展:应该是程序存储器空间不足了,删减一些不必要的函数定义就好了。挺奇怪的,存储空间不足也能写进去?
回复

使用道具 举报

ID:646535 发表于 2023-3-23 22:29 | 显示全部楼层
好奇心强 发表于 2019-5-5 10:07
这个问题我刚刚好知道,在接口正确的情况下,在LCD屏的接口第1、3、18脚接一颗5.1K电位器。就是说电位器1脚 ...

谢谢,解决了我的问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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