导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]使用RA8835控制的MS320240A液晶模块驱动[daxian9901]

 *第17246篇: [求助]使用RA8835控制的MS320240A液晶模块驱动问题

  
楼 主:daxian9901 2008年5月5日17:04
 [求助]使用RA8835控制的MS320240A液晶模块驱动问题
小弟最近在做MS320240A的驱动程序,时序为8080时序,单片机为AT89s51,一直未能调通。由于首次接触这类的液晶屏,对RA8835的显示区和每个显示区的地址设定弄不明白,希望各位大哥大姐多多指点。以下是我的测试程序,运行后,有四分之一没有显示,有四分之三为块状全显示。

#include   <REG51.h>  
#include   <INTRINS.H>  

#define uchar unsigned char
#define uint  unsigned int

#define  LCM_DATA P0
sbit W_R=P1^3;
sbit R_D=P1^2;
sbit CS=P1^0;
sbit A0=P3^4;
sbit RES=P3^2;


#define CR 39 /*定义显示窗口的长度,以字节为单位*/
#define TCR 52 /*定义LCD的时间常数*/
#define LF 239 /*定义LCD的行数*/
#define APL 40 /*定义LCD一行所占缓冲区的字节数,低8位*/
#define APH 0 /*定义LCD一行所占缓冲区的字节数,高8位*/

#define SAD1 0x0000/**/
#define SAD1L 0x00/**/
#define SAD1H 0x00/**/
#define SL1 20/**/

#define SAD2 0x2800/**/
#define SAD2L 0x00/**/
#define SAD2H 0x28/**/
#define SL2 20/**/

#define SAD3 0x5000/**/
#define SAD3L 0x00/**/
#define SAD3H 0x50/**/

#define SAD4 0x2800/**/
#define SAD4L 0x00/**/
#define SAD4H 0x28/**/


unsigned char code LCMSYSINIT[8]={0x30,0x87,0x07,CR,TCR,LF,APL,APH};
unsigned char code LCMSCRINIT[10]={SAD1L,SAD1H,SL1,SAD2L,SAD2H,SL2,SAD3L,SAD3H,SAD4L,SAD4H};
//******************************************************************
//*****************************************************************************************************************
/**********************************
* 函数原型:void Delay_nop()
* 功    能:nop语句
***********************************/
void Delay_nop()
{
 uchar i;
 for(i=5;i>  0;i--)i=i;
// for(i=0;i  <5;i++)i=i;
}
/**********************************
* 函数原型:void DelayXus(void)
* 功    能:延时Xus,未实际测试
***********************************/
void DelayXus(uchar dt)
{
 uchar i;
 for(i=5*dt;i>  0;i--);
}
/***************************************
* 函数原型:void DelayXms(uint dt)
* 功    能:延时Xms,经过实际测试
***************************************/
void DelayXms(uint dt)
{
 uint i,j;
 for(i=0;i  <dt;i++)
  for(j=0;j  <2370;j++);
}
/*******写命令*********/
void LCM_WrCmd(unsigned char CMD)
{
 CS=0;
 A0=1;
 _nop_();_nop_();_nop_();
 LCM_DATA=CMD;
 _nop_();_nop_();_nop_();
 R_D=1;
 W_R=0;_nop_();
 W_R=1;_nop_();
 CS=1;_nop_();
 
}
/********写数据********/
void LCM_WrData(unsigned char DATA)
{
 CS=0;
 A0=0;
 _nop_();_nop_();_nop_();
 LCM_DATA=DATA;
 _nop_();_nop_();_nop_();
 R_D=1;
 W_R=0;_nop_();
 W_R=1;_nop_();
 CS=1;_nop_();
}
/****************/

void LCM_Init()
{
 unsigned char xdata counter;
 LCM_WrCmd(0x40);
 for(counter=0;counter  <8;counter++)
 {LCM_WrData(LCMSYSINIT[counter]);DelayXus(10);}

 LCM_WrCmd(0x44);
 for(counter=0;counter  <10;counter++)
 {LCM_WrData(LCMSCRINIT[counter]);DelayXus(10);}

 LCM_WrCmd(0x59);//DelayXus(10);//开显示
 LCM_WrData(0x54);//DelayXus(10);//
 
 LCM_WrCmd(0x5A);//DelayXus(10);//水平移动
 LCM_WrData(0x00);//DelayXus(10);//不移动
 
 LCM_WrCmd(0x4F);//DelayXus(10);//光标移动方向:向左0x4D,向右0x4C,向上0x4E,向下0x4F

 LCM_WrCmd(0x5B);//DelayXus(10);//重叠显示
 LCM_WrData(0x0E);//DelayXus(10);

 LCM_WrCmd(0x5D);//DelayXus(10);//
 LCM_WrData(0x07);//DelayXus(10);
 LCM_WrData(0x87);//DelayXus(10);
 


}
//******************************************************************

/***************系统主函数*******************/

void main(void)
{
 unsigned int i;
                RES=1;
 DelayXms(500);
 LCM_Init();
 DelayXms(100);
 for(i=0;i  <50;i++)
 {
 LCM_WrCmd(0x46);DelayXus(10);
 LCM_WrData(0x80);DelayXus(10);
 LCM_WrData(0x80);DelayXus(10);

 LCM_WrCmd(0x42);DelayXus(10);
 LCM_WrData(0x30);DelayXus(10);
 if(i>  120)i=0;
 }
}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:求助

[下一篇主题]:[求助]毕设中想对Q24(GPRS模块)每隔若干小时复位一次