找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1630|回复: 0
收起左侧

12832C020LCD液晶屏显示淡调试后显示正常 单片机源程序

[复制链接]
ID:705815 发表于 2020-10-23 11:05 | 显示全部楼层 |阅读模式
//***************************//

//模 块 名:适用于128 x 32点阵,串行模式
//工作电压:3.0-3.3V
//创 建 人:乾思迪
//创建日期:
//功    能:横,点,图片显示的测试
//**************************//

#include<reg52.h>
#include<stdio.h>

#define Uchar unsigned char
#define Uint  unsigned  int
sbit    R_S=                P3^5;
sbit    RES=                P3^4;
sbit    SCK=            P1^6;
sbit    SDA=                P1^7;
sbit    CS1=                P3^7;
//#######################################//


char code hanzi[1024]={//纵取模字节倒序
/*--  调入了一幅图像:C:\Documents and Settings\Administrator\桌面\12832-1.bmp  --*/
/*--  宽度x高度=128x32  --*/
0xFE,0x42,0x42,0x22,0x1E,0xAA,0x4A,0xAA,0x9A,0x0A,0x02,0x02,0xFE,0x00,0x00,0x40,
0x42,0x42,0xFE,0x42,0x42,0xFE,0x42,0x42,0x40,0x10,0x88,0xE4,0x47,0x02,0x00,0x00,
0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00,0xFE,
0x02,0x12,0x2A,0xC6,0x88,0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x88,0x88,0x00,0x00,0x10,
0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00,0x00,
0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0x00,0x00,0x00,
0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,0x00,
0xFF,0x42,0x42,0x41,0x41,0x48,0x72,0x54,0x40,0x41,0x43,0x41,0xFF,0x00,0x00,0x80,
0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x84,0x42,0x21,0x10,0x08,0x0E,0x04,0x00,0x00,
0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00,0xFF,
0x00,0x02,0x04,0x03,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00,0x04,
0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00,0x00,
0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x20,
0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00,0x10,
0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 delay(Uint time);
void intial(void);
void Comwrite(Uchar com);
void Datwrite(Uchar dat);
void display(Uchar disp,Uchar disp1);
void hanzi_disp();
void dispkuang();
void main(void);



//###########################################################//
void main(void)
{

    RES=0;
    delay(10);
    RES=1;
//  PS1=1;
    delay(10);
    intial();
    delay(10);
    while(1)
    {
            hanzi_disp();
        delay(8000);

            
        //dispkuang();
        //delay(1000);

        display(0xff,0xff);
        delay(1000);

        display(0xff,0x00);
        delay(2000);

        display(0x00,0xff);
        delay(2000);

        display(0x55,0x55);
        delay(2000);

        display(0xaa,0xaa);
        delay(2000);

        display(0xaa,0x55);
        delay(2000);

        display(0x55,0xaa);
        delay(2000);



     }

}



void dispkuang()
{
  Uchar i,j,Page=0xb4;
  Comwrite(0x40);

    Comwrite(Page);
    Comwrite(0x10);
    Comwrite(0x00);        
     Datwrite(0xff);
    for(j=0;j<126;j++)
       {
         Datwrite(0x01);
       }
       Datwrite(0xff);


  for(i=0;i<2;i++)
    {
     Page++;  
     Comwrite(Page);
     Comwrite(0x10);
     Comwrite(0x00);        
     Datwrite(0xff);
     for(j=0;j<126;j++)
       {
         Datwrite(0x00);
       }
         Datwrite(0xff);  
     }

    Page++;      
    Comwrite(Page);
    Comwrite(0x10);
    Comwrite(0x00);        
    Datwrite(0xff);
    for(j=0;j<126;j++)
       {
         Datwrite(0x80);
       }
       Datwrite(0xff);      

}



//############################################################//
void display(Uchar disp,Uchar disp1)
{
  Uchar i,j,Page=0xaf;
  Comwrite(0x40);
  for(i=0;i<8;i++)
    {
    Page=++Page;
    Comwrite(Page);
    Comwrite(0x10);
    Comwrite(0x00);        
    for(j=0;j<66;j++)
       {Datwrite(disp);
        Datwrite(disp1);
       }
    }
}

//#########################################################//

void hanzi_disp()
{
  Uchar data  i,j;
  Uchar Page=0xaf;
  Comwrite(0x40);
      for(i=0;i<8;i++)
    {
      Page=++Page;
      Comwrite(Page);
      Comwrite(0x10);
      Comwrite(0x00);

      for(j=0;j<128;j++)   
      {Datwrite(hanzi[i*128+j]);}        
    }
}


//#########################################################//

void intial(void)

{
    delay(500);
    Comwrite(0xe3);
    Comwrite(0xA2);//Bais set
    Comwrite(0xA0);//ADC seg镜像选择 0xa0正常,0xA1左右镜像
    Comwrite(0xc8);//com output scan direction,com镜像选择 0xc0正常,0xC8上下镜像
    Comwrite(0x2c);内部电源管理,
    Comwrite(0x2e);内部电源管理,
    Comwrite(0x2F);内部电源管理,三条指令间隔2um
    Comwrite(0xf8);
    Comwrite(0x00);
    Comwrite(0x81);//调对比度指令
    Comwrite(0x1f);  //对比度微调,范围0X00~0X3F之间,原来正常品参数是0x13,现调为0x1f即可。
    Comwrite(0x21);  //对比度粗调,范围0X20~0X27之间
    Comwrite(0xAF);//显示开
    Comwrite(0x50);
    delay(10);
}

//这款显示屏的左上角第一行点阵是(COM31),程序参数是(0X60)//
//###########################################################//

void Comwrite(Uchar com)

{
    unsigned char data i,j;
        CS1=0;
        R_S=0;  
        SCK=0;
    for(i=0;i<8;i++)
        {
         j=com;
         SCK=0;
         SDA=com&0x80;
         SCK=1;      
         com=j<<1;
            }
        CS1=1;
        R_S=1;
}

//###########################################################//
/*我的改动是
if(com&0x80)
SDA=1;
else SDA=0

dat&0x80也一样这么做*/

//###########################################################//

void Datwrite(Uchar dat)

{
    unsigned char data i,j;
        CS1=0;
        R_S=1;  
        SCK=0;
    for(i=0;i<8;i++)
        {
         j=dat;
         SCK=0;
         SDA=dat&0x80;
         SCK=1;      
         dat=j<<1;
            }
        CS1=1;
        R_S=0;
}
//###############################################//


void delay(Uint time)
{
    unsigned char j;
    while(time--)
    {        
        for(j=0;j<=30;j++)  //100uS=0.1mS//
        {;;}                  
    }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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