Board logo

标题: 求助:关于st7920 lcd1 2864显示的问题 [打印本页]

作者: 错错m错    时间: 2008-7-29 23:41     标题: 求助:关于st7920 lcd1 2864显示的问题

//对需要用到的头文件与管脚进行定义说明
#include "system.h"
#include <unistd.h>
#include "altera_avalon_pio_regs.h"
#define LCD_DATA *(unsigned int *)PIO_LCD12864_DATA_BASE
#define LCD_DATA_DIR *(unsigned int *)(PIO_LCD12864_DATA_BASE+4)
#define LCD_RSRW *(unsigned int *)PIO_LCD12864_RSRW_BASE
#define LCD_EN *(unsigned int *)PIO_LCD12864_EN_BASE
#define LCD_DATA_IN 0
#define LCD_DATA_OUT 0xFF

//判忙函数
void busyloop()
{
unsigned int busy=0;
LCD_DATA=0xff;
do{
LCD_RSRW=0x01; //使数据口为输入状态(读出忙标志(BF))
usleep(50); //延时50ms
LCD_EN=0x1; //使lcd_en为1 ,为数据输入作准备(高 DR→I/O缓冲)
busy=LCD_DATA; //读取忙信号
usleep(50);
LCD_EN=0; //产生读取数据的有效电平
}
while(busy>0x7f); //假如状态位为忙,继续判忙
}


//写控制字
void write_command(char cmd)
{
busyloop(); //判忙函数
LCD_RSRW=0; //写控制字的状态
LCD_EN=0x1; //为有效电平做准备
LCD_DATA_DIR=LCD_DATA_OUT; //使数据口为输出状态
LCD_DATA=cmd; //输出命令到数据口
usleep(100); //延时100ms
LCD_EN=0; //产生有效电平
}


//初始化函数
void initialization()
{
IOWR(PIO_LCD12864_RESET_BASE,0,1);
//LCD_DATA=0;
write_command(0x30);//功能设定
usleep(100);
write_command(0x06);起始点设定光标右移
usleep(37);
write_command(0x01);//清屏
usleep(100);
write_command(0x0c);//显示状态开关
usleep(100);
write_command(0x02);//地址归零
}

//写数据
void write_data(char data)
{
busyloop(); //判忙函数
LCD_RSRW=0x2; //写控制字的状态
LCD_EN=0x01; //为有效电平做准备
usleep(50); //延时50ms
LCD_DATA_DIR=LCD_DATA_OUT; //使数据口为输出状
LCD_DATA=data; //输出命令到数据口
usleep(100); //延时100ms
LCD_EN=0; } //产生有效电平


//写字符串子程序:其中addr是地址,str是字符的地址
void write_string(char addr,char* str)
{
write_command(addr); //写显示地址
do{
write_data(*str); //写显示数据
str++;
}
while(*str!='\0'); //判断是否写完
}


//写中文字串
//写中文字串: 其中addr是地址,str是字符的地址,i是中文的字数
void write_chstring(char addr,int* str,int i)
{
int chstr;
int hstr=0,lstr=0;
write_command(addr); //写显示地址
do{
chstr=*str;
lstr=chstr&0xff;
hstr=(chstr>>8)&0xff;
write_data(hstr); //写显示高位数据
write_data(lstr); //写显示低位数据
str++; //数据地址加一
i--; //数据量减一
}
while(i!=0); //判断是否写完
}


int main()
{

int hanzi[]={'汉','字'};
char *a="abcdefg";


initialization();
write_command(0x80);//lcd第一行地址为0x80-0x87,第三行为0x088-0x08f,第二行为0x90-0x97,第四行0x98-0x9f
write_chstring(0x80,hanzi,2);
write_string(0x88,a);

}

Tw35S2DZ.rar (3.25 KB)


附件: [求助:关于st7920 lcd1 2864显示的问题] Tw35S2DZ.rar (2008-7-29 23:24, 3.25 KB) / 下载次数 341
http://bbs.eccn.com/attachment.php?aid=4817&k=5471c983da963a7ca6003e0e7b48f6b8&t=1732295239&sid=5BXssV
作者: 错错m错    时间: 2008-7-29 23:42

麻烦版主帮我看下 顶层图在附件里面

下载之后什么都不显示






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0