我用你的程序想改成寄存器版本的,可是编译通过但是就是不显示 
下面这个事12864.c文件内容
[mw_shl_code=c,true]#include "stm32f10x.h"
#include"12864.h"
#include"delay.h"	
/************************************************************************************************
 //FILE:液晶12864驱动程序
 //VERS:1.0
 //AUTHOR:福建师范大学林木泉
 //DATE:2012/07/11
************************************************************************************************/
/************************************************************************************************
@f_name: void LCD12864_InitPort(void)
@brief:	 初始化硬件端口配置
@param:	 None
@return: None
************************************************************************************************/
void LCD12864_InitPort(void)
{
	RCC->APB2ENR|=1<<3;
	GPIOB->CRH&=0;
	GPIOB->CRH|=0X77777777;
	GPIOB->ODR=0XFFFF;
	GPIOB->CRL&=0XFF000F00;
	GPIOB->CRL|=0X00333033;
	GPIOB->ODR=0Xffff;
}
/************************************************************************************************
@f_name: void NOP(void)
@brief:	 延时函数
@param:	 None
@return: None
************************************************************************************************/
void NOP(void)
{ u8 i;	for(i=0; i<100; i++); } 
/************************************************************************************************
@f_name: u8 LCD12864_busy(void)
@brief:	 检测忙状态
@param:	 None
@return: None
************************************************************************************************/
u8 LCD12864_busy(void)
{
	u8 x;
	RS=0; 
	RW=1;  
	EN=1; 
	NOP();
	NOP(); 
	x=Text_Busy;
	EN=0; 
	return x;
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief:	 写指令
@param:	 u8 dat  输入指令
@return: None
************************************************************************************************/
void LCD12684_Wcmd(u8 dat)
{
	while(LCD12864_busy()); //忙检测
	RS=0;      
	RW=0;
	EN=0;
	NOP();
	NOP();
	LCD_WriteData(dat);	  
	NOP();
	NOP();
	EN=1;
	NOP();
	NOP();
	EN=0;
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief:	 写数据
@param:	 u8 dat 输入数据
@return: None
************************************************************************************************/
void LCD12684_Wdat(u8 dat)
{
	while(LCD12864_busy()); //忙检测
	RS=1;      
	RW=0;
	EN=0;
	NOP();
	NOP();
	LCD_WriteData(dat);	 
	NOP();
	NOP();
	EN=1;
	NOP();
	NOP();
	EN=0;
}
/************************************************************************************************
@f_name: void LCD12864_Init(void)
@brief:	 液晶初始化
@param:	 None
@return: None
************************************************************************************************/
void LCD12864_Init(void)
{	
	PSB=1;   //并口方式    
	RST=0;   //液晶复位	低电平有效
    delay_ms(3);                  
    RST=1;  	//置高电平等待复位
    delay_ms(3);
	LCD12684_Wcmd(0x34);    //扩充指令操作
    delay_ms(5);
    LCD12684_Wcmd(0x30);    //基本指令操作
    delay_ms(5);
    LCD12684_Wcmd(0x0c);   //显示开,关光标
    delay_ms(5);
    LCD12684_Wcmd(0x01);   //清除LCD的显示内容
    delay_ms(5); 
}
/************************************************************************************************
@f_name: void LCD12864_Clr(void)
@brief:	 清屏
@param:	 None
@return: None
************************************************************************************************/
void LCD12864_Clr(void)
{
	LCD12684_Wcmd(0x34);   //扩充指令操作	“绘图”
    delay_ms(5);
    LCD12684_Wcmd(0x30);    //基本指令操作
    delay_ms(5);
	LCD12684_Wcmd(0x01);   //清屏
    delay_ms(5);
} 
/************************************************************************************************
@f_name: void LCD12864_Pos(u8 x,u8 y)
@brief:	 设置显示位置
@param:	 u8 x:X轴    u8 y:Y轴  
@return: None
************************************************************************************************/
void LCD12864_Pos(u8 x,u8 y)
{
	u8  pos;
	if (x==1)  		 {x=0x80;} 	 
	else if (x==2)	 {x=0x90;}	
	else if (x==3)	 {x=0x88;}	 
	else if (x==4)   {x=0x98;}	 
	else x=0x80;
	pos = x+y ; 	
	LCD12684_Wcmd(pos);  //显示地址  
}
/************************************************************************************************
@f_name: void LCD12864_PhotoDis(u8 *bmp)
@brief:	 显示图形
@param:	 u8 *bmp 图形数组
@return: None
************************************************************************************************/
void LCD12864_PhotoDis(u8 *bmp)
{
	u8 i,j;
	LCD12684_Wcmd(0x34); //关闭图形显示
	
	for(i=0;i<32;i++)
	{
		LCD12684_Wcmd(0x80+i);  //先写入水平坐标值
		LCD12684_Wcmd(0x80);      //写入垂直坐标值
		for(j=0;j<16;j++)   		  //再写入两个8位元的数据    
		LCD12684_Wdat(*bmp++);     
		delay_ms(1);
	}
	
	for(i=0;i<32;i++)
	{ 
		LCD12684_Wcmd(0x80+i);
		LCD12684_Wcmd(0x88);
		for(j=0;j<16;j++)         
		LCD12684_Wdat(*bmp++);    
		delay_ms(1);
	}
	LCD12684_Wcmd(0x36);       //写完数据,开图形显示 	
}
/************************************************************************************************
@f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
@brief:	 显示字符串
@param:	 u8 *bmp 图形数组
@return: None
************************************************************************************************/
void LCD_ShowString(u8 x,u8 y,const u8 *p)
{
	u8 temp;
	if(x>4) {x=1;}
	if(y>4) {y=0;}
	LCD12864_Pos(x,y);
	temp=*p;
	while(temp!='\0')
	{
		LCD12684_Wdat(temp);
		temp=*(++p);
	} 
}
[/mw_shl_code]
 
这个是12864.h文件内容 
[mw_shl_code=c,true]#ifndef __12864_H_
#define __12864_H_	
#include"sys.h"	 
//管脚定义,移植修改区
//**************************************************************************************************************************
#define  LCD12864_GPIO    GPIOB
#define  GPIOCLK          RCC_APB2Periph_GPIOB
#define  RS		    PBout(0)
#define  RW		    PBout(1)
#define  EN		    PBout(3)
#define  PSB	    PBout(4)
#define  RST	    PBout(5)
#define  Busy       PBout(15)
#define  LCD_GPIO_DAT   GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 |GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
#define  LCD_GPIO_CMD	GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5
#define    LCD_RS(x)   x ? GPIOB->ODR|=0X0001:  GPIOB->ODR&=~0X0001  //置1或置0  但是我发现我这样用用不了。。。。
#define    LCD_RW(x)   x ? GPIOB->ODR|=0X0002:  GPIOB->ODR&=~0X0002
#define    LCD_EN(x)   x ? GPIOB->ODR|=0X0004:  GPIOB->ODR&=~0X0004
#define    LCD_PSB(x)  x ? GPIOB->ODR|=0X0008:  GPIOB->ODR&=~0X0008
#define    LCD_RST(x)  x ? GPIOB->ODR|=0X0010:  GPIOB->ODR&=~0X0010
#define  Text_Busy	         PBin(15)  //PBin(7)	
#define  LCD_WriteData(x)     {LCD12864_GPIO->BSRR = x<<8 & 0xff00;LCD12864_GPIO->BRR = ((~x)<<8) & 0xff00;}  //高8位的数据
//#define  LCD_WriteData(x)     GPIOB->ODR=(GPIOB->ODR&0x00ff)|(x&0xff00);  //高8位的数据
//#define  LCD_WriteData(x)   {LCD12864_GPIO->BSRR = x    & 0x00ff;LCD12864_GPIO->BRR = ((~x)<<8) & 0x00ff;}  //低8位的数据
void LCD12864_InitPort(void);	  //硬件端口初始化
void NOP(void);					 //延时函数
u8 LCD12864_busy(void);			 //检测忙状态
void LCD12684_Wcmd(u8 dat);		 //写指令
void LCD12684_Wdat(u8 dat);		 //写数据
void LCD12864_Init(void);		 //液晶初始化
void LCD12864_Clr(void);		 //	清屏
void LCD12864_Pos(u8 x,u8 y);	 //设置显示位置
void LCD12864_PhotoDis(u8 *bmp); //	显示图片
void LCD_ShowString(u8 x,u8 y,const u8 *p);	 //	显示字符串
//**********************************************************************************************************************
#endif	
[/mw_shl_code]
 
  |