⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcm320240.h

📁 320240
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -