【8051】LCD12864的讲解留档稿

!!!参考文章:讲LCD12864巨清楚的blog!
是基于上面这篇文章的学习记录

疑惑

cs1与cs2均为1时,会同时开启两个半屏,且显示一样的字符
cs1与cs2 均为0时,反而什么都不会显示

代码

lcd.cpp

#include "LCD.h"
//基本指令
void Delay(unsigned short tick) //短延时
{
	uint j,k; 
	 for(j=0;j<tick;j++) 
	 for(k=0;k<110;k++); 
 }
void LCD_Busy_Wait()//忙等待
{
	LCD_DataBus=0x00;
	//读状态模式
	RW = 1;
	RS = 0;
	E = 1;//高电平读取
	while(LCD_DataBus&0x80);
	E = 0;
}

void LCD_Write_Cmd(uchar value)//写指令
{
	LCD_Busy_Wait();
	RW = 0;
	RS = 0;
	LCD_DataBus = value;
	E = 1;
	//等待
	Delay(2);//
	E = 0;//下降沿 锁存DB7~0
}


void LCD_Write_Data(uchar value)//写数据*锁存
{
	LCD_Busy_Wait();
	RW = 0;
	RS = 1;
	LCD_DataBus = value;
	E = 1;
	//等待
	Delay(2);//
	E = 0;//下降沿 锁存DB7~0
}

void LCD_Set_FirRow(uchar firrow)//设置起始行(0~63)
{
	//设置指令
	//RW = 0;
	//RS = 0;
	
	firrow = 0x3f&firrow;
	//range firrow:0~63 2^6
	// 0011 1111
	firrow = 0xc0|firrow;
	// 11xx xxxx
	LCD_Write_Cmd(firrow);
	//P0:DB0~7	
}

void LCD_Set_Col(uchar col)//设置起始列(0~7)
{
	//设置指令
	//RW = 0;
	//RS = 0;
	col = 0x3f&col;
	col = 0x40|col;
	//P0:DB0~7
	//01xx xxxx
	//0011 1111
	//range col:0~63
	LCD_Write_Cmd(col);
}

void LCD_Set_Page(uchar page)//设置页数(0~7)
{
	//设置指令
	//RW = 0;
	///RS = 0;
	page = 0x07 & page;
	page = 0xb8|page;
	//P0:DB0~7
	//1011 1xxx
	//0000 0111
	//range page 0~7
	LCD_Write_Cmd(page);
}

void LCD_Set_Display(uchar swi)//显示开关
{
	//设置指令
	//RW = 0;
	//RS = 0;
	swi = 0x01&swi;
	swi = 0x3e|swi;
	LCD_Write_Cmd(swi);
	//P0:DB0~7
	//0x3e: 0011 1110 off
	//0x3f: 0011 1111 on
}

void LCD_CS(uchar sel)//显示区域
{
    switch(sel)
    {
        case 0:CS1=0; CS2=0; break;     //无显示
        case 1:CS1=1; CS2=0; break;     //左显示
        case 2:CS1=0; CS2=1; break;     //右显示
        default:break;
    }
}


void LCD_Clr_Data(uchar sel)
{
	uchar i;
	uchar j;
	LCD_CS(sel);
	for(i = 0;i<=8;i++)
	{
		LCD_Set_Page(i);//换页
		LCD_Set_FirRow(0);//设置起始行
		for(j = 0;j<=64;j++)
		LCD_DataBus = 0x00;//清空 列指针自动+1
	}
}


//初始化
void LCD_Init()
{
	LCD_Busy_Wait();//忙等待
	LCD_CS(0);//全屏模式
	LCD_Set_Display(0);//关
	LCD_CS(0);//全屏模式
	LCD_Set_Display(1);//开
	LCD_Clr_Data(1);
	LCD_Clr_Data(2);//写数据:清零
	LCD_Set_FirRow(0);//第0行为初始行
	
}

void LCD_Display_Chinese(uchar CS, uchar page,uchar col,uchar *p)
{
	uchar i = 0;
	LCD_CS(CS);//设置显示区域
	LCD_Set_Page(page);//设置起始页:上半页
	LCD_Set_Col(col);//设置起始列
	for(i = 0;i < 16 ; i++)
	{
		LCD_Write_Data(p[i]);
	}
	
	LCD_Set_Page(page+1);//设置下半页
	LCD_Set_Col(col);//设置起始列
	for(i = 0;i < 16 ; i++)
	{
		LCD_Write_Data(p[i+16]);//列地址自动+1
	}
	
}
	
void LCD_Display_English(uchar CS,uchar page,uchar col,uchar *p)
{
	unsigned char i;
	LCD_CS(CS);//设置显示区域
	LCD_Set_Page(page);//设置起始页:上半页
	LCD_Set_Col(col);//设置起始列
	
	for(i = 0;i < 8 ; i++)
	{
		LCD_Write_Data(p[i]);
	}
	
	LCD_Set_Page(page+1);//设置下半页
	for(i = 0;i < 16 ; i++)
	{
		LCD_Write_Data(p[i+16]);
	}
	
}

void LCD_Display_Img_L(uchar i,uchar col,uchar *p)
{
		uchar k;
		LCD_CS(1);
		LCD_Set_Page(i);
		LCD_Set_Col(col);//一个字
		for(k=0;k<64;k++)LCD_Write_Data(p[(128*i+k)]);
}

void LCD_Display_Img_R(uchar i,uchar col,uchar *p)
{
		uchar j;
		LCD_CS(2);
		LCD_Set_Col(col);
		LCD_Set_Page(i);
		for(j=0;j<64;j++)LCD_Write_Data(p[(128*i+64+j)]);
}

void LCD_Display_Img(uchar page,uchar col,uchar *p)
{
		uchar i;
		for(i=0;i<(8-page);i++)//页
		{
		
		//LCD_Set_FirRow((page*8));
		LCD_Display_Img_L(i,col,p);
		LCD_Display_Img_R(i,0,p);

		}
				
			}
			

lcd.h

#ifndef _LCD_H_
#define _LCD_H_
#include "reg51.h"
typedef unsigned int uint;
#define uchar  unsigned char 
#define LCD_DataBus P1
sbit	RS  = P3^0 ;				//数据/命令选择线
sbit	RW  = P3^1 ;				//读/写控制线
sbit	E   = P3^2 ;				//使能控制线
sbit	CS1 = P3^3 ;				//片选1
sbit	CS2	= P3^4 ;				//片选2
sbit	RST = P3^5 ;				//复位



void Delay(unsigned short tick);
void LCD_Busy_Wait();//忙等待
void LCD_Write_Cmd(uchar value);//写指令
void LCD_Write_Data(uchar value);//写数据*锁存
void LCD_Set_Display(uchar swi);//显示开关
void LCD_CS(uchar sel);//显示区域


void LCD_Set_FirRow(uchar firrow);//设置起始行(0~63)
void LCD_Set_Col(uchar col);//设置起始列(0~7)
void LCD_Set_Page(uchar page);//设置页数(0~7)


void LCD_Clr_Data();
//初始化
void LCD_Init();
//中文显示
void LCD_Display_Chinese(uchar CS, uchar page,uchar col,uchar *p);
//英文显示
void LCD_Display_English(uchar CS, uchar page,uchar col,uchar *p);
//图像显示
void LCD_Display_Img(uchar page,uchar col,uchar *p);
void LCD_Display_Img_L(uchar i,uchar col,uchar *p);
void LCD_Display_Img_R(uchar i,uchar col,uchar *p);

#endif

zimo.h

#ifndef _ZIMO_H_  
#define _ZIMO_H_
#define uchar unsigned char//typedef会重定义
//你
const uchar code ni[]={
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,};
//  使
const uchar code shi[]={
0x80,0x60,0xF8,0x07,0x04,0xE4,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0xE4,0x04,0x00,
0x00,0x00,0xFF,0x00,0x80,0x81,0x45,0x29,0x11,0x2F,0x41,0x41,0x81,0x81,0x80,0x00,
};

//  用
const uchar code yong[]={
0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,
};
//  中
const uchar code zhong[]=
{
		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
};
#endif

const uchar code img[]=
{
0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
//0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFC,0x02,0x02,
0xE2,0x12,0x0A,0x4A,0xEA,0x0A,0x0A,0x12,0xE2,0x02,0x02,0x02,0x82,0xC2,0xE2,0xC2,
0x82,0x02,0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,
0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,
0xFF,0xC0,0xE0,0x40,0xE0,0xA0,0x44,0x04,0x90,0xF0,0xE0,0x00,0xC0,0xFC,0xFE,0xFE,
0x27,0x23,0x21,0x61,0x21,0x22,0x3E,0x00,0x00,0x00,0xF8,0xF8,0x9C,0x8C,0x0C,0x0C,
0x0C,0x98,0x00,0x00,0x7C,0xFA,0x63,0xE1,0x80,0x00,0x00,0x00,0x1C,0x00,0x00,0x80,
0x40,0x40,0x40,0xC0,0x80,0x80,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xBE,0xBE,0x3E,
0xBE,0xBC,0x1C,0x40,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7F,0x80,0x90,
0xAB,0x94,0x88,0x88,0x8B,0x88,0x88,0x94,0xAB,0x90,0x80,0x81,0x81,0x8F,0x8F,0x8F,
0x81,0x81,0x80,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3F,0x00,
0x00,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xFB,
0xFF,0xFF,0xFF,0xF1,0xF2,0xF2,0xE4,0xFE,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xF7,
0xC4,0x08,0x08,0x00,0x00,0x88,0xFC,0xFF,0xFC,0xF2,0xC7,0xFF,0x61,0xE1,0xC4,0xC0,
0x41,0xC1,0xF0,0xF8,0xF8,0xE7,0x8F,0x8F,0xCD,0x8C,0xC4,0xE0,0xF8,0x68,0x07,0x00,
0x08,0x08,0x00,0xF8,0x08,0xFF,0xE0,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF9,0xDC,0x54,
0xC1,0xE1,0xC8,0x80,0x80,0xFF,0x00,0x00,0x00,0x03,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,0x03,0x00,0x00,0x00,0x00,0x00,
0xE0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,
0xFF,0x7C,0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0x3F,0x7F,0xFF,0xFF,0xFC,0xF8,0xF9,
0xFF,0x7F,0x3F,0x3F,0x7F,0x7F,0x7B,0x7B,0xF9,0xF9,0xF8,0x38,0xB8,0x78,0x78,0x78,
0x78,0xFC,0xFC,0xFE,0x7F,0x7F,0x3F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,
0x00,0xFF,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xE0,0x00,0x00,0xFC,0x00,0x00,0xFF,0x00,
0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,0xE0,0xEE,0xDF,0xDF,0xFF,0xEE,
0xC5,0xF4,0xF5,0xF0,0xFF,0xFF,0xFF,0xDF,0xCF,0xE7,0xF8,0xF8,0xF1,0xE7,0xCF,0xFF,
0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0x9F,0x80,0xFF,0xFF,0xF6,0xF1,0xE4,0xD3,0xD5,0xC6,
0xD6,0xD1,0xFF,0x97,0x90,0xD5,0xF0,0xF0,0xF0,0xD0,0xD7,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,
0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,
0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,
0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,
0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
//0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFC,0x02,0x02,
0xE2,0x12,0x0A,0x4A,0xEA,0x0A,0x0A,0x12,0xE2,0x02,0x02,0x02,0x82,0xC2,0xE2,0xC2,
0x82,0x02,0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,
0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,
0xFF,0xC0,0xE0,0x40,0xE0,0xA0,0x44,0x04,0x90,0xF0,0xE0,0x00,0xC0,0xFC,0xFE,0xFE,
0x27,0x23,0x21,0x61,0x21,0x22,0x3E,0x00,0x00,0x00,0xF8,0xF8,0x9C,0x8C,0x0C,0x0C,
0x0C,0x98,0x00,0x00,0x7C,0xFA,0x63,0xE1,0x80,0x00,0x00,0x00,0x1C,0x00,0x00,0x80,
0x40,0x40,0x40,0xC0,0x80,0x80,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0xBE,0xBE,0x3E,
0xBE,0xBC,0x1C,0x40,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7F,0x80,0x90,
0xAB,0x94,0x88,0x88,0x8B,0x88,0x88,0x94,0xAB,0x90,0x80,0x81,0x81,0x8F,0x8F,0x8F,
0x81,0x81,0x80,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3F,0x00,
0x00,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xFB,
0xFF,0xFF,0xFF,0xF1,0xF2,0xF2,0xE4,0xFE,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xF7,
0xC4,0x08,0x08,0x00,0x00,0x88,0xFC,0xFF,0xFC,0xF2,0xC7,0xFF,0x61,0xE1,0xC4,0xC0,
0x41,0xC1,0xF0,0xF8,0xF8,0xE7,0x8F,0x8F,0xCD,0x8C,0xC4,0xE0,0xF8,0x68,0x07,0x00,
0x08,0x08,0x00,0xF8,0x08,0xFF,0xE0,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF9,0xDC,0x54,
0xC1,0xE1,0xC8,0x80,0x80,0xFF,0x00,0x00,0x00,0x03,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,0x03,0x00,0x00,0x00,0x00,0x00,
0xE0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,
0xFF,0x7C,0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0x3F,0x7F,0xFF,0xFF,0xFC,0xF8,0xF9,
0xFF,0x7F,0x3F,0x3F,0x7F,0x7F,0x7B,0x7B,0xF9,0xF9,0xF8,0x38,0xB8,0x78,0x78,0x78,
0x78,0xFC,0xFC,0xFE,0x7F,0x7F,0x3F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,
0x00,0xFF,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xE0,0x00,0x00,0xFC,0x00,0x00,0xFF,0x00,
0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,0xE0,0xEE,0xDF,0xDF,0xFF,0xEE,
0xC5,0xF4,0xF5,0xF0,0xFF,0xFF,0xFF,0xDF,0xCF,0xE7,0xF8,0xF8,0xF1,0xE7,0xCF,0xFF,
0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0x9F,0x80,0xFF,0xFF,0xF6,0xF1,0xE4,0xD3,0xD5,0xC6,
0xD6,0xD1,0xFF,0x97,0x90,0xD5,0xF0,0xF0,0xF0,0xD0,0xD7,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,
0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,
0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,
0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF
} ;

讲解备份

lcd显示原理

在这里插入图片描述
在这里插入图片描述

代码讲解对照

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符取模

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
乱码原因:不满八页

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值