高手请帮忙
我以前用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://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |