!!!参考文章:讲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显示原理
代码讲解对照
字符取模
乱码原因:不满八页