📄 slcd12864.h
字号:
#ifndef _slcd12864_h
#define _slcd12864_h
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_cs=P1^2;
sbit lcd_data=P1^1; //串行数据输入端
sbit lcd_clk=P1^0;
/**************************************************
延时函数
**************************************************/
void delay(uint t)
{
while(t--);
}
/***********************************
函数:LCD12864的写命令函数
********************************************/
void write_command(uchar command)
{
uchar i;
uchar dat;
dat=0xf8;
lcd_cs=1;
for(i=0;i<8;i++)
{
lcd_data=(bit)(dat&0x80);
lcd_clk=0; //由时序图,上升沿写入12864
lcd_clk=1;
dat=dat<<1;
}
dat=command;//(3),根据串行传输流程中要求数据和指令传输规则
dat&=0xf0; //先传 command_data的高4位
for(i=0;i<8;i++)
{
lcd_data=(bit)(dat&0x80);
lcd_clk=0;
lcd_clk=1;
dat=dat<<1;
}
dat=command<<4;//(4),传 command_data的低4位
for(i=0;i<8;i++)
{
lcd_data=(bit)(dat&0x80);
lcd_clk=0;
lcd_clk=1;
dat=dat<<1;
}
lcd_cs=0; //(5),CS置为低电平,完成一次指令或数据串行传输
}
/****************************************
函数:void write_data(uchar dat)
功能:向LCD写数据
*******************************************/
void write_data(uchar dat)
{
uchar i;
uchar Data;
Data=0xfa; //这个地方与 write_command,因为本函数write_data
lcd_cs=1; //是写数据,位2的RW=0;位1的RS=1;
for(i=0;i<8;i++)
{
lcd_data=(bit)(Data&0x80);
lcd_clk=0;
lcd_clk=1;
Data=Data<<1;
}
Data=dat;
Data&=0xf0;
for(i=0;i<8;i++)
{
lcd_data=(bit)(Data&0x80);
lcd_clk=0;
lcd_clk=1;
Data=Data<<1;
}
Data=dat<<4;
for(i=0;i<8;i++)
{
lcd_data=(bit)(Data&0x80);
lcd_clk=0;
lcd_clk=1;
Data=Data<<1;
}
lcd_cs=0;
}
/**********************************************
函数:LCD12864的初始化
************************************************/
void lcd_init()
{
write_command(0x30);//选择基本指令集
delay(10);
write_command(0x30);//选择8bit数据流
delay(5);
write_command(0x0c);//开显示
delay(10);
write_command(0x01);//清除显示,并且设定地址指针为00H
delay(50);
write_command(0x06);//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -