www.pudn.com > My_LCD_Driver.rar > CMLCD_DRIVERIO.C


//===============================================================// 
//文件:CMLCD_DriverIO.c 
//描述:CM320X240LCD的底层函数,实现写指令、写/读数据功能 
//注意:采用间控方式 
// 
//===============================================================// 
#include "reg51.h" 
sbit LCD_CS=P2^7; 
sbit LCD_A0=P2^6; 
sbit LCD_WR=P3^6; 
sbit LCD_RD=P3^7; 
 
//#define COM_R_ADDR        0x07FFF 
#define COM_W_ADDR        0x07000 
#define DAT_R_ADDR        0x07000 
#define DAT_W_ADDR        0x03000 
 
sbit LCD_RES=P1^0; 
 
unsigned char xdata *   COM_W_buf = COM_W_ADDR; 
unsigned char xdata *   DAT_W_buf = DAT_W_ADDR; 
unsigned char xdata *   DAT_R_buf = DAT_R_ADDR; 
//===================================================// 
//程序:void LCD_Reset(void) 
//描述:CM320X240LCD复位子程序 
//参数: 
//返回: 
//Note:  Edit by Mz      xinqiang zhang 
//Date:  2006 07 29      beijing 
//===================================================// 
void Delay_LCD(unsigned char timers); 
void LCD_Reset(void) 
{ 
    //    unsigned char i; 
        LCD_CS=1; 
        LCD_A0=1; 
        LCD_WR=1; 
        LCD_RD=1; 
        LCD_RES = 1; 
        Delay_LCD(100); 
        LCD_RES = 0; 
        Delay_LCD(50); 
        LCD_RES = 1; 
} 
//===================================================// 
//程序:void LCD_COM_W(unsigned char com_d) 
//描述:CM320X240LCD读指令子程序 
//参数: 
//返回: 
//Note:  Edit by Mz      xinqiang zhang 
//Date:  2006 07 29      beijing 
//===================================================// 
void LCD_COM_W(unsigned char com_d) 
{ 
        *COM_W_buf = com_d; 
} 
//===================================================// 
//程序:void LCD_COM_W(unsigned char com_d) 
//描述:CM320X240LCD写数据或指令参数函数 
//参数: 
//返回: 
//Note:  Edit by Mz      xinqiang zhang 
//Date:  2006 07 29      beijing 
//===================================================// 
void LCD_Data_W(unsigned char dd) 
{ 
        *DAT_W_buf = dd; 
} 
//===================================================// 
//程序:void LCD_COM_W(unsigned char com_d) 
//描述:CM320X240LCD读数据或指令参数函数 
//参数: 
//返回: 
//Note:  Edit by Mz      xinqiang zhang 
//Date:  2006 07 29      beijing 
//===================================================// 
unsigned char LCD_Data_R(void) 
{ 
        unsigned char ucTemp; 
        ucTemp = *DAT_R_buf; 
        return ucTemp; 
} 
//===================================================// 
//程序:void Delay_LCD(unsigned char timers) 
//描述:CM320X240LCD读数据或指令参数函数 
//参数: 
//返回: 
//Note:  Edit by Mz      xinqiang zhang 
//Date:  2006 07 29      beijing 
//===================================================// 
void Delay_LCD(unsigned char timers) 
{ 
        unsigned char i; 
        while(timers) 
        { 
                for(i=0;i<100;i++) 
                    ; 
                timers--; 
        } 
} 
//===================================================// 
//程序:void Delay_LCD(unsigned char timers) 
//描述:CM320X240LCD读数据或指令参数函数 
//参数: 
//返回: 
//Note:  Edit by Mz      xinqiang zhang 
//Date:  2006 07 29      beijing 
//===================================================// 
void LCD_Back_dot(unsigned int Addr,unsigned char b,bit mode) 
{ 
        unsigned char ucTemp; 
        *COM_W_buf = 0x46; 
        *DAT_W_buf = (unsigned char)Addr; 
        *DAT_W_buf = (unsigned char)(Addr>>8); 
        *COM_W_buf = 0x43; 
        ucTemp = *DAT_R_buf; 
        if(mode) 
                ucTemp = ucTemp|b; 
        else 
                ucTemp = ucTemp&(~b); 
        *COM_W_buf = 0x46; 
        *DAT_W_buf = (unsigned char)Addr; 
        *DAT_W_buf = (unsigned char)(Addr>>8); 
        *COM_W_buf = 0x42; 
        *DAT_W_buf = ucTemp; 
} 
extern unsigned char LCD_show_Addr; 
void LCD_Back_Rect(unsigned int x,unsigned char y,unsigned int e_x,unsigned char e_y,bit mode) 
{ 
        unsigned int Addr,ui_x; 
        unsigned char fill; 
        ui_x = x>>3; 
        e_x = e_x>>3; 
        Addr = y*0x32+ui_x+(unsigned int)(LCD_show_Addr<<8); 
        if(mode) fill=0xff; 
        else fill=0x00; 
        for(;y<=e_y;y++) 
        { 
                *COM_W_buf = 0x46; 
                *DAT_W_buf = (unsigned char)Addr; 
                *DAT_W_buf = (unsigned char)(Addr>>8); 
                *COM_W_buf = 0x42; 
                for(x=ui_x;x