📄 lcd_m128128.c
字号:
/*
*********************************************************************************************************
* 礐/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2000, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
* File : LCDWin.C
* Purpose : Driver for Simulator under Windows
*
* Version-Date---Author-Explanation
*
* 2.00 010402 RS a) LCD_GetDevCaps removed from driver
* (now LCD.c)
* 1.30c 000529 JE a) Interface changed
* 1.30b 000428 RS a) DIB class eliminated
* b) Internal cleanups, support for high color
* 1.30a 000417 RS a) Major cleanup in DIB class
* 1.30 000309 RS a) Interface change for emWIn V1.30
* (LCD_L0_SetLUTEntry, LCD_GetDevCap)
* 1.10a 000121 RS a) RECTHEIGHT, RECTWIDTH modified in order to
* fix bug which would at some time prevent
* displaying the first line of the display.
* 1.10.00 000110 RS a) Modifications in order to make it easy to
* implement driver in any windows program
* 1.04.02 991118 RS a) additional assertion added
* LCD_MAX_LOG_COLORS
* 1.04.01 991018 RS a) Support for LCD_FIXEDPALETTE added
* with Anitaliasing enabled
* 1.04.00 991013 JE/RS a) Support for LCD_FIXEDPALETTE added
* b) Driver now accepts the same LCDConf.h as
* the embedded system
* c) Bugfix for ..
* 1.02.02 990831 RS a) Small optimization added for 16-color bitmaps
* 1.02.01 990726 RS a) Transparency support for 16-color bitmpas
* added
* 1.02.00 990212 RS a) New interface version 1.02 supported
* 1.00 990118 RS First release
*
* Known problems or limitations with current version
*
*********************************************************************************************************
*/
#include <string.h> /* for memset */
#include <stddef.h> /* needed for definition of NULL */
#include "LCD_Private.h" /* private modul definitions & config */
#include "GUI_Private.h"
#include "GUIDebug.h"
#include "M128128.h"
#include "LCD_0.h" /* Defines for first display */
U8 lcd_buffer [ LCD_YSIZE>>3 ] [ LCD_XSIZE ];
INT8U const DEC_HEX_TAB[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/*********************************************************************
* LOCAL FUNCTIONS
*/
INT8U lcdWriteData( INT8U page, INT8U dat);
void LCD_WriteCommand(unsigned char page,unsigned char command);
void LCD_WriteData(unsigned char mode,unsigned char page,unsigned char data_in);
void set128128Addr(unsigned char mode,unsigned char x,unsigned char y);
void writeLcd128128Data(unsigned char mode,unsigned char x,unsigned char y,unsigned char data_in);
void GUI_FillSCR(INT8U data);
/***********************************************************************
* 名称:LCD_WriteData()
* 功能:写1字节数据子程序。会先判断状态字。
* 入口参数:dat 要写入LCM的数据
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
INT8U lcdWriteData( INT8U page, INT8U dat)
{
INT8U i = 0;
return(1);
}
/***********************************************************************
* 原型:void wr_12864_order(unsigned char i,unsigned char order)
* 功能:给12864写一个指令
* 入口参数:i:选择 1左半屏,2右半屏,3同时左右屏
* order:指令
* 出口参数:无
***********************************************************************/
void LCD_WriteCommand(unsigned char page,unsigned char command)
{
INT8U i = 0;
}
/***********************************************************************
* 原型:void wr_12864_data(unsigned char mode,unsigned char i,unsigned char data_in)
* 功能:给12864写一个数据
* 入口参数:mode:写入方式:1直接写入,0取反后写入
* i:选择:1左半屏,2右半屏
* data_in:要写入的数据
* 出口参数:无
***********************************************************************/
void LCD_WriteData(unsigned char mode,unsigned char page,unsigned char data_in)
{
if(mode)
lcdWriteData( page, data_in );
else
lcdWriteData( page, ~data_in);
}
/***********************************************************************
* 名称:Full_FillScreem()
* 功能:清除屏幕。
* 入口参数:无
* 出口参数:无
***********************************************************************/
void Full_FillLcd( INT8U page, INT8U dat )
{
INT8U x,y;
LCD_WriteCommand( page, LCD_DISP_ON );
Delay(10);
for(y=0;y<8;y++)
{
LCD_WriteCommand( page, LCD_SET_Y( y ) );
LCD_WriteCommand( page, LCD_SET_X( 0 ) );
for(x=0;x<64;x++)
{
LCD_WriteData( NORMAL_DISP, page, dat );
}
}
}
/***********************************************************************
* 名称:Full_FillScreem()
* 功能:清除屏幕。
* 入口参数:无
* 出口参数:无
***********************************************************************/
LcdDispArea_s DispArea;
LcdDispCursor_s LcdCursor;
int LCD_L0_Init(void)
{
DispArea.mode = NORMAL_DISP;
return 0;
}
/***********************************************************************
* 名称:Full_FillScreem()
* 功能:清除屏幕。
* 入口参数:无
* 出口参数:无
***********************************************************************/
void LCD_L0_ReInit(void)
{
LCD_INIT_CONTROLLER(); /* macro defined in config */
}
/***********************************************************************
* 原型:void set_12864_addr(unsigned char mode,unsigned char x,unsigned char y)
* 功能:设置lcd12864显示座标
* 入口参数:mode:地址写入方式:1只设置x地址,2只设置y地址,3同时设置x和y地址
* x:液晶x轴座标(0到127)
* y:液晶y轴座标(0到15)
* 出口参数:无
***********************************************************************/
void set128128Addr(unsigned char addr_mode,unsigned char x,unsigned char y)
{
INT8U page;
switch(addr_mode)
{
case SET_X: // 只写X坐标
if ( x > 63 )
{
if( y > 7 )
page = PAGE_4;
else
page = PAGE_2;
LCD_WriteCommand( page, LCD_SET_X( x-64 ) );
break;
}
else
{
if( y > 7 )
page = PAGE_3;
else
page = PAGE_1;
LCD_WriteCommand( page, LCD_SET_X( x ) );
}
break;
case SET_Y: // 只写Y坐标
if( y > 7 )
{
LCD_WriteCommand( PAGE_3, LCD_SET_Y( y-8 ) );
LCD_WriteCommand( PAGE_4, LCD_SET_Y( y-8 ) );
break;
}
else
{
LCD_WriteCommand( PAGE_1, LCD_SET_Y( y ) );
LCD_WriteCommand( PAGE_2, LCD_SET_Y( y ) );
}
break;
case SET_X_Y: // 同时写X和Y坐标
if( y > 7 )
{
LCD_WriteCommand( PAGE_3, LCD_SET_Y( y-8 ) );
LCD_WriteCommand( PAGE_4, LCD_SET_Y( y-8 ) );
}
else
{
LCD_WriteCommand( PAGE_1, LCD_SET_Y( y ) );
LCD_WriteCommand( PAGE_2, LCD_SET_Y( y ) );
}
if ( x > 63 )
{
if( y > 7 )
page = PAGE_4;
else
page = PAGE_2;
LCD_WriteCommand( page, LCD_SET_X( x-64 ) );
break;
}
else
{
if( y > 7 )
page = PAGE_3;
else
page = PAGE_1;
LCD_WriteCommand( page, LCD_SET_X( x ) );
}
break;
default: break;
}
}
/***********************************************************************
* 原型:void write_lcd12864_data( unsigned char mode,unsigned char x,
* unsigned char y,unsigned char data_in)
* 功能:给12864指定座标写数据
* 入口参数:mode 写入方式:1直接写入,0取反后写入
* x 屏幕x轴座标(0到127)
* y 屏幕y轴座标(0到7)
* data_in 要写入的数据
* 出口参数:无
***********************************************************************/
void writeLcd128128Data(unsigned char mode,unsigned char x,unsigned char y,unsigned char data_in)
{
INT8U page;
if( y > 7 )
{
if( x > 63 )
{
page = PAGE_4;
x -= 64;
}
else
{
page = PAGE_3;
}
y -= 8;
}
else
{
if( x > 63 )
{
page = PAGE_2;
x -= 64;
}
else
{
page = PAGE_1;
}
}
LCD_WriteCommand( page, LCD_SET_Y( y ) );
LCD_WriteCommand( page, LCD_SET_X( x ) );
LCD_WriteData( mode, page, data_in );
}
/**********************************************************************
* 函数名称:LCM12864_ReadByte()
* 功 能:从显示缓冲区读取指定点上的数据。
* 入口参数:x x坐标值(0-127)
* y y坐标值(0-63)
* 出口参数:返回该点上的字节数据。
***********************************************************************/
int LCM128128_ReadByte(int x, int y)//修改:把INT8U改成int
{
if(x>LCD_XSIZE) return 0;
if(y>LCD_YSIZE) return 0;
y = y>>3;
return lcd_buffer[y][x]; // 返回显示缓冲区指定点上的数据
}
/***********************************************************************
* 函数名称:GUI_FillSCR()
* 功 能:全屏填充。填充显示缓冲区及LCM12864。
* 入口参数:data 填充的数据
* 出口参数:无
***********************************************************************/
void GUI_FillSCR(INT8U data)
{
int x;
int y;
/* 填充显示缓冲区 */
for( y = 0; y<(LCD_YSIZE>>3); y++)
{
for(x=0; x<LCD_XSIZE; x++)
lcd_buffer[y][x] = data;
}
}
/***********************************************************************
* 函数名称:LCD_L0_SetPixelIndex()
* 功 能:在指定位置上画点。
* 入口参数:x 指定点所在列的位置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -