📄 12864_lcd.c
字号:
#include "reg52.h"
#include "declare.h"
unsigned char COUNT3,COUNT2,COUNT1,LCD_X,LCD_Y;
/**********************************************************
RT12864M LCD DISPLAY
建立时间:2007年5月25号
修改日期:2007年5月30号
**********************************************************/
void LCD_init(void)
{ //----先复位一下,然后再开始工作
P2 &= ~LCD_RST ; //p2_3-复位信号
delay_nms(20) ; //延时一会
P2 |= LCD_RST ;
delay_nms(1) ;
P2 |= LCD_PSB ; //通讯方式为8位数据并口
LCD_write_char(0x34,0); //34H--扩充指令操作
LCD_write_char(0x30,0); //30H--基本指令操作
LCD_write_char(0x01,0); //显示清屏
LCD_write_char(0x06,0); //指定在资料写入或读取时,光标的移动方向
LCD_write_char(0x0C,0); //显示开,开显示,关光标,不闪烁
// LCD_write_char(0x80,0); //显示光标移动设置
}
void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
{
P2 |= LCD_EN; //EN=1
delay_nus(1);
P2 &= ~LCD_EN; //EN=0
}
/*-----------------------------------------------------------------------
LCD_write_char : 中英文字符串显示函数
LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
入命令
输入参数:*s :中英文字符串指针;
X、Y : 显示字符串的位置,X:0-15,Y:0-1
LCD第一行显示寄存器地址:0X80-0X87
LCD第二行显示寄存器地址:0X90-0X9F
LCD第三行显示寄存器地址:0X88-0X8F
LCD第四行显示寄存器地址:0X98-0X9F
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char command,unsigned char data11)
{
unsigned char command_temp;
unsigned char data_temp;
command_temp = command;
data_temp = data11;//数据和命令都给临时积存器
//接下来判断忙不忙呢?
LCD_wait_Ready();
// LCD_BUSY();
if (command == 0)//如果是命令
{
P2 &= ~LCD_EN; //EN=0高电平有效
P2 |= LCD_RS; //RS=1命令有效
P2 &= ~LCD_RW; //RW=0写入LCD
P0 = data_temp; //send 8bit 把数据传给端口
LCD_en_write(); //给一个脉冲,写入LCD
}
else
{
P2 &= ~LCD_EN; //EN=0
P2 &= ~LCD_RS; //RS=0数据有效
P2 &= ~LCD_RW; //RW=0 写
P0 = command_temp;//send command
LCD_en_write();
}
P2 |= LCD_RW; //read state
P2 ^= LCD_RS;
}
void LCD_wait_Ready(void) //等待LCD空闲
{
P2 &= ~LCD_RS; //RS=0
P2 |= LCD_RW; //RW=1
P2 |= LCD_EN; //EN=1
while (!( P0&0x80 ) == 0);
P2 &= ~LCD_EN; //EN=0
}
/*-----------------------------------------------------------------------
LCD_set_xy : 设置LCD显示的起始位置
输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-4
LCD第一行显示寄存器地址:0X80-0X8F
LCD第一行显示寄存器地址:0XC0-0XCF
编写日期 :2005
最后修改日期 :2005
-----------------------------------------------------------------------*/
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
switch(y)
{
case 0:
address = 0x80 + x;
break;
case 1:
address = 0x90 + x;
break;
case 2:
address = 0x88 + x;
break;
case 3:
address = 0x98 + x;
break;
default:address = 0x80 + x;
}
LCD_write_char( address, 0 );
}
/*-----------------------------------------------------------------------
LCD_write_string : 中英文字符串显示函数
输入参数:*s :英文字符串指针;
X、Y : 显示字符串的位置
编写日期 :2005
最后修改日期 :2005
-----------------------------------------------------------------------*/
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_set_xy( X, Y );
while (*s)
{
LCD_write_char( 0, *s );
s ++;
delay_nms(1);
}
}
//----------------------------图形显示
void PHOTO_DISP(const unsigned char *s)
{
COUNT3=0X02;
LCD_X=0X80;
for (;COUNT3!=0;COUNT3--)
{
LCD_Y=0X80;
COUNT2=0X20;//32
for (;COUNT2!=0;COUNT2--)
{
COUNT1=0X10;//16
WR_READY();
for (;COUNT1!=0;COUNT1--)
{
// send_data(*s++);
LCD_write_char(0,*s++);
}
LCD_Y+=1;
}
LCD_X=0X88;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -