📄 lcm320240.h
字号:
#ifndef __LCD_320240_H_
#define __LCD_320240_H_
#endif
#include "ziku.h"
#define uchar unsigned char //变量类型标识的宏定义
#define uint unsigned int
sbit LCD_WR=P3^0;
sbit LCD_RD=P3^1;
sbit LCD_CS=P3^2;
sbit LCD_A0=P3^3;
sbit LCD_RST=P3^4;
#define LCM_DATA P2
//显示缓存分配
#define BasePart1 0x0000 //第一屏地址 0X0000 占用8K空间
#define BasePart2 0x2580 //第二屏地址 0X4000 占用8K空间
#define BasePart3 0x4b00 //第三屏地址 0X8000 占用2K空间
#define BasePart4 0x7080 //第四屏地址 0X0000 占用2K空间
//初始化参数配置数组
//systemset
uchar code ParaSysTable8[]= { 0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
//scroll 一区显示240
uchar code ParaScrTableA[]= {0x00,0x00,0xc8,0x80,0x25,0xF0,0x00,0x4b,0x80,0x70};
//f0
#define SystemSet 0x40 //1335控制器定义
#define Scroll 0x44 //显示域设置
#define SleepIn 0x53 //休闲模式设置
#define DispOn 0x59 //显示状态设置开
#define DispOff 0x58 //
#define Ovlay 0x5b //显示合成设置
#define HdotScr 0x5a //点位移设置
#define CsrForm 0x5d //光标形状设置
#define CgramAdr 0x5c //CGRAM首地址设置
#define CsrDirR 0x4c //光标移动方向
#define CsrDirL 0x4d
#define CsrDirU 0x4e
#define CsrDirD 0x4f //光标向下移动
#define CsrW 0x46 //设置光标地址
#define CsrR 0x47 //读出光标地址
#define mWrite 0x42 //显示数据写入
#define mRead 0x43
#define Busy 0x40 // 忙状态标志位0b0100 0000
#define paraP9 0x28 // 相对于320 X 240 =40显示为40行
//##################################################################################
//函数声明
void LcmInition( void ); // 函数1.初始化子程序
void WriteData( uchar dataW ); // 函数2.写参数及显示数据子程序
uchar ReadDataLcm( void ); // 函数3.读参数及显示数据子程序
void WriteCommand( uchar CommandByte ); // 函数4. 写指令代码子程序
void Delay( uint ); // 函数5.延时子程序
void DelayMs(uint tt); // 函数6.长延时程序
void PutCdotInGraph( uint Ox, uchar Oy, uchar Cnumber,uchar DotWidth,uchar att);
// 函数7.单个汉字写入子程序(图形方式)
void LcmClear( void ); // 函数8. 清显示 32K RAM区(清屏)子程序
void Locatexy(uchar x,uchar y, uchar attribs);
// 函数9.光标位定位
uchar dprintf(uchar x,uchar y, char code *ptr, uchar att);
// 函数10.ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数
void Point(uint Px, uchar Py, uchar attr,uchar qu );
// 函数11.绘点子程序
void Linexy(uint x0,uchar y0,uint xt,uchar yt,uchar att,uchar qu);
// 函数12.画线。任意方向的斜线,直线数学方程 aX+bY=1
void Rectangle( uint X0, uchar Y0, uint wide,uchar hight,uchar att,uchar qu );
// 函数13.矩形绘制函数
void Sample3( void );
void circle(uint Ox,uchar Oy,uchar Rx,uchar attr,uchar qu);
// 函数14.画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2
void RollLaft( uchar,uchar ); // 函数15.滚动往左
void Rollright( uchar,uchar); // 函数16.滚动往右
void RollDown( uchar,uchar ); // 函数17.滚动往下
void RollUp( uchar,uchar ); // 函数18.滚动往上
void TextDisp( uchar Ox,uchar Oy, uchar code *ptr );
// 函数19.文本方式下的西文字符串显示,本函数只写入第3显示区
void triangle( uint X0, uchar Y0, uint X1, uchar Y1,uint X2, uchar Y2,uchar att,uchar qu );
// 函数20.三角形绘制函数
/*===========写指令代码子函数==========*/
void WriteCommand(unsigned char cmdcode)
{
LCD_CS=0; //选通
LCD_A0=1; //1为写命令或读数据
LCD_WR=0;
LCD_RD=1; //确定读信号不起作用
LCM_DATA=cmdcode; //向1335中写入指令代码
LCD_WR=1;
LCD_CS=1;
}
/*===========写数据子函数============*/
void WriteData(unsigned char Dispdata)
{
LCD_CS=0; //选通
LCD_A0=0; //0为写数据、参数和读忙标志
LCD_RD=1; //确定读信号不起作用
LCM_DATA=Dispdata; //向1335中写入指令代码
LCD_WR=0;
LCD_WR=1;
LCD_CS=1;
}
// 读参数及显示数据子程序
// 读出的参数 LcmRdataPort
//******************************************************
uchar ReadDataLcm( void )
{
uchar Lcmdat;
LCM_DATA=0xff;
LCD_CS=0; //选通
LCD_A0=1; //0为写数据、参数和读忙标志
LCD_RD=0; //
LCD_WR=1;
Lcmdat=LCM_DATA;
LCD_RD=1;
LCD_CS=1;
return Lcmdat;
}
//####################函数1.初始化子程序#####################################################
//
// 初始化子程序 对SED1335控制器进行初始化
// 参数
//******************************************************************
void LcmInition( void )
{
uchar i;
WriteCommand( SystemSet ); // 系统参数设置0x40
for (i=0;i<8;i++)
{
WriteData( ParaSysTable8[i] ); //
}
WriteCommand(Scroll); //设定显示区域起始地址
for (i=0;i<10;i++)
{
WriteData( ParaScrTableA[i] );
}
WriteCommand( HdotScr ); // 写入点位移指令代码
WriteData( 0 ); // 写入P1参数
WriteCommand( Ovlay ); // 显示合成方式设置
WriteData( 0x04 ); // 0000 0100 显示一区图形,三区文本属性,二重"或"合成
WriteCommand( DispOn ); // 显示状态设置 为开显示
WriteData( 0x54 ); // 显示 1~4 区开显示,光标关显示,且不闪烁
}
/*==============================================================================
滚动演示程序段
使用SED1335 等的屏幕滚动功能, 可以实现逐点滚动的显示效果. 这个效果的实现, 在
水平方向是依赖于指令HDOT SET的支持. 我们可以在下面的演示程序中看到HDOT SET指
令的使用方法.
==============================================================================*/
// 第一显示区向左滚动
void RollLaft( void )
{
uchar tempI,jj=25;
uint iTemp=0;
while(jj--) {
for(tempI=0;tempI<8;tempI++) {
WriteCommand( HdotScr ); // 写入HDOT SET 指令
WriteData( tempI ); // 写入参数
DelayMs(150); // 调延时子程序
}
iTemp ++;
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( (uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (uchar)(iTemp /256) ); // 写入参数
}
}
// 第一显示区向右滚动
void Rollright( void )
{
uchar tempI,jj=25;
uint iTemp=24;
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
tempI = 8;
WriteCommand( Scroll ); // 显示区域(起点)设置
WriteData( (uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (uchar)(iTemp /256) ); // 写入参数
while( tempI-- ) {
WriteCommand( HdotScr ); // 写入HDOT SET 指令
WriteData( tempI ); // 写入参数
DelayMs(150); // 调延时子程序
}
iTemp--;
}
}
// 第一显示区向下滚动
void RollDown( void )
{
uchar jj = 50; // 演示32次
uint iTemp=paraP9*50;
while(jj--) {
iTemp -= paraP9;
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( (uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (uchar)(iTemp /256) ); // 写入参数
DelayMs(150); // 调延时子程序
}
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( 0 ); // 写入参数
WriteData( 0 ); // 写入参数
DelayMs(30);
}
// 第一显示区向上滚动
void RollUp( void )
{
uint iTemp=0;
uchar jj = 50; // 演示30次
while(jj--) {
iTemp += paraP9;
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( (uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (uchar)(iTemp /256) ); // 写入参数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -