液晶屏为LM6065,控制芯片为RA8802。
最基本的显示程序,显示一行字:
"型号:LM6065 芯片:RA8802 "
使用P2端口作为数据口,P0的5个脚作为控制口,需要注意的是,P0端口需要加上拉电阻。
#include
<
regX52.h
>
#include < intrins.h >
#define uchar unsigned char // 0~255
#define uint unsigned int // 0~65535
#define _LED0 P0_0
#define _LED1 P0_1
#define lcd_bus P2
#define _RST P0_2
#define _WR P0_3
#define _RD P0_4
#define _CS P0_5
#define _FS P0_6
// 厂家: http://www.topwaydisplay.com 型号:LM6065 芯片:RA8802
uchar code logo[] = ... {"型号:LM6065 芯片:RA8802 "} ;
// ====================================================================
// 写命令
// ====================================================================
void display_command_sent(uchar command)
... {
_WR = 1;
_FS = 0;
lcd_bus = command;
_CS = 0;
_nop_();
_WR = 0;
_nop_();
_WR = 1;
_nop_();
_CS = 1;
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
}
// ====================================================================
// 写数据
// ====================================================================
void display_data_sent(uchar disdata)
... {
_WR = 1;
_FS = 1;
lcd_bus = disdata;
_CS = 0;
_nop_();
_WR = 0;
_nop_();
_WR = 1;
_nop_();
_CS = 1;
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
}
// ====================================================================
// 清屏
// ====================================================================
void LCD_clean( void )
... {
uint i,j;
display_command_sent(0x60);display_command_sent(0x00);
display_command_sent(0x70);display_command_sent(0x00);
for(i = 0;i<64; i++)
...{
for(j = 0;j < 30; j++)
display_data_sent(0x00);
}
}
void delay_ms(unsigned int m) // 11.0592MHz晶振,1.0us周期
... {
unsigned int j;
unsigned int i;
for(i=0;i<m;i++)
for(j=0;j<109;j++);
}
// =====================================================================
// 初始化
// =====================================================================
void LCD_mode_set( void )
... {
_RST = 1;
_RST = 0;
delay_ms(500);
_RST = 1;
delay_ms(200);
display_command_sent(0x00);display_command_sent(0xcd); //LCD控制寄存器
display_command_sent(0x08);display_command_sent(0x73); //通用寄存器
display_command_sent(0x10);display_command_sent(0xe9); //光标控制寄存器
display_command_sent(0x18);display_command_sent(0x20); //光标大小控制寄存器
display_command_sent(0x20);display_command_sent(0x1d); //工作窗右边界寄存器
display_command_sent(0x28);display_command_sent(0x1d); //显示窗右边界寄存器
display_command_sent(0x30);display_command_sent(0x3f); //工作窗底部边界寄存器
display_command_sent(0x38);display_command_sent(0x3f); //显示窗底部边界寄存器
display_command_sent(0x40);display_command_sent(0x00); //工作窗左边界寄存器
display_command_sent(0x50);display_command_sent(0x00); //工作窗顶部边界寄存器
display_command_sent(0x48);display_command_sent(0x00); //显示窗左边界寄存器
display_command_sent(0x58);display_command_sent(0x00); //显示窗顶部边界寄存器
display_command_sent(0x60);display_command_sent(0x00); //X方向光标寄存器
display_command_sent(0x70);display_command_sent(0x00); //Y方向光标寄存器
display_command_sent(0x80);display_command_sent(0x23); //闪烁时间寄存器
display_command_sent(0x90);display_command_sent(0x3e); //移位时钟控制寄存器
display_command_sent(0xe0);display_command_sent(0x00); //数据模式寄存器
display_command_sent(0xf0);display_command_sent(0xa0); //字体控制寄存器
delay_ms(20);
}
// ========================================================================
// 初始化,闪亮LED
// ========================================================================
void initport( void )
... {
uchar i;
for(i=0; i<20; i++)
...{
_LED0 = ~_LED0;
delay_ms(100);
}
_LED1 = 0;
_CS = 1;
_RD = 1;
_WR = 1;
_FS = 1;
lcd_bus = 0xff;
}
// ========================================================================
// LCD显示LOGO
// ========================================================================
uchar code * txtdata;
void LOGO_display( void )
... {
uchar i,j,tempdata;
txtdata = &logo[0];
display_command_sent(0x60);display_command_sent(0x00);
display_command_sent(0x70);display_command_sent(0x00);
display_command_sent(0x00);display_command_sent(0xcd);
for(j = 0;j < 1; j++)
...{
for(i = 0;i < 30; i++)
...{
tempdata = (*(txtdata+(j*30)+i));
display_data_sent(tempdata);
}
}
}
// =====================================================================
// 主程序
// =====================================================================
void main( void )
... {
initport( );
LCD_mode_set( );
LCD_clean( );
while(1)
...{
LOGO_display( );
delay_ms(2000);
}
}
#include < intrins.h >
#define uchar unsigned char // 0~255
#define uint unsigned int // 0~65535
#define _LED0 P0_0
#define _LED1 P0_1
#define lcd_bus P2
#define _RST P0_2
#define _WR P0_3
#define _RD P0_4
#define _CS P0_5
#define _FS P0_6
// 厂家: http://www.topwaydisplay.com 型号:LM6065 芯片:RA8802
uchar code logo[] = ... {"型号:LM6065 芯片:RA8802 "} ;
// ====================================================================
// 写命令
// ====================================================================
void display_command_sent(uchar command)
... {
_WR = 1;
_FS = 0;
lcd_bus = command;
_CS = 0;
_nop_();
_WR = 0;
_nop_();
_WR = 1;
_nop_();
_CS = 1;
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
}
// ====================================================================
// 写数据
// ====================================================================
void display_data_sent(uchar disdata)
... {
_WR = 1;
_FS = 1;
lcd_bus = disdata;
_CS = 0;
_nop_();
_WR = 0;
_nop_();
_WR = 1;
_nop_();
_CS = 1;
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
}
// ====================================================================
// 清屏
// ====================================================================
void LCD_clean( void )
... {
uint i,j;
display_command_sent(0x60);display_command_sent(0x00);
display_command_sent(0x70);display_command_sent(0x00);
for(i = 0;i<64; i++)
...{
for(j = 0;j < 30; j++)
display_data_sent(0x00);
}
}
void delay_ms(unsigned int m) // 11.0592MHz晶振,1.0us周期
... {
unsigned int j;
unsigned int i;
for(i=0;i<m;i++)
for(j=0;j<109;j++);
}
// =====================================================================
// 初始化
// =====================================================================
void LCD_mode_set( void )
... {
_RST = 1;
_RST = 0;
delay_ms(500);
_RST = 1;
delay_ms(200);
display_command_sent(0x00);display_command_sent(0xcd); //LCD控制寄存器
display_command_sent(0x08);display_command_sent(0x73); //通用寄存器
display_command_sent(0x10);display_command_sent(0xe9); //光标控制寄存器
display_command_sent(0x18);display_command_sent(0x20); //光标大小控制寄存器
display_command_sent(0x20);display_command_sent(0x1d); //工作窗右边界寄存器
display_command_sent(0x28);display_command_sent(0x1d); //显示窗右边界寄存器
display_command_sent(0x30);display_command_sent(0x3f); //工作窗底部边界寄存器
display_command_sent(0x38);display_command_sent(0x3f); //显示窗底部边界寄存器
display_command_sent(0x40);display_command_sent(0x00); //工作窗左边界寄存器
display_command_sent(0x50);display_command_sent(0x00); //工作窗顶部边界寄存器
display_command_sent(0x48);display_command_sent(0x00); //显示窗左边界寄存器
display_command_sent(0x58);display_command_sent(0x00); //显示窗顶部边界寄存器
display_command_sent(0x60);display_command_sent(0x00); //X方向光标寄存器
display_command_sent(0x70);display_command_sent(0x00); //Y方向光标寄存器
display_command_sent(0x80);display_command_sent(0x23); //闪烁时间寄存器
display_command_sent(0x90);display_command_sent(0x3e); //移位时钟控制寄存器
display_command_sent(0xe0);display_command_sent(0x00); //数据模式寄存器
display_command_sent(0xf0);display_command_sent(0xa0); //字体控制寄存器
delay_ms(20);
}
// ========================================================================
// 初始化,闪亮LED
// ========================================================================
void initport( void )
... {
uchar i;
for(i=0; i<20; i++)
...{
_LED0 = ~_LED0;
delay_ms(100);
}
_LED1 = 0;
_CS = 1;
_RD = 1;
_WR = 1;
_FS = 1;
lcd_bus = 0xff;
}
// ========================================================================
// LCD显示LOGO
// ========================================================================
uchar code * txtdata;
void LOGO_display( void )
... {
uchar i,j,tempdata;
txtdata = &logo[0];
display_command_sent(0x60);display_command_sent(0x00);
display_command_sent(0x70);display_command_sent(0x00);
display_command_sent(0x00);display_command_sent(0xcd);
for(j = 0;j < 1; j++)
...{
for(i = 0;i < 30; i++)
...{
tempdata = (*(txtdata+(j*30)+i));
display_data_sent(tempdata);
}
}
}
// =====================================================================
// 主程序
// =====================================================================
void main( void )
... {
initport( );
LCD_mode_set( );
LCD_clean( );
while(1)
...{
LOGO_display( );
delay_ms(2000);
}
}