打印

液晶显示原理图

[复制链接]
12426|57
手机看帖
扫描二维码
随时随地手机跟帖
沙发
wyp1984| | 2009-5-22 19:11 | 只看该作者

测试可用程序

/*********************************包含头文件********************************/
#include <reg51.h>

/********************************命令字定义*********************************/
#define Disp_On  0x3f
#define Disp_Off 0x3e
#define Col_Add  0x40
#define Page_Add 0xb8
#define Start_Line 0xc0

/*********************************端口定义**********************************/
sbit Mcs=P2^3;                  //左半屏使能,当MCS=1,左半屏显示
sbit Scs=P2^4;                  //右半屏使能,当SCS=1,右半屏显示
sbit Enable=P2^2;                 //使能
sbit Di=P2^0;                      //数据/命令选择(RS)
sbit RW=P2^1;                      //读/写信号
sbit Rst=P2^5;                    //复位脚
sbit Light=P2^6;                //背光脚

/**********************************字模表***********************************/
/*****************************www.hificat.com*******************************/
char code h[]={
/*--  文字:  h  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
};
char code w[]={
/*--  文字:  w  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,
};
char code i[]={
/*--  文字:  i  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
};
char code f[]={
/*--  文字:  f  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
};
char code c[]={
/*--  文字:  c  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
};
char code a[]={
/*--  文字:  a  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
};
char code t[]={
/*--  文字:  t  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
};
char code o[]={
/*--  文字:  o  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
};
char code m[]={
/*--  文字:  m  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
};
char code dian[]={
/*--  文字:  .  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
};
/*************************************欢迎使用***********************************/
char code huan[]={
/*--  文字:  欢  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
};
char code yun2[]={
/*--  文字:  迎  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
};
char code shi[]={
/*--  文字:  使  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,
};
char code yong[]={
/*--  文字:  用  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
};

/***********************************单片机开发板*********************************/
char code dan[]={
/*--  文字:  单  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xF8,0x28,0x29,0x2E,0x2A,0xF8,0x28,0x2C,0x2B,0x2A,0xF8,0x00,0x00,0x00,
0x08,0x08,0x0B,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x0B,0x08,0x08,0x00,
};
char code pian[]={
//*--  文字:  片  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x18,0x10,0x00,
0x80,0x40,0x30,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,
};
char code ji[]={
/*--  文字:  机  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,
};
char code kai[]={
/*--  文字:  开  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
};
char code fa[]={
/*--  文字:  发  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x10,0x3E,0x10,0x10,0xF0,0x9F,0x90,0x90,0x92,0x94,0x1C,0x10,0x10,0x10,0x00,
0x40,0x20,0x10,0x88,0x87,0x41,0x46,0x28,0x10,0x28,0x27,0x40,0xC0,0x40,0x00,0x00,
};
char code ban[]={
/*--  文字:  板  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0xD0,0xFF,0x50,0x90,0x00,0xFE,0x62,0xA2,0x22,0x21,0xA1,0x61,0x00,0x00,
0x04,0x03,0x00,0x7F,0x00,0x11,0x0E,0x41,0x20,0x11,0x0A,0x0E,0x31,0x60,0x20,0x00,
};

char code dang[]={
/*--  文字:  当  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40,0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00,
0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,
};

char code qian[]={
/*--  文字:  前  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08,0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00,
0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00,
};

char code zhuang[]={
/*--  文字:  状  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0xE1,0x26,0x2C,0x20,0x20,0x00,
0x04,0x02,0x01,0xFF,0x40,0x20,0x18,0x07,0x00,0x00,0x03,0x0C,0x30,0x60,0x20,0x00,
};

char code tai1[]={
/*--  文字:  态  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x04,0x04,0x04,0x84,0x44,0x34,0x4F,0x94,0x24,0x44,0x84,0x84,0x04,0x00,0x00,
0x00,0x60,0x39,0x01,0x00,0x3C,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00,
};

char code yun[]={
/*--  文字:  运  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x41,0xCE,0x04,0x00,0x20,0x22,0xA2,0x62,0x22,0xA2,0x22,0x22,0x22,0x20,0x00,
0x40,0x20,0x1F,0x20,0x28,0x4C,0x4A,0x49,0x48,0x4C,0x44,0x45,0x5E,0x4C,0x40,0x00,
};

char code xing[]={
/*--  文字:  行  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,
0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
};

char code zhong[]={
/*--  文字:  中  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,
0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,
};

char code maohao[]={
/*--  文字:  :  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
};

/****************************************************************************
函数功能:延时程序
入口参数:t
出口参数:
****************************************************************************/
void delay(unsigned int t)
{
    unsigned int i,j;
    for(i=0;i<t;i++)
    for(j=0;j<10;j++);
}

/*****************************************************************************
函数功能:写命令到LCD程序
入口参数:cmdcode
出口参数:
*****************************************************************************/
void write_com(unsigned char cmdcode)
{
    Di=0;
    RW=0;
    P0=cmdcode;        
    delay(2);
    Enable=1;
    delay(2);
    Enable=0;
}

/*****************************************************************************
函数功能:写数据到LCD程序
入口参数:Dispdata
出口参数:
*****************************************************************************/
void write_data(unsigned char Dispdata)
{
    Di=1;
    RW=0;
    P0=Dispdata;
    delay(2);
    Enable=1;
    delay(2);
    Enable=0;
}

/*****************************************************************************
函数功能:清除LCD内存程序
入口参数:pag,col,hzk
出口参数:
*****************************************************************************/
void Clr_Scr()
{
    unsigned char j,k;
    Mcs=1;Scs=1;
     write_com(Page_Add+0);
     write_com(Col_Add+0);
     for(k=0;k<8;k++)
         {
        write_com(Page_Add+k);
          for(j=0;j<64;j++)write_data(0x00);
        }
    Mcs=0;Scs=0;
}

/*****************************************************************************
函数功能:指定位置显示数字16*16程序
入口参数:pag,col,hzk
出口参数:
*****************************************************************************/
void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)
{
    unsigned char j=0,i=0;
    for(j=0;j<2;j++)
    {
        write_com(Page_Add+pag+j);
        write_com(Col_Add+col);
        for(i=0;i<16;i++) 
        write_data(hzk[16*j+i]);
    }
}

/*****************************************************************************
函数功能:指定位置显示数字8*16程序
入口参数:pag,col,hzk
出口参数:
*****************************************************************************/
void hz_disp8(unsigned char pag,unsigned char col, unsigned char code *hzk)
{
    unsigned char j=0,i=0;
    for(j=0;j<2;j++)
    {
        write_com(Page_Add+pag+j);
        write_com(Col_Add+col);
        for(i=0;i<8;i++) 
        write_data(hzk[8*j+i]);
    }
}
/*****************************************************************************
函数功能:LCD初始化程序
入口参数:
出口参数:
*****************************************************************************/
void init_lcd()
{
    delay(100);
    Mcs=1;
    Scs=1;
    delay(100);
    write_com(Disp_Off);
    write_com(Page_Add+0);
    write_com(Start_Line+0);
    write_com(Col_Add+0);
    write_com(Disp_On);
}


/*****************************************************************************
函数功能:主程序
入口参数:
出口参数:
*****************************************************************************/
void main(void)
{
    Light=0;                    //开LCD背光
    init_lcd();
     Clr_Scr();
     Mcs=1;Scs=0;                //左、右都显示
    while(1)
    {
        Mcs=1;Scs=0;            //左显示
        delay(2);
        //欢迎
        hz_disp16(0,32,huan);
        hz_disp16(0,48,yun2);
        //单片机
        hz_disp16(2,16,dan);
        hz_disp16(2,32,pian);
        hz_disp16(2,48,ji);
        //当前状态
        hz_disp16(4,0,dang);
        hz_disp16(4,16,qian);
        hz_disp16(4,32,zhuang);
        hz_disp16(4,48,tai1);
        //网址:www.hifi
        hz_disp8(6,0,w);
        hz_disp8(6,8,w);
        hz_disp8(6,16,w);
        hz_disp8(6,24,dian);
        hz_disp8(6,32,h);
        hz_disp8(6,40,i);
        hz_disp8(6,48,f);
        hz_disp8(6,56,i);

        Mcs=0;Scs=1;                //右显示
        //使用
        hz_disp16(0,0,shi);
        hz_disp16(0,16,yong);
        //开发板
        hz_disp16(2,0,kai);
        hz_disp16(2,16,fa);
        hz_disp16(2,32,ban);    
        //:运行中
        hz_disp8(4,0,maohao);
        hz_disp16(4,8,yun);
        hz_disp16(4,24,xing);
        hz_disp16(4,40,zhong);
        //网址:cat.com
        hz_disp8(6,0,c);
        hz_disp8(6,8,a);
        hz_disp8(6,16,t);
        hz_disp8(6,24,dian);
        hz_disp8(6,32,c);
        hz_disp8(6,40,o);
        hz_disp8(6,48,m);
        delay(2);
    }
}

使用特权

评论回复
板凳
laurel25_604| | 2011-3-15 00:05 | 只看该作者
看了 眼前一亮

使用特权

评论回复
地板
qwqwqw2008| | 2011-3-15 08:39 | 只看该作者
if 程序是 真,,真是太好了,,,:lol

使用特权

评论回复
5
lemenade| | 2011-3-22 12:36 | 只看该作者
收藏了,谢谢三楼

使用特权

评论回复
6
xukai198919| | 2011-3-24 15:27 | 只看该作者
。。。。。。。。。。

使用特权

评论回复
7
achingscar| | 2011-3-27 02:46 | 只看该作者
强人
学习一下

使用特权

评论回复
8
liuzhenya| | 2011-3-27 06:33 | 只看该作者
学习了

使用特权

评论回复
9
xiaofeng1021| | 2011-3-27 14:25 | 只看该作者
学习

使用特权

评论回复
10
荆棘鸟SOS| | 2011-3-28 22:10 | 只看该作者
可以把同一高宽的字放在同一数组  用一个变量控制  更方便点吧  应该

使用特权

评论回复
11
mengzs| | 2011-3-30 09:26 | 只看该作者
顶!

使用特权

评论回复
12
yanwwei312| | 2011-4-5 11:44 | 只看该作者
哦顶

使用特权

评论回复
13
lemenade| | 2011-4-5 21:14 | 只看该作者
oh my god

使用特权

评论回复
14
afei9527| | 2011-5-1 01:02 | 只看该作者
:)

使用特权

评论回复
15
ljwdee| | 2011-5-5 16:17 | 只看该作者
顶啊

使用特权

评论回复
16
yfsbz2449| | 2011-5-6 10:29 | 只看该作者
学习

使用特权

评论回复
17
老鱼探戈| | 2011-5-6 10:52 | 只看该作者
这个裤子是谁给缝的? 太.....2..........了...........

使用特权

评论回复
18
shashadengdai| | 2011-5-14 16:18 | 只看该作者
学习了!

使用特权

评论回复
19
afei9527| | 2011-6-10 18:38 | 只看该作者
:)

使用特权

评论回复
20
yangdejin8| | 2011-8-9 21:05 | 只看该作者
//12864模块//
sbit CS=P1^5;                                                                           //接口定义
sbit SCLK=P1^7;
sbit STD=P1^6;
sbit LCD_PSB=P1^4; //串行数据设置L串口 H并口

void delay(unsigned int ms)                                                  // 延时函数
{
        unsigned int i,j;
        for(j=0;j<=ms;j++)
        {
                for(i=0;i<=120;i++)
                {}
        }
}

          void send(uchar type,uchar transdata)                   //串行通信传输函数  ,transdata为要写入的数据或指令
{
        uchar firsttype=0xf8;                                           //firsttype为第一字节,用来判断是写数据还是写指令。默认是写指令
        uchar temp;
        uchar i,j=3;

        if(type)                                                                 //判断是是写数据还是写指令,0为写指令,1为写数据
                firsttype=firsttype|0x02;                         //如果要写数据,则把第一字节的第七位至高
        CS=1;                                                                        //给CS高电平开始写入操作
        SCLK=0;                                                                        //给SCLK时钟脉冲,在每个上升沿把数据写入到LCD
        while(j>0)                                                                //把写数据指令方式和要写入的数据发送给LCD
        {
                if(j==3)        temp=firsttype;                        //确认要写入第一字节数据,及数据指令判断
                else
                if(j==2)        temp=transdata&0xf0;//确认要写入第二字节数据
                else        temp=(transdata<<4)&0xf0;        //确认要写入第三字节数据
                for(i=8;i>0;i--)                                        //把要写入的数据每个位由STD发送到LCD,写入
                {
                        if(temp&0x80)        STD=1;                        //写入第一字节,及最高字节
                        else        STD=0;
                        SCLK=1;                                                   //给SCLK一个上升沿,写入一位
                        temp<<=1;                                           //把数据指令左移一位,开始写入下一位数据
                        SCLK=0;                                            //给SCLK一个低电平,确保下一次写入数据正常
                }
                delay(1);                                                 //做简单的延时
                j--;                                                         //准备写入下一字节数据
        }
        STD=0;                                                                //写入数据指令完毕,给STD和CS低电平
        CS=0;
}

void init()                                                                         // 初始化函数
{
        LCD_PSB=0;                                                                   //把PSB至低,选择串行通信模式
        delay(100);                                                                //延时,保证LCD处于空闲状态
        send(0,0x30);                                                        //初级指令集
        delay(1);                                                               
        send(0,0x0c);                                                        //开显示
        delay(1);                                                          
        send(0,0x01);                                                   //清屏
        delay(1);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

6

帖子

0

粉丝