📄 lcd19264.txt
字号:
/***************************************************
LCD显示相关函数以及字符代码
此文件主要可以显示任意大小任意内容的图片和文字.
Version : 1.1
author : frubby
date : 二○○九年三月六日
last modify :
any question ,please contact :
zhu.zhenghao@hotmail.com
/***********************************************************/
#include <intrins.h>
#include<ADUC834.H>
/********************引脚定义********************/
sbit RS =P2^5; //数据指令
sbit RW =P2^6; //读写
sbit E =P2^7; //使能
sbit CSA =P3^3;
sbit CSB =P3^6;
// 左 中 右
/*CSA 0 1 0 1
CSB 0 0 1 1*/
unsigned char Page; //页地址
unsigned char Col; //列地址
void Delay(unsigned int MS);
void wtcom(void);
/***************************/
/*检查Busy */
/***************************/
void BusyL(void)
{
CSA=0;
CSB=0;
wtcom();
}
void BusyM(void)
{
CSA=1;
CSB=0;
wtcom();
}
void BusyR(void)
{
CSA=0;
CSB=1;
wtcom();
}
void wtcom(void)
{
RS = 0; //指令
RW = 1;
P0 = 0xFF; //输出0xff以便读取正确
E = 1;
_nop_();
//while(P0 & 0x80); //Status Read Bit7 = BUSY
E = 0;
_nop_();
}
/********************************************************/
/*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
/********************************************************/
void Locatexy(void)
{
unsigned char x,y;
switch (Col&0xc0) /* col.and.0xC0 */
{ /*条件分支执行 */
case 0: {BusyL();break;}/*左区 */
case 0x40: {BusyM();break;}/*中区 */
case 0x80: {BusyR();break;}/*右区 */
}
x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/
y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
wtcom(); /* waitting for enable */
RS = 0; //指令
RW = 0; //写
P0 = y; //设置页面地址
E = 1;
_nop_();
E = 0;
_nop_();
wtcom(); /* waitting for enable */
RS = 0;
RW = 0;
P0 = x; //设置列地址
E = 1;
_nop_();
E = 0;
_nop_();
}
/***************************/
/*写指令 */
/***************************/
void WriteCommandL( unsigned char CommandByte )
{
BusyL();
P0 = CommandByte;
RS = 0; //指令
RW = 0;
E = 1;
_nop_();
E = 0;
_nop_();
}
void WriteCommandM( unsigned char CommandByte )
{
BusyM();
P0 = CommandByte;
RS = 0; //指令
RW = 0;
E = 1;
_nop_();
E = 0;
_nop_();
}
void WriteCommandR( unsigned char CommandByte )
{
BusyR();
P0 = CommandByte;
RS = 0; //指令
RW = 0;
E = 1;
_nop_();
E = 0;
_nop_();
}
/***************************/
/*读数据 */
/***************************/
unsigned char ReadData( void )
{
unsigned char DataByte;
Locatexy(); /*坐标定位,返回时保留分区状态不变 */
RS = 1; /*数据输出*/
RW = 1; /*读入 */
P0 = 0xFF; //输出0xff以便读取正确
E = 1; /*读入到LCM*/
_nop_();
DataByte = P0; /*数据读出到数据口P0 */
E = 0;
_nop_();
return DataByte;
}
/***************************/
/*写数据 */
/***************************/
void WriteData( unsigned char DataByte )
{
Locatexy(); /*坐标定位,返回时保留分区状态不变 */
RS = 1; /*数据输出*/
RW = 0; /*写输出 */
P0 = DataByte; /*数据输出到数据口 */
E = 1; /*写入到LCM*/
_nop_();
E = 0;
_nop_();
}
/*************************************************************************************
函数名称:void LcmClear( void )
函数功能:此函数用来 将LCD液晶屏清除原先显示的内容
函数参数:无
***************************************************************************************/
void LcmClear( void )
{
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
for(Col=0;Col<192;Col++)
WriteData(0);
}
/*************************************************************************************
函数名称:void LcmInit( void )
函数功能:此函数用来 将LCD液晶屏初始化
函数参数:无
***************************************************************************************/
void LcmInit( void )
{
WriteCommandL(0x3f);//开显示
WriteCommandM(0x3f);
WriteCommandR(0x3f);
WriteCommandL(0xc0); //设置起始地址=0
WriteCommandM(0xc0);
WriteCommandR(0xc0);
WriteCommandL(0x3f); //开显示
WriteCommandM(0x3f);
WriteCommandR(0x3f);
LcmClear();
Col = 0;
Page= 0;
Locatexy();
}
/*************************************************************************************
函数名称:void LcmPutDots( unsigned char DotByte )
函数功能:此函数用来显示显示屏上显示任意字节的数字.然后取反显示
函数参数:有1个 参数,DOTBYTE为要显示的字节
***************************************************************************************/
void LcmPutDots( unsigned char DotByte )
{
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
{
for(Col=0;Col<192;Col++)
{
WriteData( DotByte );
DotByte = ~DotByte;
}
}
}
/*************************************************************************************
函数名称:void LcmPutWord(unsigned char *words,unsigned char wpage1,unsigned char wpage2,unsigned char wcol1,unsigned char wcol2)
函数功能:此函数用来显示显示屏上显示出任意大小和内容的图形,也可以用来显示任意大小的文字
函数参数:有5个 参数,words为要显示的图形的数组, wpage1wpage2为起始页和结束页+1, wcol1wcol2为起始列和结束列+1
***************************************************************************************/
void LcmPutWord(unsigned char *words,unsigned char wpage1,unsigned char wpage2,unsigned char wcol1,unsigned char wcol2)
{
unsigned int X=0;
for(Page=wpage1;Page<wpage2;Page++)
for(Col=wcol1;Col<wcol2;Col++)
{
WriteData(words[X]);
X++;
}
}
/*************************************************************************************
函数名称:void LcmPutBMP( unsigned char *puts )
函数功能:此函数用来显示196*64的图形
函数参数:有1个 参数, puts指针指向图形的数组
***************************************************************************************/
void LcmPutBMP( unsigned char *puts )
{
unsigned int X=0;
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
{
for(Col=0;Col<192;Col++)
{
WriteData( puts[X] );
X++;
}
}
}
/*************************************************************************************
函数名称:void LcmReverseBMP( void )
函数功能:此函数用来将整个画面显示取反
函数参数:无
***************************************************************************************/
void LcmReverseBMP( void )
{
unsigned char temp;
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
{
for(Col=0;Col<192;Col++)
{
temp = ReadData(); //空读一次
temp = ReadData();
temp = ~temp;
WriteData(temp);
}
}
}
void Delay(unsigned int MS)
{
unsigned char us,usn;
while(MS!=0)
{
usn = 2; //for 12M
while(usn!=0)
{
us=0xf6;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -