微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S6B0724芯片的LCD128*64的AVR128驱动程序

S6B0724芯片的LCD128*64的AVR128驱动程序

时间:12-09 来源:互联网 点击:

/*************************************************************/
/* 延时程序 */
/*************************************************************/
//--------------------------------------------------------------------------
void nop(void)
{
int i;
for(i=0;i10;i++)
{
;
}
}
//--------------------------------------------------------------------------
//12.0000MHz
void DelayMS(uint number)
{
uchar k;
for(;number!=0;number--)
for(k=198;k!=0;k--)
{
nop();
nop();
nop();
}
}


/*************************************************************/
/* 检查液晶忙标志 */
/*************************************************************/
/*void CheckLCMBusy(void)
{
uchar data BusyFlag;
do {
LCM_DnI = 0;
LCM_nRD = 0;
_nop_();
BusyFlag = P0;
_nop_();
LCM_nRD = 1;
BusyFlag = BusyFlag 0x80;
}
while(BusyFlag==0x80);
}*/
/*************************************************************/
/* 写液晶指令 */
/*************************************************************/
void WriteCommandLCM(uchar CommandCode)
{
CLRBIT(PORTC,LCM_DnI);//LCM_DnI = 0;
CLRBIT(PORTC,LCM_nWR);//LCM_nWR = 0;
nop();
PORTA = CommandCode;
nop();
SETBIT(PORTC,LCM_nWR);//LCM_nWR = 1;
nop();
}
/*************************************************************/
/* 写液晶数据 */
/*************************************************************/
void WriteDataLCM(uchar Data)
{
SETBIT(PORTC,LCM_DnI);//LCM_DnI = 1;
CLRBIT(PORTC,LCM_nWR);//LCM_nWR = 0;
nop();
PORTA = Data;
nop();
SETBIT(PORTC,LCM_nWR);//LCM_nWR = 1;
nop();
}
/*************************************************************/
/* 读液晶数据 */
/*************************************************************/
/*uchar ReadDataLCM(void)
{
uchar data RData;
LCM_DnI = 1;
LCM_nRD = 0;
_nop_();
RData = P0;
_nop_();
LCM_nRD = 1;
_nop_();
return(RData);
}*/
/*************************************************************/
/* 清液晶显示 */
/*************************************************************/
void ClearLCM(uchar ddd)
{
uchar ii,jj;

WriteCommandLCM(0x40); //START LINE ADDRESS SET
WriteCommandLCM(0xAF); //SET PAGE0 ADDRESS
for(ii=0;ii8;ii++)
{
WriteCommandLCM(0xB0+ii); //SET PAGE0 ADDRESS ++
WriteCommandLCM(0x10); //SET THE COLUMN ADDRESS MSB
WriteCommandLCM(0x02); //SET THE COLUMN ADDRESS LSB
for(jj=128;jj!=0;jj--)
WriteDataLCM(ddd);
}
}
/*************************************************************/
/* 液晶初始化 */
/*************************************************************/
void LCMInit(void)
{
SETBIT(DDRB,4);
SETBIT(PORTB,4);
SETBIT(DDRB,6);
SETBIT(PORTB,6);
DDRC=0XFF;
DDRA=0XFF;
CLRBIT(PORTC,LCM_nCS);//LCM_nCS = 0;
SETBIT(PORTC,LCM_nWR);//LCM_nWR = 1;
SETBIT(PORTC,LCM_nRD);//LCM_nRD = 1;

CLRBIT(PORTC,LCM_nRST);//LCM_nRST = 0;
nop();
nop();
nop();
nop();
nop();

SETBIT(PORTC,LCM_nRST);//LCM_nRST = 1; //至少1us复位液晶

WriteCommandLCM(0xA1);
WriteCommandLCM(0xC8);
WriteCommandLCM(0xA2);
WriteCommandLCM(0x2F);
WriteCommandLCM(0x21);
//REGULATOR RESISTOR SELECT:(1+(Rb/Ra)=5.29)X1.76=V0=11.07V
WriteCommandLCM(0x81);
WriteCommandLCM(0x03);
//REFERENCE VOLTAGE REGISTER SET:Vref=2V Vev=1.76=(1-(63-27)/300)*Vref
}
/*************************************************************/
/* 显示128*64的图形函数:纵向倒序 */
/*************************************************************/
#define Normal 0 //左右反转显示
#define Reverse 1 //对于该液晶的显示为正常从左到右显示
void Display128x64(uchar ADCSelectBit, uchar *TableArray)
{
uchar ii,jj;

if(ADCSelectBit == Reverse) WriteCommandLCM(0xA0);
else WriteCommandLCM(0xA1);
WriteCommandLCM(0x40); //START LINE ADDRESS SET
WriteCommandLCM(0xAF); //SET DISPLAY ON
for(ii=0;ii8;ii++)
{
WriteCommandLCM(0xB0+ii); //SET PAGE0 ADDRESS ++
WriteCommandLCM(0x10); //SET THE COLUMN ADDRESS MSB
WriteCommandLCM(0x02); //SET THE COLUMN ADDRESS LSB
for(jj=128;jj!=0;jj--)
{
WriteDataLCM(*TableArray);
TableArray++;
}
}
WriteCommandLCM(0xA1);
}
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void)
{
LCMInit();

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top