📄 lcd12864.c
字号:
#include <reg52.h>
#include "LCD12864.h"
#include "zifu8_8.h"
#include <intrins.h>
/************************************************************************************************************
** Function name: lcd_init( )
** Descriptions: 液晶初始化
** Input: 无
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void lcd_init( void )
{
write_cmd_L( 0x3e ); //关显示
write_cmd_R( 0x3e );
write_cmd_L( 0xc0 ); //起始行
write_cmd_R( 0xc0 );
write_cmd_L( 0x3f ); //开显示
write_cmd_R( 0x3f );
lcd_clr( ); //清屏
}
/************************************************************************************************************
** Function name: lcd_clr( )
** Descriptions: 液晶清屏
** Input: 无
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void lcd_clr( void )
{
unsigned char i = 0;
unsigned char j = 0;
unsigned char page = 0;
for( i = 0; i < 8; i++ ) // 取8页显示(整个屏)
{
page = i;
page |= 0xb8; // page | 0xb8就是取页地址(X的地址,(0 ~ 8))1 0 1 1 1 A2 A1 A0,
write_cmd_L( page );
write_cmd_L( 0x40 ); // 设置Y的地址,从0列开始(0 ~ 63)0 1 A7 A6 A5 A4 A3 A2 A1 A0
for( j = 0; j < 64; j++ )
{
write_dat_L( 0X00 );
}
write_cmd_R( page ); // 清完左屏再清右屏
write_cmd_R( 0x40 );
for( j = 0; j < 64; j++ )
{
write_dat_R( 0X00 );
}
}
}
/************************************************************************************************************
** Function name: Disp_Img( )
** Descriptions: 液晶清屏
** Input: *img
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void Disp_Img(unsigned char code *img)
{
unsigned char j = 0; // 产生列地址
unsigned char k = 0; // 产生页地址
unsigned char page = 0;
for( k = 0; k < 8; k++ ) // 整个屏8页的显示
{
page = k;
page |= 0xb8;
// 先写左半屏数据
write_cmd_L( page );
write_cmd_L( 0x40 );
for( j = 0; j < 64; j++ ) // 左屏64列显示
{
write_dat_L(img[k*128+j]);
}
// 再写右半屏数据
write_cmd_R( page );
write_cmd_R( 0x40 );
for(j=64; j<128; j++) // 右屏64列显示
{
write_dat_R(img[k*128+j]);
}
}
}
/************************************************************************************************************
** Function name: write_cmd_L( )
** Descriptions: 写液晶左半屏命令
** Input: cmd
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void write_cmd_L( unsigned char cmd )
{
CSB = 1; // H:选择左半屏
CSA = 0;
DI = 0; // D/I: H = Data; L = Cmd
RW = 1; // R/W: H = Read; L = Write
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
RW = 0;
DataLine = cmd; // 写入指令数据
E = 1; // E下降沿锁定
_nop_();
E = 0;
}
/************************************************************************************************************
** Function name: write_cmd_R( )
** Descriptions: 写液晶右半屏命令
** Input: cmd
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void write_cmd_R( unsigned char cmd )
{
CSB = 0;
CSA = 1; // H:选择右半屏
DI = 0; // D/I: H = Data; L = Cmd
RW = 1; // R/W: H = Read; L = Write
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
RW = 0;
DataLine = cmd; // 写入指令数据
E = 1; // E下降沿锁定
_nop_();
E = 0;
}
/************************************************************************************************************
** Function name: write_dat_L( )
** Descriptions: 写液晶左半屏数据
** Input: dat
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void write_dat_L( unsigned char dat )
{
CSB = 1; // H:选择左半屏
CSA = 0;
DI = 0; // D/I: H = Data; L = Cmd
RW = 1; // R/W: H = Read; L = Write
do
{
DataLine = 0xff;
E = 1;
_nop_();
}while( BUSY );
E = 0;
DI = 1;
RW = 0;
DataLine = dat; // 写入数据
E = 1; // E下降沿锁定
_nop_();
E = 0;
}
/************************************************************************************************************
** Function name: write_dat_R( )
** Descriptions: 写液晶右半屏数据
** Input: dat
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void write_dat_R( unsigned char dat )
{
CSB = 0;
CSA = 1; // H:选择右半屏
DI = 0; // D/I: H = Data; L = Cmd
RW = 1; // R/W: H = Read; L = Write
do
{
DataLine = 0xff;
E = 1;
_nop_();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -