📄 12864_driver.c
字号:
/****************************************************************************
** - lcd_12864a_driver.c -
**
** 12864a型号的LCD驱动程序
**
**
**
** mader:许利军
**
** File version: $2007.8.1$
**
***************************************************************************/
#include "lcd_12864_driver.h"
#include "asc_code.h"
/******************************************基本函数**************************/
void LcdInit()
{
__delay_cycles(1000);// 等待液晶进入工作状态
LCD_12864A_RES = 0;
__delay_cycles(1000);
LCD_12864A_RES = 1; // 复位脚有个上升沿
__delay_cycles(10);
WriteControlData(0xa3);//LCD BIAS SET ( A2 1/8;A3 1/65DUTY)
__no_operation();
WriteControlData(0xa0);//ADC select,NORMAL 0-->127
__no_operation();
WriteControlData(0xaf);// DISPLAY ON/OFF
__no_operation();
WriteControlData(0x2f);//power control(VB,VR,VF=1,1,1)
__no_operation();
WriteControlData(0x23); // VOLT REGULATOR RADIO SET
__no_operation();
WriteControlData(0x81);//ELECTRONIC VOLUME mode setting 100B 对比度命令
__no_operation();
WriteControlData(0x28);//REFERENCE VOLT REG set
__no_operation();
WriteControlData(0xc0);//SHL SELECT
__no_operation();
WriteControlData(0xaf);//DISPLAY ON/OFF
__no_operation();
WriteControlData(0x40);// DISPLAY START LINE SET
__no_operation();
__no_operation();
}
void WriteControlData(unsigned char com)
{
LCD_12864A_CS1 = 0;
LCD_12864A_A0 = 0;
ShiftData(com);
LCD_12864A_CS1 = 1;
}
void WriteDisplayData(unsigned char dat)
{
LCD_12864A_CS1 = 0;
LCD_12864A_A0 = 1;
ShiftData( dat );
LCD_12864A_CS1 = 1;
}
void ShiftData(unsigned char dat)
{
unsigned char s,temp;
int i;
LCD_12864A_SCL = 0;
s = dat;
for( i = 0 ;i<8; i++ )
{
LCD_12864A_SCL = 0;
__no_operation();
__no_operation();
temp=s & 0x80;
LCD_12864A_SI = (temp>>7);
__no_operation();
LCD_12864A_SCL = 1;
s = s<<1;
}
}
void Location(unsigned char x,unsigned char y)
{
WriteControlData(0xB0|y); //页地址设置 写命令
__delay_cycles(1);
WriteControlData(0x10|(0x0F&(x>>4))); //列高4位 写命令
__delay_cycles(1);
WriteControlData(0x0F&x); // 列低4位 写命令
__delay_cycles(1);
}
void ClearSreen()
{
uchar i,x,y;
for( y = 0; y <8; y++ ) //从0-8页
for(x = 0;x <128;x ++) //从0-128列
{
Location(x,y);
for (i=0;i<=15;i++)
{
WriteDisplayData(0);
}
Location(x,y+1);
for(i=16;i<32;i++)
{
WriteDisplayData(0);
}
}
}
//fb=1 时为反白显示
void WriteAbc(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
uchar date1,i;
Location(x,y);
for (i=0;i<8;i++)
{
date1=table_aa[n*16+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
__delay_cycles(10);
}
Location(x,y+1);
for(i=8;i<16;i++)
{
date1=table_aa[n*16+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
__delay_cycles(10);
}
}
void WriteNumber(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
uchar date1,i;
Location(x,y);
for (i=0;i<8;i++)
{
date1=number[n*16+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
__delay_cycles(10);
}
Location(x,y+1);
for(i=8;i<16;i++)
{
date1=number[n*16+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
__delay_cycles(10);
}
}
/*16*16汉字写入子程序fb=1 时为反白显示*/
void WriteChinese(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
uchar date1,i;
Location(x,y);
for (i=0;i<=15;i++)
{
date1=table_ch[n*32+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
__delay_cycles(10);
}
Location(x,y+1);
for(i=16;i<32;i++)
{
date1=table_ch[n*32+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
__delay_cycles(10);
}
}
void WriteBmp(unsigned char x,unsigned char y,unsigned char fb ,unsigned char hang,unsigned char lie)
{
uchar i=y,j=x,dat;
for(i=y;i<y+hang/8;i++)
{
for(j=x;j<x+lie;j++)
{ Location(x+j,y+i);
dat=table_bmp[i*lie+j];
if(fb) {dat=255-dat;}
WriteDisplayData(dat);
}
}
}
/******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -