打印

LCD12864不会显示任何信息

[复制链接]
5453|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuxiaolinsara|  楼主 | 2012-7-20 15:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuxiaolinsara 于 2012-7-20 16:27 编辑

我用的是ST7565P驱动的LCD12864,现在用程序控制显示信息,但是屏幕上什么都不显示,求帮助!
程序代码如下:
#include"reg52.h"
#include "intrins.h"
#define  NOP _nop_()
#define uchar unsigned char
#define uint  unsigned int
sfr  P1M0 = 0x92;
sfr  P1M1 = 0x91;
sfr  P2M0 = 0x96;
sfr  P2M1 = 0x95;
uchar code dig[]={"0123456789"};
uchar code dig2[]={0,1,2,3,':'};
sbit    LCD_SI  = P1^5;
sbit    LCD_SCL = P1^7;
sbit    LCD_A0  = P2^4;
sbit    LCD_CS  = P1^4;


/**************** 你(0) 好(1) ************************************/
unsigned char code dat[]={
0x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,
0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,/*"你",0*/
0x08,0x00,0x88,0x3F,0x08,0x10,0x08,0x08,0x3F,0x04,0x24,0x04,0x24,0x04,0xE4,0x7F,
0x22,0x04,0x26,0x04,0x18,0x04,0x10,0x04,0x28,0x04,0x64,0x04,0x22,0x05,0x01,0x02/*"好",1*/
};
/*******************************延时子程序**********************************/
void Delay(int n)
{
unsigned char i;
while(n--)
for(i=0;i<250;i++);
}

/*************************************************************
** 函数名称:Data_Send()
** 入口参数:需要发送的数据mydata
** 函数说明:串行模式发送数据
**********************************************************/
void Data_Send(unsigned char mydata)
{
unsigned int i;
unsigned char s,temp;
LCD_SCL=0;
LCD_CS=0;
s=mydata;
for(i=8;i>0;i--)
{
  LCD_SCL=0;
  NOP;
  NOP;
  temp=s&0x80;
  if(temp) LCD_SI=1;
  else     LCD_SI=0;
  LCD_SCL=1;
  s=s<<1;  
}
// LCD_CS=1;
}
//========================================================================
// 描述: 写一个字节的数据至LCD中的控制寄存器当中
// 参数: Command  写入的数据,低八位有效(byte)
//========================================================================
void Write_Cmd(unsigned char cmd)
{
LCD_A0 = 0;
LCD_CS = 0;
Data_Send(cmd);
}
//========================================================================
// 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
// 参数: dat 写入的数据
//========================================================================
void Write_Data(unsigned char dat)
{
LCD_A0 = 1;
LCD_CS = 0;
Data_Send(dat);
}
//========================================================
//页设置子函数
//========================================================
void Set_page(unsigned char a)
{
a|=0xb0;
Write_Cmd(a);
}
//========================================================
//列设置子函数
//========================================================
void Set_addr(unsigned char addr)
{
unsigned char a,b;
a=addr;
a&=0x0f;
b=addr>>4;
b|=0x10;
Write_Cmd(a);
Write_Cmd(b);
}
/**********************************************************
**显示
**参数入口Display(汉字数组)
*************************************************************/
void Display(uchar *p)
{
   unsigned char column;
   unsigned char page;
   for(page=0xB0;page<0xB9;page++) //写地址共8页
{
   Write_Cmd(page);
   Write_Cmd(0x10);    //列地址,高低字节两次写入
   Write_Cmd(0x00);
   for(column=0;column<128;column++)  //写128列
  {
    Write_Data(*p++);
  }
}
}
//========================================================
//初始化LCD
//========================================================
void Init_LCD(void)
{

  LCD_SI =0x00;                  //端口初始化
  Delay(10000);
  Write_Cmd(0xaf); //LCD_ON /*显示开关指令 Display ON*/         
//  Write_Cmd(0x60);
  Write_Cmd(0xa0); //Segment方向选择(0xa1反向)
  Write_Cmd(0xa6); //正常显示控制指令,RAM中数据不变(0xa7)
  Write_Cmd(0xa4); //所有的点正常显示
  Write_Cmd(0xa2); //偏压设置   1/9偏压
  Write_Cmd(0xc8); //Com 扫描方式设置(0xc8反向)
  Write_Cmd(0x2f); //上电模式
  Write_Cmd(0x24); //内部电阻模式的设置
  Write_Cmd(0x81); //电量设置模式(屏幕亮度)
  Write_Cmd(0x24); //指令数据,电量值
  Write_Cmd(0xf8); // 进入倍压比的设置模式
  Write_Cmd(0x00); // 倍压比设置为4倍
}
void InitUART(void)
{  
    TMOD = 0x20;         
    TH1 = 0xFA;  //晶振22.1184MHZ,波特率9600
    TL1 = 0xFA;
    SCON = 0x50;
    PCON = 0x00;
    EA = 0;
    ES = 0;
    TR1 = 1;
}

void main()
{
P1M0 = 0xFF;
P1M1 = 0x00;
P2M0 = 0xFF;
P2M1 = 0x00;

  InitUART();
  Delay(10000);
  Init_LCD();

  while(1)
  {
      Display(dat);// 在第二行第一列显示"你好"
   }
}

相关帖子

沙发
mugenwon| | 2012-7-22 19:04 | 只看该作者
长程序素来不看。建议你先别那么急显示一个字,先搞定能显示一个点再说。

使用特权

评论回复
板凳
dlyt_test001| | 2012-7-23 10:33 | 只看该作者
长程序素来不看。建议你先别那么急显示一个字,先搞定能显示一个点再说。
mugenwon 发表于 2012-7-22 19:04

支持,先显示一个点。点亮或熄灭。

使用特权

评论回复
地板
zhaofy521| | 2012-7-23 13:16 | 只看该作者
本帖最后由 zhaofy521 于 2012-7-23 13:18 编辑

1,12864可能需要配置,PCB后边有复位电路,串并通信选择。。。
2,检查电路; 3,检查时序
最后,这么长的程序一般基本大概不会有人看

调下对比度,看是否可调。。。

使用特权

评论回复
5
joyme| | 2012-7-23 18:28 | 只看该作者
看规格书,初始化里的命令与命令间都没有延时

使用特权

评论回复
6
NE5532| | 2012-7-23 20:26 | 只看该作者
鬼影点亮没?

使用特权

评论回复
7
misra| | 2012-7-23 20:51 | 只看该作者
你的任务是找到各种例子

使用特权

评论回复
8
NE5532| | 2012-7-23 21:37 | 只看该作者
你的任务是找到各种例子
misra 发表于 2012-7-23 20:51


不会找方法,例子看得越多,自己越昏。

使用特权

评论回复
9
yzhj| | 2012-7-23 21:44 | 只看该作者
背光和对比度调好了吗?

使用特权

评论回复
10
zxb1717| | 2012-7-24 10:15 | 只看该作者
应示波器观察一下你发出的命令是否正确,然后再看第二步

使用特权

评论回复
11
supersunny| | 2012-7-24 10:34 | 只看该作者
支持9楼,先把对比度调好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

44

帖子

0

粉丝