📄 sed1335lcd.c
字号:
/******************************************************************
* 文件名称: SED1335LCD . c *
* 文件用途: SED1335控制液晶模SHARP LM32019T的显示 *
* 点阵为320x240 *
* *
* *
*******************************************************************/
#include "Public.h"
#include "DotMatrix.h"
#include "KeyScanf.h"
#include <absacc.h>
/*************指令代码*****************/
#define SYSTEM_SET 0x40 //初始化设置
#define SCROLL 0x44 //显示区域设置
#define SLEEP_IN 0x53 //休眠模式
#define DISP_ON 0x59 //开显示
#define DISP_OFF 0x58 //关显示
#define OVLAY 0x5B //显示合成设置
#define HDOT_SCR 0x5A //点位移设置
#define CSRFORM 0x5D //光标形状设置
#define CGRAM_ADR 0x5C //CGRAM首地址
#define CSRDIR_RIGHT 0x4C //光标向右移动
#define CSRDIR_LEFT 0x4D //光标向左移动
#define CSRDIR_UP 0x4E //光标向上移动
#define CSRDIR_DOWN 0x4F //光标向左移动
#define CSRW 0x46 //光标指针设置
#define CSRR 0x47 //读取光标位置
#define MWRITE 0x42 //写数据
#define MREAD 0x43 //读书据
/*************初始化参数*****************/
#define CR 40 //定义显示窗口的长度,以字符为单位
#define TCR 45 //定义LCD的时间常数.这个时间常数应该尽量小(场频就大),防止转换时出现闪烁
#define LF 240 //定义LCD的行数
#define APL 40 //定义LCD一行所占缓冲区的字节数,低8位
#define APH 0 //定义LCD一行所占缓冲区的字节数,高8位
#define SAD1 0x0000 //定义显示一区首址
#define SAD1L 0x00 //定义显示一区首址低8位
#define SAD1H 0x00 //定义显示一区首址高8位
#define SL1 240 //定义显示一区所占显示屏幕的行数
#define SAD2 0x4000 //定义显示二区首址
#define SAD2L 0x00 //定义显示二区首址低8位
#define SAD2H 0x40 //定义显示二区首址高8位
#define SL2 240 //定义显示二区所占显示屏幕的行数
#define SAD3 0x0000 //定义显示三区首址
#define SAD3L 0x00 //定义显示三区首址低8位
#define SAD3H 0x00 //定义显示三区首址高8位
#define SAD4 0x0000 //定义显示四区首址
#define SAD4L 0x00 //定义显示四区首址低8位
#define SAD4H 0x00 //定义显示四区首址高8位
/*************端口*******************/
#define LCDState XBYTE[0x8000] //状态
#define LCDCommand XBYTE[0x8001] //命令
#define LCDDataWrite XBYTE[0x8000] //写数据
#define LCDDataRead XBYTE[0x8001] //读数据
/*************函数声明*****************/
/*------------基本操作函数------------------------*/
void LCDInit();
void LCDClr( uint unStartRow , uint unEndRow );
void RegionClr( uchar ucStartRow , uchar ucStartColumn , uchar ucLength , uchar ucWidth);
void SED1335DataWrite( uint unAddress , uchar unData);
uchar SED1335DataRead( uint unAddress);
/*-------------字符显示-----------------------------*/
void ChineseDisplay(uchar ucIndex , uchar ucRow , uchar ucColumn , uchar ucAttribute);
void Char24Display(uchar ucIndex , uchar ucRow , uchar ucColumn , uchar ucAttribute);
void Char16X24Display(uchar ucIndex , uchar ucRow , uchar ucColumn , uchar ucAttribute);
void Char16Display(uchar ucIndex , uchar ucRow , uchar ucColumn , uchar ucAttribute);
void CharDisplay(uchar ucIndex , uchar ucRow , uchar ucColumn , uchar ucAttribute);
/*---------------图片显示---------------------------------------*/
uchar GSKFlagDisplay(uchar ucRow , uchar ucColumn , uchar ucAttribute );
uchar GSKNameDisplay(uchar ucRow , uchar ucColumn , uchar ucAttribute );
void MultipleDisplay(uchar ucIndex , uchar ucRow , uchar ucColumn , uchar ucAttribute);
/*----------------直线--------------------------------------------------*/
void QuickLineX(uchar ucY , uint unXStart , uint unXEnd);
void QuickLineY(uint unX , uchar ucYStart , uchar ucYEnd, uchar ucWidth);
void CursorDisplay(uchar ucRow , uchar ucColumn , uchar ucAttribute);
/*----------------字符串显示---------------------------------------------------*/
void LCD24Printf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay );
void LCD16X24Printf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay );
void LCDPrintf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay );
void LCD8Printf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay );
void ProgramRowPrintf(uchar ucRowStart , uchar ucColumnStart , uchar ucAttribute , uchar *pStringDisplay );
/*************SYSTEM_SET与SCROLL初始化参数*****************/
uchar code SYSTEM_SET_INIT[8]={0x30,0x87,0x07,CR,TCR,LF,APL,APH};
uchar code SCROLL_INIT[10]={SAD1L,SAD1H,SL1,SAD2L,SAD2H,SL2,SAD3L,SAD3H,SAD4L,SAD4H};
/******************函数实体******************************/
/*------------基本操作函数------------------------*/
/***********************************************************
* 函数名称: LCDInit() *
* 函数用途: 初始化LCD *
* 输入参数:无 *
* 输出参数:无 *
* *
***********************************************************/
void LCDInit()
{
uint idata ucCounter;
LCDCommand=SYSTEM_SET; //初始化屏幕
for(ucCounter=0;ucCounter<8;ucCounter++)
{
LCDDataWrite=SYSTEM_SET_INIT[ucCounter];
}
LCDCommand=SCROLL; //设置显示区域
for(ucCounter=0;ucCounter<10;ucCounter++)
{
LCDDataWrite=SCROLL_INIT[ucCounter];
}
LCDCommand=HDOT_SCR; //设置点水平移动量
LCDDataWrite=0x00;
LCDCommand=OVLAY; //设置显示合成方式
LCDDataWrite=0x0C; //二重合成显示,显示方式=L1+L2+L3
LCDCommand=CSRFORM; //设置光标形状
LCDDataWrite=0x07; //水平点数为7
LCDDataWrite=0x87; //垂直点数为7,阴影显示
LCDCommand=DISP_ON; //开显示
LCDDataWrite=0x04; //开启一区, 关闭光标
LCDClr(0,818); //清屏
LCDCommand=CSRW; //设置光标位置
LCDDataWrite=0x00;
LCDDataWrite=0x00;
return;
}
/*********************************************************
* 函数名称: SED1335DataRead() *
* 函数用途: 读显存 *
* 输入参数: *
* unAddress:内存单元地址 *
* 输出参数: 无 *
* *
***********************************************************/
uchar SED1335DataRead( uint unAddress)
{
union CURSOR_ADR POSITION;
uchar xdata ucDataRead;
POSITION.Adr = unAddress;
LCDCommand=CSRW; //设置光标位置
LCDDataWrite=POSITION.AdrByte.AdrL;
LCDDataWrite=POSITION.AdrByte.AdrH;
LCDCommand=MREAD; //读显存数据
ucDataRead= LCDDataRead;
return(ucDataRead);
}
/*********************************************************
* 函数名称: SED1335DataWrite() *
* 函数用途: 写显存 *
* 输入参数: *
* unAddress:内存单元地址 *
* ucData:写入的数据 *
* 输出参数: 无 *
* *
***********************************************************/
void SED1335DataWrite( uint unAddress , uchar unData)
{
union CURSOR_ADR POSITION;
POSITION.Adr = unAddress;
LCDCommand=CSRW; //设置光标位置
LCDDataWrite=POSITION.AdrByte.AdrL;
LCDDataWrite=POSITION.AdrByte.AdrH;
LCDCommand=MWRITE; //写显存数据
LCDDataWrite=unData;
}
/*********************************************************
* 函数名称: LCDClr() *
* 函数用途: LCD清屏 *
* 输入参数: *
* unStartRow : 清屏区域的首行 *
* unEndRow : 清屏区域的末行 *
* 输出参数:无 *
* *
***********************************************************/
void LCDClr( uint unStartRow , uint unEndRow )
{
uint idata ucCounter;
union CURSOR_ADR idata POSITION;
POSITION.Adr = unStartRow * 40 ;
LCDCommand=CSRW; //光标位置指向内存首地址
LCDDataWrite= POSITION.AdrByte.AdrL;
LCDDataWrite= POSITION.AdrByte.AdrH;
ucCounter = (unEndRow -unStartRow + 1) * 40;
LCDCommand = CSRDIR_RIGHT;
LCDCommand = MWRITE; //内存单元清零
while(ucCounter--!= 0)
LCDDataWrite = 0x00;
return;
}
/**********************************************************************
* 函数名称: RegionClr() *
* 函数用途: 区域清屏 *
* 输入参数: *
* unStartRow : 清屏区域的左上角的行坐标 *
* ucStartColumn : 清屏区域的左上角的列坐标 *
* 输出参数:无 *
* *
***********************************************************************/
void RegionClr( uchar ucStartRow , uchar ucStartColumn , uchar ucLength , uchar ucWidth)
{
uchar idata ucRowCounter;
uchar idata ucColumnCounter;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -