独闷闷网

 找回密码
 立即注册
搜索
查看: 1971|回复: 0
收起左侧

[原创] 三片选的19264液晶模块的C语言程序

[复制链接]
发表于 2013-12-30 23:39:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
//                19264 三片选
//***************************************************************************
//连线表:  CPU=89C52
//RS=P3.0     R/W=P3.1     E=P3.2      DB0-DB7=P0.0-P0.7
//CS1=P3.3    CS2=P3.4     CS3=P3.5
//SysClock=12MHz         
//***************************************************************************
//转自电子开发者论坛
#include <reg52.h>
#include <intrins.h>

#define        LcmXPixel 192        //横像素
#define        LcmYPixel 64        //纵像素

void int_zhongduan();

sbit        RS  =P2^0;        //数据指令
sbit        RW  =P2^1;        //读写
sbit        E   =P2^2;        //使能
sbit        CS1 =P2^3;        //1片选
sbit        CS2 =P2^4;        //2片选
sbit        CS3 =P2^5;        //3片选
sbit        RES  =P2^6;

sbit P33=P3^3;
unsigned char Page;
unsigned char Col;

unsigned char code BMP0[];

void Delay(unsigned int MS);
void wtcom(void);


void Busy(unsigned char CSn)
{
        CS1 = 1;        //先都置高
        CS2 = 1;
        CS3 = 1;
        switch (CSn&0x0f)
        {
                case 1: {CS1=0;break;}
                case 2: {CS2=0;break;}
                case 3: {CS3=0;break;}
                default : {break;}
        }
        wtcom();
}

void wtcom(void)
{  
        RS = 0;                //指令
        RW = 1;
        P0 = 0xFF;        //输出0xff以便读取正确
        E  = 1;
        _nop_();_nop_();
        _nop_();_nop_();

        while(P0 & 0x80);        //Status Read Bit7 = BUSY
        E  = 0;
        _nop_();_nop_();
        _nop_();_nop_();


}

void Locatexy(void)
{
        unsigned char x,y;
        
        switch (Col&0xc0)        /*  col.and.0xC0        */
        {                        /*条件分支执行                */
                case 0:                {Busy(1);break;}/*左区        */
                case 0x40:        {Busy(2);break;}/*中区        */
                case 0x80:        {Busy(3);break;}/*右区        */
        }
        
        x = Col&0x3F|0x40;        /* col.and.0x3f.or.Set Y Address*/
        y = Page&0x07|0xB8;        /* row.and.0x07.or.set Page        */
        wtcom();                /* waitting for enable        */
        RS = 0;                        //指令
        RW = 0;                        //写
        P0 = y;                        //设置页面地址
        E  = 1;
        _nop_();_nop_();
        _nop_();_nop_();
        E  = 0;
        _nop_();_nop_();
        _nop_();_nop_();
        wtcom();                /*  waitting for enable        */
        RS = 0;
        RW = 0;
        P0 = x;                        //设置列地址
        E  = 1;
        _nop_();_nop_();
        _nop_();_nop_();
        E  = 0;
        _nop_();_nop_();
        _nop_();_nop_();
}

//转自电子开发者论坛
void WriteCommand( unsigned char CSn,unsigned char CommandByte )
{
        Busy(CSn);
        P0 = CommandByte;
        RS = 0;                //指令
        RW = 0;
        E  = 1;
        _nop_();_nop_();
        _nop_();_nop_();
        E  = 0;
        _nop_();_nop_();
        _nop_();_nop_();
}

unsigned char ReadData( void )
{
        unsigned char DataByte;
        Locatexy();

        RS = 1;        
        RW = 1;
        P0 = 0xFF;
        E  = 1;        
        DataByte = P0;
        E  = 0;


        return DataByte;
}


void WriteData( unsigned char DataByte )
{
        Locatexy();        /*坐标定位,返回时保留分区状态不变        */
        RS = 1;                /*数据输出*/
        RW = 0;                /*写输出  */
        P0 = DataByte;        /*数据输出到数据口 */
        E  = 1;                /*写入到LCM*/
        _nop_();_nop_();
        _nop_();_nop_();
        _nop_();_nop_();
        E  = 0;
        _nop_();_nop_();
        _nop_();_nop_();
        _nop_();_nop_();
}

void LcmClear( unsigned char FillByte )
{
        Page = 0;
        Col  = 0;
        for(Page=0age<(LcmYPixel/8)age++)
                for(Col=0;Col<LcmXPixel;Col++)
                        WriteData(FillByte);
}

void LcmInit( void )
{
   RES  =0;
   Delay(10);
   RES  =1;
   Delay(30);

        WriteCommand(1,0x3f);        //开显示
        WriteCommand(2,0x3f);
        WriteCommand(3,0x3f);
        
        WriteCommand(1,0xc0);        //设置起始地址=0
        WriteCommand(2,0xc0);
        WriteCommand(3,0xc0);
        
        WriteCommand(1,0x3f);        //开显示
        WriteCommand(2,0x3f);
        WriteCommand(3,0x3f);
        
        Col = 0;
        Page= 0;
        Locatexy();
}

void LcmPutDots( unsigned char DotByte,unsigned char n )
{
        unsigned char i,j;
        Page = 0;
        Col  = 0;
        for(Page=0age<(LcmYPixel/8)age++)
        {
                Col=0;
                for(j=0;j<(LcmXPixel/n);j++)
                {
                        for(i=0;i<n;i++)
                        {
                                WriteData( DotByte );
                                Col++;
                        }
                        DotByte = ~DotByte;
                }
                if(n>=8) DotByte = ~DotByte;
               
        }
}

void LcmPutBMP( unsigned char *puts )
{
        unsigned int X=0;
        Page = 0;
        Col  = 0;
        for(Page=0age<(LcmYPixel/8)age++)
        {
                for(Col=0;Col<LcmXPixel;Col++)
                {
                        WriteData( puts[X] );
                        X++;
                }
        }
}

void LcmReverseBMP( void )
{
        unsigned char temp;
        Page = 0;
        Col  = 0;
        for(Page=0age<(LcmYPixel/8)age++)
        {
                for(Col=0;Col<LcmXPixel;Col++)
                {
                        temp = ReadData();
                        temp = ReadData();
                        temp = ~temp;
                        WriteData(temp);
                }
        }
}

void Delay(unsigned int MS)
{
        unsigned char us,usn;
        while(MS!=0)
        {
                usn = 2;        //for 12M
                while(usn!=0)
                {
                        us=0xf6;
                        while (us!=0){us--;};
                        usn--;
                }
                MS--;
        }
}
//转自电子开发者论坛
void Main( void )
{
        Delay(100);        //等待复位
        Delay(2);

        int_zhongduan();
        LcmInit();
        LcmClear(0);
        while(1)
        {
                LcmPutBMP(BMP0);
                Delay(1500);
                LcmReverseBMP();
                Delay(1500);
                LcmClear(0xff);
                Delay(1500);
                LcmPutDots(0x55,1);
                Delay(1500);
                LcmPutDots(0xAA,1);
                Delay(1500);
                LcmPutDots(0xCC,2);
                Delay(1500);
                LcmPutDots(0x33,2);
                Delay(1500);
                LcmPutDots(0xF0,4);
                Delay(1500);
                LcmPutDots(0x0F,4);
                Delay(1500);
        }
}

unsigned char code BMP0[]={        //字节颠倒
/*--  宽度x高度=192x64  --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x60,0x40,0x00,0x80,0x80,
0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x60,0x00,0x80,
0x80,0x80,0x80,0x80,0x80,0xE0,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0xC0,0xC0,0x40,0x40,0x40,0x40,0x40,0xC0,0xC0,0x40,0x40,0x40,0x40,
0x40,0x40,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x31,0x71,0xC1,0x81,0xF9,0x3F,
0x03,0x20,0x7C,0x1F,0x03,0x02,0xE2,0xE2,0x02,0x02,0x1A,0x3E,0x06,0x00,0x00,0x00,
0x00,0x20,0x20,0xE3,0xE3,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,
0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0x78,0x1E,0xFF,0xFF,0x00,0x00,0x01,
0xF9,0xF9,0x19,0x19,0x19,0xFF,0xFF,0x19,0x19,0x19,0xF9,0xF9,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18,0x18,
0x18,0x18,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0C,0xFE,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0xFE,0x07,0x03,0x03,0x03,0x06,0xFE,0xF8,0x00,0x00,0x00,
0x38,0x3E,0x07,0x03,0x03,0x03,0x87,0xFE,0x7C,0x00,0x00,0x00,0xF0,0xFC,0xCE,0x63,
0x63,0x63,0xE7,0xCE,0x8C,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0x3C,0x1E,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x78,0x1F,0x07,0x0F,0x1C,
0x38,0x80,0xC0,0xE0,0x70,0x1F,0x07,0x1F,0x38,0x60,0xC0,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x80,0xFF,0x7F,0xC0,0x80,0x88,0x9F,0x0C,0x0C,0x06,0x00,0x00,0x7F,0x00,
0x00,0x0C,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
0x09,0x1D,0xB9,0xE1,0xE1,0xFF,0xC7,0x81,0x81,0x01,0x01,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0xE0,0xFF,0x0F,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,
0x02,0x02,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x31,0x73,0xE7,0xC6,0xC6,0xC6,0x73,0x3F,0x0F,0x00,0x00,0x00,
0xE0,0xF0,0xD8,0xCC,0xC6,0xC3,0xC1,0xC0,0xC0,0x00,0x00,0x00,0x0F,0x3F,0x60,0xC0,
0xC0,0xC0,0xE0,0x7F,0x1F,0x00,0x00,0x00,0x0E,0x0F,0x0F,0x0C,0x0C,0x0C,0xFF,0xFF,
0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x01,0x00,0x00,
0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x02,
0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x00,0x00,0x00,
0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x01,
0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,



};




void Interrupt1 (void) interrupt 2 //按键启动和暂停
{
    P33=1;
    Delay(10);

    Delay(10);

while(P33==0)
    {
       P33=1;
    Delay(10);

    Delay(10);

    }



    Delay(10);

    Delay(10);

while(P33==1)
    {
       P33=1;
    Delay(10);

    Delay(10);

    }


    Delay(10);

    Delay(10);

while(P33==0)
    {
       P33=1;

    Delay(10);

    Delay(10);



    }
}


void int_zhongduan()
{


//外部中断1初始化
IT1 = 0;
EX1 = 1;
EA = 1;//打开中断
}


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2020-11-30 07:19 , Processed in 0.150496 second(s), 19 queries .

快速回复 返回顶部 返回列表