⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 320_240_driver.c

📁 LCD240*320液晶驱动程序(RA8835控制器)
💻 C
📖 第 1 页 / 共 2 页
字号:
//===========================================================================
//            TEST FOR MTG3316
//            CONTROLLER: SED1335
//            INTERFACE: 8080
//            SIDE: 320 X 240 DOTS
//===========================================================================
#include  <msp430x24x.h>
#include "math.h"
#include "ra8835.h"
//=========================================================================== 
unsigned int    txthome,grhome;
unsigned int    lcmcp,lcmdp,lcd_data;
extern int sindata[256];
//================================================
//         系统设置
// dataTAB1   系统参数设置
// dataTAB2   显示控制设置
//================================================
const unsigned int dataTAB1[ ]={0x0030,0x0087,0x0007,0x0027,0x002C,0x00F0,0x0028,0x0000};
const unsigned int dataTAB2[ ]={0x0000,0x0000,0x00F0,0x00b0,0x0004,0x00F0,0x0000,0x0000,0x0000,0x0000};
//================================================
//             字母点阵定义
//================================================
const unsigned int  HZ8_DOT_LIB[16]=
{
/*--  文字:  0  --0*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00
};
const unsigned int  HZ16_DOT_LIB[32]=
{
 /*--  文字:  江  --0*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x00,0x10,0x00,0x13,0xFC,0x00,0x40,0x88,0x40,0x48,0x40,0x50,0x40,0x10,0x40,
0x10,0x40,0x20,0x40,0xE0,0x40,0x20,0x40,0x20,0x40,0x2F,0xFE,0x20,0x00,0x00,0x00 
};
const unsigned int  HZ24_DOT_LIB[72]=
{
  /*--  文字:  电 0 --*/
/*--  宋体18;  此字体下对应的点阵为:宽x高=24x24   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,
0x10,0x00,0x0F,0xFF,0xF0,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,
0x20,0x0F,0xFF,0xE0,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,0x20,
0x0F,0xFF,0xE0,0x08,0x10,0x00,0x00,0x10,0x08,0x00,0x10,0x08,0x00,0x10,0x04,0x00,
0x18,0x0E,0x00,0x0F,0xFC,0x00,0x00,0x00
};
//================================================
//        接口设置
//     8位数据 :(DB0--DB7)   
//          输出口 P5.0~P5.7 
//     控制信号:(/RES,C/D,/CE,/WR,/RD)
//          输出口 P2.3~P2.7        
//================================================ 
void lcd_init_io(void)
{
//        WDTCTL = WDTPW + WDTHOLD;          // 关闭看门狗
        
	P2DIR = 0xff;                      //控制信号 P4.3~P4.7  /RES,C/D,CE,/WR,/RD
	P2OUT = 0xff;                      //wait p4.0
	
	P5DIR = 0xff;                      //数据端口 P5.0~P5.7 DB0~DB7
	P5OUT = 0xff;
}	
//===============================================
//===============================================
void Reset_lcd(void)
{	
	unsigned int i;
//------------------------------
                                             //8080方式        
	P2OUT &= ~BIT3;                       //reset=0   P4.3=0
//------------------------------
	for(i=10;i>0;i--)
    {
      _NOP();
    }
	P2OUT |= BIT3;                      //reset=1 	P4.3=1                                      
}	

//**********************************************
// write one command to lcd
//    写命令
//==============================================
void write_lcd_command(unsigned int a)
{
    unsigned int i;
//=================================	
    P5OUT = a;
//================================= 
    P2OUT &= ~BIT5;           // ce=0  P4.5=0	 
    P2OUT |= BIT4;            // c/d=1 P4.4=1   command   	
    P2OUT |= BIT7;            // rd=1  P4.7=1   
  
    P2OUT &= ~BIT6;           // wr=0  P4.6=0
    for(i=20;i>0;i--)
    {
      _NOP();
    }
    P2OUT |= BIT6;           // wr=1  P4.6=1
    P2OUT |= BIT5;           // ce=1  P4.5=1
//=================================        
}
//*********************************************
//   write one data to lcd
//     写数据
//*********************************************
void write_lcd_data(unsigned int a)
{  
	unsigned int i;
//=============================	
    P5OUT = a; 
//============================== 	 
    P2OUT &= ~BIT5;            // ce=0  P4.5=0	 
    P2OUT &= ~BIT4;            // c/d=0 P4.4=0   data   	
    P2OUT |= BIT7;            // rd=1  P4.7=1   
  
    P2OUT &= ~BIT6;           // wr=0  P4.6=0
    for(i=20;i>0;i--)
    {
      _NOP();
    }
    P2OUT |= BIT6;           // wr=1  P4.6=1
    P2OUT |= BIT5;           // ce=1  P4.5=1
//==================================================    
}
//*********************************************
//   read display data or cursr adress
//     读显示数据或光标地址
//*********************************************
unsigned int read_lcd_data(void)
{  
    unsigned int i,data4;
//==============================	
    P5DIR = 0x00;                 //数据端口输入
//============================== 	 
    P2OUT &= ~BIT5;             // ce=0  P4.5=0	 
    P2OUT |= BIT4;              // c/d=1 P4.4=1   data   	
    P2OUT |= BIT6;              // wr=1  P4.6=1
//=================================  
    P2OUT &= ~BIT7;            // rd=0  P4.7=0   
    for(i=2;i>0;i--)
    {
      _NOP();
    }
//=================================
    data4 = P5IN&0xff;    
//=================================        
//    P2OUT |= BIT2;             // rd=1  P4.7=1 
    P2OUT |= BIT7;
    P2OUT |= BIT5;             // ce=1  P4.5=1	 
//=================================
    P5DIR = 0xff;                 //重新定义数据端口输出
//================================= 
     return(data4);   
}
//*********************************************
//   clear text ram
//   清除文本区
//==================================================
void clr_textram(void)
{
    unsigned int i;	
   write_lcd_command(0x4c);                                //  Set direction of cursor movement
   write_lcd_command(0x46);                                //  Set cursor address
   write_lcd_data(0);
   write_lcd_data(0);
   write_lcd_command(0x42);                                // Write to display memory
   for(i=0;i<1200;i++)        
   {
     write_lcd_data(0x00);          // 文本区写数据  空格符   
   }    
  
}
//*********************************************
//   clear graphics ram
//   清除图形区
//==================================================
void clr_grphram(void)
{
    unsigned int i;	
   write_lcd_command(0x4c);                                //  Set direction of cursor movement
   write_lcd_command(0x46);                                //  Set cursor address
   write_lcd_data(0xb0);
   write_lcd_data(0x04);
   write_lcd_command(0x42);                                //Write to display memory
   for(i=0;i<9600;i++)        
   {            
     write_lcd_data(0x00);       // 文本区写数据  空格符   
   }    
}
//==================================================
//==================================================
void lcm_init(void)
{
   unsigned int i;
   const unsigned int *p;
   Reset_lcd();
//---------------------------------
   p=&dataTAB1[0];
   write_lcd_command(0x40);                              // Initialize device and display
   for(i=0;i<8;i++)        
   {            
     write_lcd_data(*p++);      // 写系统设置数据        
   }    
   p=&dataTAB2[0];
   write_lcd_command(0x44);                              // Set display start address and display regions
   for(i=0;i<8;i++)        
   {            
     write_lcd_data(*p++);     // 写显示控制数据        
   }  
    write_lcd_command(0x5a);                              //  Set horizontal scroll position
    write_lcd_data(0x00);
    write_lcd_command(0x5b);                              //  Set display overlay format
    write_lcd_data(0x00);      //  
    //write_lcd_command(0x60);                              //  
    //write_lcd_data(0x00);      //  
    clr_textram();
    clr_grphram();
    write_lcd_command(0x59);                              //???? 58 Enable display flashing; 59 Disable display flashing
    write_lcd_data(0x14);      // text graph on 04 
     
//=================================		
}
//==================================================
void Test(void)
{
    unsigned int i,j;
    write_lcd_command(0x4c);     //光标方向            //  Set direction of cursor movement
    write_lcd_command(0x46);     //光标地址            //  Set cursor address
    write_lcd_data(0x00);
    write_lcd_data(0x00);
    write_lcd_command(0x42);     //写显示存储器地址    //Write to display memory
    for(i=0;i<30;i++)        
    {            
      for(j=0;j<40;j++)        
      {            
        write_lcd_data(0x0033); // 写数据        
      }    	         
    }  
}
//==================================================
void Test1(void)
{
   unsigned int i;      
//----------------------------------	
    write_lcd_command(0x4c);
    write_lcd_command(0x46);  
    write_lcd_data(0xb0);
    write_lcd_data(0x04);
    write_lcd_command(0x42); 
    for(i=0;i<9600;i++)
    {	
      write_lcd_data(0x0f);   // 写数据 
    }    
}
//==================================================
void wr_cmd_2(unsigned int uCmd,unsigned int uPar)              // 带两个参数的命令
{
   lcmcp=uCmd;
   write_lcd_command(lcmcp);  
   
   lcmdp= uPar&0xff;
   write_lcd_data(lcmdp);  
   lcmdp=uPar>>8;
   lcmdp&=0x00ff;
   write_lcd_data(lcmdp);
}
//==================================================
void wr_cmd_1(unsigned int uCmd,unsigned int uPar)              // 带一个参数的命令
{
   lcmcp=uCmd;
   write_lcd_command(lcmcp);  
   lcmdp= uPar;
   write_lcd_data(lcmdp);  
}
//==================================================
void wr_cmd_0(unsigned int uCmd)                                // 不带带参数的命令
{
   lcmcp=uCmd;
   write_lcd_command(lcmcp);  
}
//==================================================
// 画水平线(Y1=Y2) X=8*i
//==================================================
void lineH(unsigned int y1,unsigned int x1,unsigned int y2,unsigned int x2)
{
   unsigned int i,ipos,length1,length2;
   ipos=y1*40+x1/8+1200; 
   length1=y2*40+x2/8+1200;
   length2=length1-ipos;
   wr_cmd_0(0x4c); 
   wr_cmd_2(0x46,ipos); 
   wr_cmd_0(0x42);
   for(i=0;i<length2;i++)
   {
      write_lcd_data(0xff); 
   }	
} 
//==================================================
//   画点
//==================================================
 void  pixel(unsigned int PointY,unsigned int PointX)                //   PointY 行 PointX 列 
{    
	unsigned int i, StartAddr;    
	unsigned int dat,dat2,dat3;  
     
	StartAddr=PointY*40 + PointX/8 +1200;
     
	dat=(unsigned int)(7-PointX%8);        //产生点的数据  
	dat2=0x0001;  
	for(i=0;i<dat;i++) 
	{
	   dat2<<=1;
	} 
 
	wr_cmd_0(0x004c); 
	wr_cmd_2(0x0046,StartAddr);           //读该点所在单元地址内容
	wr_cmd_0(0x0043);
	dat3=read_lcd_data();
	dat2|=dat3;	
 	
 	wr_cmd_0(0x004c); 
	wr_cmd_2(0x0046,StartAddr);           //设置该点所在单元地址    
	wr_cmd_1(0x0042,dat2);                // 画点位数据 	
}
//==================================================
//  画点--点
//==================================================
void line(unsigned int y1,unsigned int x1,unsigned int y2,unsigned int x2)
{
    unsigned int x,y;    
    float k,b;    
    if(x1==x2)                                // x1=x2,画垂直线
    {
        if(y1<=y2)
        {
          for(y=y1;y<=y2;y++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -