📄 lcd.c
字号:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name: lcd.c
** Last modified Date: 2006-03-20
** Last Version: 1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Created by:
** Created date: 2006-03-20
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date: 2006-03-20
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "lcd.h"
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
/*************************************************************/
/* 检查液晶忙标志 */
/*************************************************************/
void CheckLCMBusy(void)
{
uint8 BusyFlag;
do {
IO1CLR = LCDRS;
IO0CLR = LCDRD;
Delay(2);
BusyFlag =ReadKD(void)
;
Delay(2);
IO0SET = LCDRD;
BusyFlag = BusyFlag & 0x80;
}
while(BusyFlag==0x80);
}
/*************************************************************/
/* 写液晶指令 */
/*************************************************************/
void WriteCommandLCM(uchar CommandCode)
{
IO1CLR = LCDRS;
IO0CLR = LCDRD;
Delay(2);
WriteKD(CommandCode);
Delay(2);
IO0SET = LCDRD;
Delay(2);
}
/*************************************************************/
/* 写液晶数据 */
/*************************************************************/
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;ii<8;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;ii<8;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();
for(;;)
{
ClearLCM(0xf0);
DelayMS(200);
ClearLCM(0x0f);
DelayMS(200);
ClearLCM(0xff);
DelayMS(200);
ClearLCM(0x00);
DelayMS(200);
Display128x64(Normal,zimo);
DelayMS(1000);
Display128x64(Reverse,zimo);
DelayMS(300);
}
}
/*************************************************************/
/* 结束 */
/*************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -