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

📄 lcd.c

📁 实现三线控制LCD1602
💻 C
字号:
/*  
**  设计者:蒙林通 ***
**  华信通电子公司  **
**  广东工业大学 *****
** 设计时间:2008/08/15 *
**   ***历时:半天 ****
*/
#include <reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm 0
#define dat   1

sbit   cs = P2^7;    //液晶显示片选信号即(RS)
sbit sid = P2^6;    //*液晶显示的数据线即(R/W)
sbit sclk = P2^5;    //*液晶显示时钟信号即(E)
sbit gg = P1^5; 

void wr_lcd (uchar dat_comm,uchar content); //对LCD写数据或指令
void delay (uint us);       //延时子程序
void delay1 (uint ms);
/*以下部分为常用的数据表*/
/*表一: 兰州交通大学毛题字字模代码*/
uchar code tab1[]={
/*-- 宽度x高度=128x64 --*/
0X00,0X00,0X00,0X00,0X00,0X00,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,0X80,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,
0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,
0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XE0,
0X00,0X60,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XE0,
0X00,0X60,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X00,0X00,0X01,0XE0,
0X00,0X60,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XE0,0X00,0X20,0X00,0X03,0XCE,
0X00,0X71,0XF0,0X00,0X00,0X00,0X03,0X00,0X00,0X01,0XE0,0X00,0X30,0X00,0X83,0XBE,
0X00,0X71,0XF0,0X00,0X00,0X00,0X03,0X80,0X00,0X03,0XE0,0X00,0X30,0X00,0XC7,0X7E,
0X00,0X7B,0XF0,0X00,0X00,0X00,0X03,0XC0,0X00,0X07,0XC0,0X00,0X38,0X00,0XC6,0XCE,
0X00,0X73,0X80,0X00,0X00,0X00,0X03,0XDC,0X00,0X07,0X80,0X00,0X38,0X00,0XEF,0X8E,
0X00,0X77,0X0C,0X00,0X00,0X00,0X01,0XFE,0X00,0X0F,0X80,0X00,0X38,0X00,0X6F,0X8C,
0X00,0XFE,0X1C,0X00,0X00,0X00,0X03,0XFE,0X00,0X1F,0X00,0X00,0X38,0X00,0X6F,0X9C,
0X03,0XFC,0X3C,0X00,0X00,0X20,0X01,0XFE,0X00,0X3B,0X00,0X00,0X38,0X00,0X6F,0XDC,
0X0F,0X7C,0X3C,0X00,0X00,0X60,0X03,0XFC,0X00,0X37,0X80,0X00,0X70,0X00,0X6F,0XD8,
0X1F,0X18,0X7C,0X00,0X00,0X60,0X03,0XF0,0X00,0X73,0X80,0X00,0X70,0X03,0X6E,0XF0,
0X0E,0X38,0XD8,0X00,0X00,0X60,0X07,0XE0,0X01,0XF3,0X80,0X00,0X70,0X01,0X7E,0XF0,
0X02,0X30,0XD8,0X00,0X00,0XE0,0X07,0X40,0X01,0XE7,0X00,0X00,0X70,0X01,0X7C,0XF0,
0X00,0X61,0XB8,0X01,0X00,0XE0,0X1F,0X00,0X00,0XC7,0X80,0X00,0X7C,0X01,0XFD,0XE0,
0X00,0XDB,0XB8,0X01,0X19,0XE0,0X1C,0X00,0X00,0X03,0X80,0X00,0X7C,0X01,0XBF,0X60,
0X01,0XDF,0XB8,0X01,0X99,0XE0,0X00,0X20,0X00,0X07,0X80,0X00,0XFC,0X01,0XDF,0X60,
0X03,0XBF,0XB8,0X01,0X99,0XE0,0X02,0X70,0X00,0X07,0XC0,0X00,0XFC,0X01,0XDE,0XC0,
0X03,0X7F,0XB8,0X01,0X99,0XE0,0X02,0X78,0X00,0X0D,0X80,0X00,0XFC,0X01,0XBE,0XDC,
0X00,0X6F,0X38,0X09,0X99,0X60,0X06,0XF8,0X00,0X1D,0X80,0X01,0XF8,0X00,0XB6,0XFC,
0X00,0XC5,0XB8,0X19,0X9B,0X60,0X07,0XF8,0X00,0X7D,0X80,0X0F,0XE0,0X00,0X67,0XEC,
0X00,0XCF,0XB8,0X19,0XBB,0X60,0X07,0XF0,0X00,0X7D,0X80,0X0F,0XC0,0X00,0X87,0X9C,
0X08,0X8F,0XB0,0X1B,0XBB,0X60,0X0F,0XE0,0X00,0X7D,0X80,0X07,0XC0,0X01,0X8F,0X7C,
0X09,0X8F,0X30,0X1F,0XFF,0X60,0X0F,0X60,0X00,0X7D,0X80,0X03,0XC0,0X01,0X98,0XF8,
0X09,0X9F,0X30,0X1F,0XFF,0XE0,0X1E,0X00,0X0C,0X7F,0X80,0X01,0XC0,0X01,0X33,0XF0,
0X09,0X3E,0X30,0X1F,0XFF,0XE0,0X1C,0XC0,0X0C,0X6F,0X80,0X01,0X80,0X03,0X67,0XC0,
0X1B,0X7C,0X30,0X3B,0XFA,0XE0,0X1C,0XE0,0X0E,0X6F,0X80,0X03,0X80,0X02,0XC6,0X00,
0X1B,0XF8,0X30,0X3B,0XF8,0XE0,0X1C,0XE0,0X06,0X7D,0X80,0X03,0X80,0X07,0XC7,0X00,
0X1B,0XFC,0X30,0X3B,0XB8,0XE0,0X06,0XE0,0X06,0X7D,0X80,0X03,0X80,0X05,0X9F,0X00,
0X1E,0XBC,0X30,0X33,0XB8,0XE0,0X03,0XE0,0X06,0X7D,0X80,0X03,0XC0,0X0F,0X7F,0X00,
0X1E,0X3C,0X30,0X33,0XB8,0XE0,0X03,0XE0,0X04,0X6D,0X80,0X07,0X60,0X0E,0X36,0XC0,
0X1E,0X34,0X38,0X17,0X38,0XE0,0X01,0XC0,0X00,0XED,0X80,0X07,0X70,0X0E,0X0D,0XE0,
0X1E,0X7C,0X38,0X07,0X38,0XE0,0X01,0XC0,0X06,0XED,0X80,0X07,0X70,0X0C,0X0F,0XF0,
0X1D,0XFC,0X38,0X07,0X38,0XE0,0X01,0XC0,0X06,0XED,0X80,0X0E,0X38,0X04,0X0F,0XF0,
0X1D,0XFC,0X38,0X07,0X38,0XE0,0X01,0XC0,0X07,0X4D,0X80,0X0E,0X3F,0X80,0X1F,0XE0,
0X1C,0XFC,0X38,0X0E,0X38,0XE0,0X03,0XE0,0X03,0X0F,0X80,0X1C,0X1F,0X80,0X3F,0XC0,
0X1C,0X7C,0X38,0X0E,0X18,0XE0,0X03,0XE0,0X03,0X0F,0X80,0X1C,0X1F,0X01,0XFE,0X00,
0X1C,0XFE,0X38,0X0E,0X18,0XE0,0X03,0XF0,0X0E,0X1F,0X80,0X18,0X0F,0X01,0XF4,0X00,
0X18,0XFF,0X38,0X0E,0X00,0XE0,0X07,0X70,0X0F,0X03,0X80,0X38,0X0E,0X01,0XE6,0X00,
0X18,0XFF,0X38,0X0E,0X00,0XE0,0X07,0X78,0X07,0XC3,0X00,0X30,0X06,0X00,0XC6,0X00,
0X18,0XFF,0X38,0X0C,0X00,0X60,0X0E,0X38,0X03,0XF0,0X00,0X70,0X00,0X00,0X06,0X00,
0X19,0XFF,0X38,0X0C,0X00,0X60,0X0E,0X3C,0X00,0XF8,0X00,0X60,0X00,0X00,0X06,0X00,
0X19,0XDF,0X38,0X00,0X00,0X20,0X1E,0X3E,0X00,0X7E,0X38,0XC0,0X00,0X00,0X06,0X00,
0X19,0XDE,0X38,0X00,0X00,0X20,0X1C,0X1F,0X00,0X1F,0XF1,0XC0,0X00,0X00,0X0E,0X00,
0X18,0X86,0X38,0X00,0X00,0X00,0X38,0X1F,0X80,0X0F,0XF1,0X80,0X00,0X03,0X0E,0X00,
0X00,0X03,0XB8,0X00,0X00,0X00,0X38,0X1F,0XC0,0X0F,0XE0,0X00,0X00,0X01,0XCE,0X00,
0X00,0X03,0XF8,0X00,0X00,0X00,0X70,0X0F,0X80,0X07,0XC0,0X00,0X00,0X00,0XFE,0X00,
0X00,0X00,0XF8,0X00,0X00,0X00,0XE0,0X04,0X00,0X03,0X80,0X00,0X00,0X00,0X7E,0X00,
0X00,0X00,0X78,0X00,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0X00,
0X00,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,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,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
};
unsigned char tab2[]={"兰州交通大学"};

/*------------------初始化-----------------*/
void init_lcd (void)
{
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
wr_lcd (comm,0x14);
}
/*---------------显示汉字或字符----------------*/
void Chinese_disp0 (uchar code *chn)    /*此程序为整屏显示,所提供的数据必须是完整的一屏数据否则会出现乱码*/
{                                 /*空格也应该提供数据*/
uchar i,j;
wr_lcd (comm,0x30);                  /*30---基本指令动作*/
wr_lcd (comm,0x80);
   for(j=0;j<4;j++)
   {for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
   }
}

/*-------------显示汉字或字符-----Haoyf----*/
void Chinese_disp1(uchar code *chn)    /*单行显示数据*/
{ int i;           /*30---基本指令动作*/
wr_lcd (comm,0x30);        /*显示位置为第一行*/
wr_lcd (comm,0x80);        /*显示16个字符*/
for (i=0;i<16;i++)
   { wr_lcd (dat,chn[i]);       /*写显示数据*/
   }
}
/*-------------显示汉字或字符-----Haoyf----*/
void Chinese_disp2(uchar *chn)    /*单行显示数据*/
{ int i;           /*30---基本指令动作*/
wr_lcd (comm,0x30);        /*显示位置为第一行*/
wr_lcd (comm,0x80);        /*显示16个字符*/
for (i=0;chn[i]!='\0';i++)
    wr_lcd (dat,chn[i]);       /*写显示数据*/ 
}
/*----------在特定的位置显示数据----Haoyf---*/
void Chn_dat_disp(uchar address,uchar High,uchar Low ) /*adress要显示的地址,data为要显示汉字的内码*/
{             /*第一行地址为0x80-0x87;第二行地址为0x90-0x97;第三行地址为0x88-0x8f;第四行地址为0x98-0x9f;*/
wr_lcd(comm,address);
wr_lcd(dat,High);
wr_lcd(dat,Low);
}
/*-------------图片显示-----------------*/
void img_disp (uchar code *img)     /*通过字模提取工具提取128*64图像的字模*/
{
uchar i,j;
for(j=0;j<32;j++)
{
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j);
      wr_lcd (comm,x1+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
    }
}
for(j=32;j<64;j++)
{
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j-32);
      wr_lcd (comm,x2+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
    }
}
wr_lcd (comm,0x36);                
}
/*--------------清除RAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (180);
}
/*------------对LCD写数据或指令 -----------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
cs=1;
sclk=0;
sid=1;
for(i=0;i<5;i++)
{
    sclk=1;
    sclk=0;
}
sid=0;
sclk=1;
sclk=0;
if(dat_comm)
    sid=1;                    //数据为要现实的data
else
    sid=0;                    //所送出的数据为命令command
sclk=1;
sclk=0;
sid=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
    for(i=0;i<4;i++)
    {
      a=a<<1;
      sid=CY;
      sclk=1;
      sclk=0;
    }
    sid=0;
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
}
}
/*延时子程序*/
void delay (uint us)   
{
while(us--);
}
/*延时子程序*/
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}

/*液晶显示主函数*/

main()
{
SP=0x5f;
init_lcd ();
clrram();
img_disp(tab1);
delay(2000);
clrram();
Chinese_disp2(tab2);

while(1);
}

⌨️ 快捷键说明

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