📄 lcd.c
字号:
#include"lcd.h"
/*==================================================================
* Function : LCD_CMD
* Description : 送命令及选通CS=0;
* Input Para : unsigned char LCDdata
* Output Para : void
* Return Value: void
===================================================================*/
void LCD_CMD(U8 LCDdata)
{
// P1DIR |= 0x35;//第0,2,4,5输出使能
P1OUT &= 0xFA;//第0,2为零,及CS,RS=0
P1OUT |= 0x20;//第5脚为1,及RD*为1
LCD_data = LCDdata;//送数据
P1OUT &= 0xEF;//第4脚置零,WR*=0
P1OUT |= 0x10;//第4脚置1,WR*=1,
P1OUT |= 0x01;//cs=1;
}
/*==================================================================
* Function : LCD_DAT
* Description : 送数据及禁止CS=1;
* Input Para : unsigned char LCDdata
* Output Para : void
* Return Value : void
===================================================================*/
void LCD_DAT(U8 LCDdata)
{
// P1DIR |= 0x35;//第0,2,4,5输出使能
P1OUT &= 0xFE;//第0为零,及CS=0
P1OUT |= 0x24;//第2,5脚为1,及RS,RD*为1
LCD_data = LCDdata;//送数据
P1OUT &= 0xEF;//第4脚置零,WR*=0
P1OUT |= 0x10;//第4脚置1,WR*=1,
P1OUT |= 0x01;//cs=1;
}
/*==================================================================
* Function : delay_ms
* Description : 延时子程序
* Input Para : unsigned int
* Output Para : void
* Return Value: void
==================================================================*/
void delay_ms(unsigned long int DelayConuter)
{
for(unsigned long int i=0;i<DelayConuter;i++);
}
/*==================================================================
* Function : lcd_init
* Description : 初始化lcd,在使用lcd之前必须调用
* Input Para : void
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_init(void)
{
U8 X,Y;
// U8 * pPoint;
/*reset lcd, delay some tiem, like 10, 20 ms*/
LCD_nRST_set;
LCD_nRST_cle;
delay_ms(300);
LCD_nRST_set;
/*关背光,初始化完后再开*/
BL_EN_cle;
/*初始化LCD,初始化命令由LCD原厂提供,
有兴趣可以对照lcd driver ic看看每条命令的含义,
调节lcd显示效果也通过这些命令。
注: 这部分代码,本店不予技术支持*/
LCD_CMD(0x11); //slep out
LCD_CMD(0x20); //Display Inversion Off
LCD_CMD(0X25); //
LCD_DAT(0x01); //
LCD_CMD(0x38); //Idle Mode Off
LCD_CMD(0x13); //Normal Display Mode On
LCD_CMD(0x36); //Memory Data Access Control
LCD_DAT(0xc8); //
LCD_CMD(0XC0); //Power Control 1
LCD_DAT(0x06); //
LCD_DAT(0x05); //
LCD_CMD(0Xc5); //VCOM Control 1
LCD_DAT(0xA2); //
LCD_CMD(0Xc6); //VCOM Control 2
LCD_DAT(0x09); //
LCD_CMD(0X3a); //Interface Pixel Format
LCD_DAT(0x65); //
LCD_CMD(0xf0) ; //
LCD_DAT(0x5a); //
LCD_CMD(0xf2) ; //
LCD_DAT(0x01);
//-----------gamma--------------
LCD_CMD(0xe0); //Gamma (‘+’polarity for Red color) Correction Characteristics Setting
LCD_DAT(0x00); //
LCD_DAT(0x01); //
LCD_DAT(0x06);
LCD_DAT(0x2A);
LCD_DAT(0x25);
LCD_DAT(0x0b);
LCD_DAT(0x18);
LCD_DAT(0x05);
LCD_DAT(0x06);
LCD_DAT(0x05);
LCD_DAT(0x0B);
LCD_DAT(0x0C);
LCD_DAT(0x01);
LCD_DAT(0x04);
LCD_DAT(0x03);
LCD_DAT(0x06);
LCD_CMD(0xe1); //Gamma (‘-’polarity for Red color) Correction Characteristics Setting
LCD_DAT(0x06);
LCD_DAT(0x1D);
LCD_DAT(0x21);
LCD_DAT(0x0f);
LCD_DAT(0x0a);
LCD_DAT(0x04);
LCD_DAT(0x05);
LCD_DAT(0x18);
LCD_DAT(0x06);
LCD_DAT(0x04);
LCD_DAT(0x05);
LCD_DAT(0x02);
LCD_DAT(0x0B);
LCD_DAT(0x0A);
LCD_DAT(0x05);
LCD_DAT(0x05);
//初始化LCD -end
LCD_CMD(LCD_R_DISPLAY_ON);
/*刷屏,全屏显示白屏或者中间创易电子logo*/
/*设置刷屏区域*/
lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCREEN_Y_END);
/*送显示数据*/
for(Y = 0; Y < 55; Y++)
{
for(X = 0; X < 176; X++)
{
LCD_DAT(0xFF);
LCD_DAT(0xFF);
}
}
/*
#ifdef LOGO
pPoint = gImage_Logo;
for(Y = 55; Y < 165; Y++)
{
for(X = 0; X < 176; X++)
{
LCD_DAT(*pPoint ++);
LCD_DAT(*pPoint++);
}
}
#else */
for(Y = 55; Y < 165; Y++)
{
for(X = 0; X < 176; X++)
{
LCD_DAT(0xFF);
LCD_DAT(0xFF);
}
}
//#endif
for(Y = 165; Y < 220; Y++)
{
for(X = 0; X < 176; X++)
{
LCD_DAT(0xFF);
LCD_DAT(0xFF);
}
}
/*刷屏-end*/
/*开背光*/
BL_EN_set;
#ifdef _DESIGN_EASY_LCM_MCU_PLATFORM_
/*在创易电子的demo程序中,便于后面刷屏,所以先设置了刷屏区域*/
lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCREEN_Y_END);
#endif
return;
}
/*==================================================================
* Function : lcd_set_write_area
* Description : 设置lcd memory write的区域
* Input Para : U8 StartX, U8 StartY,U8 EndX, U8 EndY
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_set_write_area(U8 StartX, U8 StartY,U8 EndX, U8 EndY)
{
LCD_CMD(LCD_R_SET_COLUMN_ADDR);
LCD_DAT(0x00);
LCD_DAT(StartX);
LCD_DAT(0x00);
LCD_DAT(EndX);
LCD_CMD(LCD_R_SET_ROW_ADDR);
LCD_DAT(0x00);
LCD_DAT(StartY);
LCD_DAT(0x00);
LCD_DAT(EndY);
LCD_CMD(LCD_R_MEMORY_WRITE);
return;
}
/*==================================================================
* Function : lcd_display_full_screen_color
* Description : 将全屏刷为某一颜色
* Input Para : U16 val
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_display_full_screen_color(U16 color)
{
U8 X, Y;
lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCREEN_Y_END);
for(X = 0; X < LCD_WIDTH; X++)
{
for(Y = 0; Y < LCD_HEIGHT; Y++)
{
LCD_DAT(color >> 8);
LCD_DAT(color & 0xFF);
}
}
return;
}
/*==================================================================
* Function : lcd_display_rectangle_color
* Description : 将某一坐标矩形刷为某一颜色
* Input Para : U8 StartX, U8 StartY,U8 EndX, U8 EndY, U16 color
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_display_rectangle_color(U8 StartX, U8 StartY,U8 EndX, U8 EndY, U16 color)
{
U8 i, j;
lcd_set_write_area(StartX, StartY, EndX, EndY);
for(j = StartY; j <= EndY; j++)
{
for(i = StartX; i <= EndX; i++)
{
LCD_DAT(color >> 8);
LCD_DAT(color & 0xFF);
}
}
return;
}
/*==================================================================
* Function : lcd_enter_sleep
* Description : lcd进入睡眠模式
* Input Para : void
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_enter_sleep(void)
{
LCD_CMD(LCD_R_DISPLAY_OFF);//Display off
LCD_CMD(LCD_R_SLEEP_IN);//Sleep in
return;
}
/*==================================================================
* Function : lcd_exit_sleep
* Description : lcd退出睡眠模式
* Input Para : void
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_exit_sleep(void)
{
LCD_CMD(LCD_R_SLEEP_OUT);//Sleep out
LCD_CMD(LCD_R_DISPLAY_ON);//Display on
return;
}
/*==================================================================
* Function : lcd_show_text
* Description : 显示标准ASCII码字符,需要ASCII。h的支持,由指针给出字码
* Input Para : X,Y,char *test,U16 Bacg_Color,U16 Font_Color
* Output Para : void
* Return Value: void
==================================================================*/
void lcd_show_text(U8 X,U8 Y,U8 txt,U16 Bacg_Color,U16 Font_Color)
{
#include "ASCII.h"
U8 i,j,temp;
U16 colors;
U8 tPtr = 0;
tPtr =(txt-' ');
colors = Bacg_Color>>8;
lcd_set_write_area(X,Y,X+7,Y+15);
for(i=0;i<16;i++)
{
temp = ascii[tPtr][i];
for(j=0;j<8;j++)
{
if(temp & 0x01)
{
LCD_DAT(Font_Color);
LCD_DAT(Font_Color);
}
else
{
LCD_DAT(colors);
LCD_DAT(Bacg_Color);
}
temp = temp >> 1;
}
}
return;
}
/*==================================================================
* Function : lcd_display_dot
* Description : 显示3x3的点
* Input Para : U8 X, U8 Y 中心点的坐标
* Output Para : void
* Return Value : void
==================================================================*/
void lcd_display_dot(U8 X, U8 Y)
{
U8 i;
U8 StX, StY, EndX, EndY;
if(X < 1)
{
X= 1;
}
if(X > 174)
{
X = 174;
}
if(Y < 1)
{
Y = 1;
}
if(Y > 218)
{
Y = 218;
}
StX = X - 1;
StY = Y - 1;
EndX = X + 0;
EndY = Y + 0;
lcd_set_write_area(StX, StY, EndX, EndY);
for(i = 0; i < 4; i++)
{
LCD_DAT(LedDotColor >> 8);
LCD_DAT(LedDotColor & 0xFF);
}
return;
}
/*==================================================================
* Function : lcd_display_adjust
* Description : 用于触摸屏校验的图形
* Input Para : U8 X, U8 Y 中心点的坐标
* Output Para : void
* Return Value : void
==================================================================*/
void lcd_display_adjust(U8 X,U8 Y)
{
//暂时先用一个点代替
LedDotColor = RED;
lcd_display_dot(X,Y);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -