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

📄 lcd_demo.c

📁 LCD12864+51单片机 C语言例程 (此为在主程序
💻 C
字号:
#include<reg52.h>
#include"LCD.h"
#include"key.h"
#include<string.h>
/*--  文字:  测  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
uchar ce[]={0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04};

uchar shi[]={0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00};

uchar idata shit[]={0x00,0x00,0x00,0x00,0x7F,0xFE,0x62,0x46,0x62,0x46,0x62,0x46,0x64,0x26,0x78,0x1E,
0x60,0x06,0x67,0xE6,0x64,0x26,0x64,0x26,0x64,0x26,0x64,0x26,0x7F,0xFE,0x00,0x00};
*/

uchar string[]="测试通地方换行测试测试测试";

void main()
{
uchar key=0;
    P1=0x00;
    LCD_E=0;
//	LCD_init();

//	print(0,1,string);
	key=getKey();
    while(1)
	{
	   
	}

	
	
}


void LCD_init()
{
	LCD_wrcmd(LCD_ON);
	delay(2);
	LCD_wrcmd(LCD_CLEAR);
	delay(2);
//	LCD_CLEAR_GRAPH();
}


void print(uchar x,uchar y,uchar * p)
{
	uchar length=strlen(p);
	uchar counter=0;
	LCD_wrcmd(LCD_BASIC);
	setlocation_c(x,y);

	while(counter<length)
	{	
		LCD_wrdata(*(p++));
		counter++;
		if(((counter+y*2)%16)==0)
		{	
			setlocation_c(x+1,0);
	
		}
	}
}

void draw(uchar x,uchar y,uchar * p)
{	
	uchar i=0;
	uchar x1=x,y1=y;
	getlocation_g(&x1,&y1);
//	LCD_wrcmd(LCD_GRAPH_OFF);   //先关闭图形显示功能


	for(i=0;i<16;i++)
	{
		LCD_wrcmd(x1+i);  //设定垂直坐标

    	LCD_wrcmd(y1);  //设定水平坐标

    	LCD_wrdata(*(p+i*2));  //放入数据高字节

    	LCD_wrdata(*(p+i*2+1));  //放入数据低字节

	}

// 	LCD_wrcmd(LCD_GRAPH_ON);   //先关闭图形显示功	
}

void LCD_CLEAR_GRAPH()

{

   uchar i,j;

 	LCD_wrcmd(LCD_GRAPH_OFF);   //先关闭图形显示功能

    for(j=0;j<32;j++)

    {

     for(i=0;i<8;i++)

       {

        LCD_wrcmd(0x80+j);  //设定垂直坐标

        LCD_wrcmd(0x80+i);  //设定水平坐标

        LCD_wrdata(0x00);  //放入数据高字节

        LCD_wrdata(0x00);  //放入数据低字节

      }

    }

   for(j=32;j<64;j++)

    {

     for(i=0;i<8;i++)

      {

        LCD_wrcmd(0x80+j-32);  //设定垂直坐标

        LCD_wrcmd(0x88+i);  //设定水平坐标

        LCD_wrdata(0x00);  //放入数据高字节

        LCD_wrdata(0x00);  //放入数据低字节

      }

    }

 LCD_wrcmd(LCD_GRAPH_ON);   //最后打开图形显示功能

}


void LCD_wrcmd(uchar cmd)
{
	wait();
	LCD_CD=0;
	LCD_RW=0;
	LCD_E=0;
  	LCD_DATA=cmd;
    LCD_E=1; 
    delay(100);
    LCD_E=0;    
}

void wait()
{
//	while(LCD_busyRD());
	
}
void LCD_wrdata(uchar dat)
{
	wait();
	LCD_CD=1;
	LCD_RW=0;
	LCD_DATA=dat;
    LCD_E=1;
    delay(100);	
    LCD_E=0;    
}

void LCD_rdata(uchar * dat)
{
    uchar xdata * add=LCD_DATA_R;

    LCD_E=1;
    *(dat)=*(add);

    LCD_E=0;    
}

bit LCD_busyRD()
{	
	bit busy;
	LCD_CD=0;
	LCD_RW=1;
	LCD_E=0;
	delay(2);
	LCD_E=1;
	busy=LCD_DATA&0x80;
	LCD_E=0;
	return busy;
  
}

void delay(uint time)
{
	for(;time>0;time--);
}

void getlocation_g(uchar * x,uchar *y)
{
    switch((*x)%4)
    {
        case 0: *x = 0x80; *y+=0x80;break; //第一行开始地址
        case 1: *x = 0x90; *y+=0x80;break; //第二行
        case 2: *x = 0x80; *y+=0x88;break; //第三行
        case 3: *x = 0x90; *y+=0x88;break; //第四行
    }
}

void setlocation_c(uchar  x,uchar y)
{
    switch((x)%4)
    {
        case 0: x = 0x80;break; //第一行开始地址
        case 1: x = 0x90;break; //第二行
        case 2: x = 0x88;break; //第三行
        case 3: x = 0x98;break; //第四行
    }
	LCD_wrcmd(x+y);
}

⌨️ 快捷键说明

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