首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]12864液晶显示的问题

[求助]12864液晶显示的问题

高手请帮忙

   我以前用NIOSII做过一块不带字库的OCM12864的液晶显示正常,现在换了一块JDL12864带字库的液晶模块,显示不出字来了,不知道写数据的时候发什么东西才能把字库里的字调到RAM里来显示,请高手指点一下。现在编译没有错误就是不显示东西,我的程序如下帮看看那里不对?谢谢

LCD12864 驱动程序

#ifndef _LCD12864_H_
#define _LCD12864_H_
#endif //_LCD12864_H_

#define LcdEN *(unsigned int *)PIO_LCD_EN_BASE
#define LcdRS *(unsigned int *)PIO_LCD_RS_BASE
#define LcdRW *(unsigned int *)PIO_LCD_RW_BASE
#define LcdFSB *(unsigned int *)PIO_LCD_FSB_BASE
#define DatBus *(unsigned int *)PIO_LCD_DATA_BASE

unsigned char  yb=0x80;
unsigned char  hanzi00[]={"回眸一笑百媚生。"};
unsigned char  hanzi01[]={"桃花依旧笑春风,"};
unsigned char  hanzi02[]={"葡萄美酒夜光杯,"};
unsigned char  hanzi03[]={"老槐树茶馆好茶。"};
unsigned char  hanzi20[]={"love family "};
unsigned char  hanzi21[]={"display program,"};
unsigned char  hanzi22[]={"welcome to china"};
unsigned char  hanzi23[]={"come on with me "};

//延时子程序
void delay(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
   { for(j=0;j<100;j++);
   {;}
   }
}

//写命令到LCD
void write_com(unsigned char cmdcode)
{  LcdFSB=1;               //选择并行
   LcdRS=0;
   LcdRW=0;
   LcdEN=1;
   DatBus=cmdcode;     
   LcdEN=0;
   delay(5);
}

//写数据到LCD
void write_data(unsigned char Dispdata)
{  LcdFSB=1;
   LcdRS=1;
   LcdRW=0;
   LcdEN=1;
   DatBus=Dispdata;
   LcdEN=0;
   delay(5);
}

//初始化LCD屏
void lcdinit()
{  delay(2000);
   write_com(0x30);       //选择基本指令集 
   delay(10);
   write_com(0x30);       //选择8bit数据流 
   delay(5);
   write_com(0x0c);       //开显示(无游标,不反白) 
   delay(10);
   write_com(0x01);       //清显示并设地址指针为00H  
   delay(500);
   write_com(0x06);       //指定在资料的读取及写入时设定游标的  
                          //移动方向及指定显示的位移            
}

void outChinese(unsigned char place,unsigned char unit,unsigned char charcode[] )
{
 unsigned char i;
 write_com(place);
 for(i=0;i<unit*2;i++)//一个汉字为两个字符
 {write_data(charcode);}
}
void outchar(unsigned char place,unsigned char unit,unsigned char charcode[] )
{
 unsigned char i;
 write_com(place);
 for(i=0;i<unit;i++)
 {write_data(charcode);}
}
void ydgb(void)
{
  write_com(yb);//显示光标位置
   delay(10);
    yb=yb+0x01;
 if(yb==0x88){yb=0x90;}
 if(yb==0x98){yb=0x88;}
 if(yb==0x90){yb=0x98;}
 if(yb==0xa0){yb=0x80;} 
}
void display1(void)
{
 ydgb();
 outChinese(0x80,8,hanzi00);//第一行:80-87H
 outChinese(0x90,8,hanzi01);//第二行:90-97H
 outChinese(0x88,8,hanzi02);//第三行:88-8FH
 outChinese(0x98,8,hanzi03);//第四行:98-9FH
 //outchar(0x9f,2,name4);
}
void display3(void)
{
 ydgb();
 outchar(0x80,16,hanzi20);
 outchar(0x90,16,hanzi21);
 outchar(0x88,16,hanzi22);
 outchar(0x98,16,hanzi23);
}

MAIN主函数


#include "system.h"
#include "LCD12864.h"
void main()
{   lcdinit();            //初始化LCD屏
    delay(10);
    while(1)
    {
     ydgb();
     display1();            //显示文本
     delay(50000);
     write_com(0x01);     //清屏
     delay(10);
      ydgb();
     display3();            //显示文本
     delay(50000);
     write_com(0x01);     //清屏
     delay(10);
    }
}

我就想先显示出个汉字来,哪位有这方面的调试过的程序不知道能不能提供一下做个参考,谢谢!!

你可以看看这个12864字库程序。arm7的:

/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:   main.c
** Last modified Date:  2004-09-16
** Last Version:  1.0
** Descriptions:  The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:   Chenmingji
** Created date:  2004-09-16
** Version:    1.0
** Descriptions:  The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"

#define led1  (1<<16)
#define led2  (1<<17)
#define led3  (1<<18)
#define led4  (1<<19)
#define CS    (1<<21) 
#define SID   (1<<22) 
#define SCLK  (1<<23)


#define CS_H()  IO1SET=1<<21
#define CS_L()  IO1CLR=1<<21
#define SID_H() IO1SET=1<<22
#define SID_L() IO1CLR=1<<22
#define SCLK_H() IO1SET=1<<23
#define SCLK_L() IO1CLR=1<<23

#define ADD_SET 0x34             //定义扩充指令集合
#define MOVE 0x03            //允许垂直滚动
#define FUNC_SET   0x30      //8位数据,基本指令集   
#define DISP_ON     0x0f      //开显示,开关标,不闪烁
#define CLR_SCREEN 0x01      //清屏幕
#define ENTRY_MODE 0x06      //光标右移动,画面不动        

#define S_CMD   0xf8        //启动命令
#define S_DATA  0xfa        //启动数据


uint8 hz1[]={"欢迎使用ARM7平台"};
uint8 hz2[]={"版权归刘国华所有"};
uint8 hz3[]={"QQ:158655612 ^_^"};
uint8 hz4[]={"手机:15923522472"};

void delay(uint32 t)

 uint32 i;
 for(i=0;i<t;i++);
}

void send_byte(uint8 data)
{
 uint8 i;
 
 SCLK_L();        //sclk=0
 for(i=0;i<8;i++)
 {
  if(data&0x80)   //判断最高位为1不
   SID_H();
  else
   SID_L();
   
  SCLK_H();        //sclk=1
  //delay(1000);
  SCLK_L();
  //delay(1000);
  data=data<<1;    
 }                        //出来sclk为低电平
 delay(1000);
}


void send_cmd(uint8 cmd)
{
 CS_H();               //cs=1
 send_byte(S_CMD);     //发送命令启动字节
 send_byte(cmd&0xf0);  //发送命令字节的高四位
 send_byte(cmd<<4);    //发送命令字节的低四位
 CS_L();
 //delay(10000);
}
void send_data(uint8 data)
{
 CS_H();               //cs=1
 send_byte(S_DATA);     //发送数据启动字节
 send_byte(data&0xf0);  //发送数据字节的高四位
 send_byte(data<<4);    //发送数据字节的低四位
 CS_L();
 //delay(10000);
}

void set_position(uint8 row,uint8 col)
{
 uint8 pos;
 switch(row)
 {
  case 1:
   pos=0x80+col-1;
   break;
  case 2:
   pos=0x90+col-1;
   break;
  case 3:
   pos=0x88+col-1;
   break;
  case 4:
   pos=0x98+col-1;
   break;
 }
 send_cmd(pos);
}


void lcd_init()
{
 delay(3000);   
 send_cmd(FUNC_SET);  //功能设置
 send_cmd(DISP_ON);   //开显示
 send_cmd(CLR_SCREEN);//请屏幕
 send_cmd(ENTRY_MODE);//设置模式           
}


int main (void)
{// add user source code

 uint8 i;
 IO1DIR=led1|led2|led3|led4|CS|SID|SCLK;     //P1.16-P1.19,P1.21-P1.23设置为输出
 
 IO1SET=led1|led2|led3|led4;          //灭灯
 IO1CLR=led1|led2|led3|led4|CS|SID|SCLK;    
  
 lcd_init();
 
 set_position(1,1);                          //第1行第1列
 
 for(i=0;i<16;i++)
 {
  send_data(hz1);
 }
 set_position(2,1);                          //第2行第1列
 
 for(i=0;i<16;i++)
 {
  send_data(hz2);
 }
 
 set_position(3,1);                          //第2行第1列
 
 for(i=0;i<16;i++)
 {
  send_data(hz3);
 }
  
 set_position(4,1);                          //第2行第1列
 
 for(i=0;i<16;i++)
 {
  send_data(hz4);
 }
 
 //send_cmd(ADD_SET);                    //改为扩充指令
 //send_cmd(MOVE);                      
 //send_cmd(0x40);              
 while(1);
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
楼主确定这种液晶用的同一种驱动芯片,12864有两种驱动芯片,一种是T6963,另外一种是KS0108,看你的驱动的写法,像是T6963的驱动。
在交流中前进,共同实现nios的应用。
返回列表