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

📄 lcd_12864.h

📁 51单片机控ADC(MAX197)采集数据
💻 H
📖 第 1 页 / 共 2 页
字号:
#include "hazicode.h"
#include"englishcode.h"
#include<absacc.h>

#define STX 0x02
#define ETX 0x03
#define EOT 0x04
#define ENQ 0x05
#define BS 0x08
#define CR 0x0D
#define LF 0x0A
#define DLE 0x10
#define ETB 0x17
#define SPACE 0x20
#define COMMA 0x2C

#define TRUE 1
#define FALSE 0

#define HIGH 1
#define LOW 0
 
#define LCMDW XBYTE[0x8000] //数据口
#define LCMCW XBYTE[0x8800] //命令口



// T6963C 命令定义
#define LC_CUR_POS 0x21 // 光标位置设置
#define LC_CGR_POS 0x22 // CGRAM 偏置地址设置
#define LC_ADD_POS 0x24 // 地址指针位置
#define LC_TXT_STP 0x40 // 文本区首址
#define LC_TXT_WID 0x41 // 文本区宽度
#define LC_GRH_STP 0x42 // 图形区首址
#define LC_GRH_WID 0x43 // 图形区宽度
#define LC_MOD_OR 0x80 // 显示方式逻辑或
#define LC_MOD_XOR 0x81 // 显示方式逻辑异或
#define LC_MOD_AND 0x82 // 显示方式逻辑与
#define LC_MOD_TCH 0x83 // 显示方式文本特征
#define LC_DIS_SW 0x90 // 显示开关D0=1/0:光标闪烁启用/禁用
// D1=1/0:光标显示启用/禁用
// D2=1/0:文本显示启用/禁用
// D3=1/0:图形显示启用/禁用
#define LC_CUR_SHP 0xA0 // 光标形状选择0xA0-0xA7表示光标占的行数
#define LC_AUT_WR 0xB0 // 自动写设置
#define LC_AUT_RD 0xB1 // 自动读设置
#define LC_AUT_OVR 0xB2 // 自动读/写结束
#define LC_INC_WR 0xC0 // 数据一次写地址加1
#define LC_INC_RD 0xC1 // 数据一次读地址加1
#define LC_DEC_WR 0xC2 // 数据一次写地址减1
#define LC_DEC_RD 0xC3 // 数据一次读地址减1
#define LC_NOC_WR 0xC4 // 数据一次写地址不变
#define LC_NOC_RD 0xC5 // 数据一次读地址不变
#define LC_SCN_RD 0xE0 // 屏读
#define LC_SCN_CP 0xE8 // 屏拷贝
#define LC_BIT_OP 0xF0 // 位操作



#define ulong unsigned long
#define uint  unsigned int 
#define uchar unsigned char

code uchar const uPowArr[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


// ASCII 字模宽度及高度定义
#define ASC_CHR_WIDTH  8
#define ASC_CHR_HEIGHT 16
// ASCII 字模显示为8*16	


#define CHAR_HEIGHT 16 //根据汉字大小设定CHAR_HIGHT
#define CHAR_LONG   16  //根据汉字大小设定CHAR_LONG

#define LCD_XMAX 128      //横向最多点数(选取FG12864液晶,横向最多128个点)
#define LCD_YMAX 64       //纵向最多点数(选取FG12864液晶,纵向最多64个点)  
                            //以上两个宏定义当液晶不同时则宏定义不同						
 
unsigned char  turnf[8] = {7,6,5,4,3,2,1,0};



uchar gCurRow,gCurCol; // 当前行列存储行高16 点,列宽8点
/************************************************/
/* 取当前行数据*/   // 当前行列存储行高16 点列宽8点
/************************************************/
uchar fnGetRow(void)
{
    return(gCurRow);
}
/************************************************/
/* 取当前列数据*/
/************************************************/
unsigned char fnGetCol(void)
{
    return(gCurCol);
}
 

/************************************************/
/* 状态位STA1,STA0判断读写指令和读写数据*/
/* 在读写数据或者写入命令前必须保证均为1 */
/************************************************/
unsigned char fnSTA01(void)
{
    uchar i;
    for(i=10;i>0;i--)
    {
        if((LCMCW & 0x03) == 0x03) // 读取状态
        {
            break;
        }
    }
    return(i); // 若返回零说明错误
}
/********************************************/
/* 检查STA2,如果STA2=1 为自动读状态*/
/*****************************************/
uchar fnSTA2(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((LCMCW & 0x04) == 0x04)
        {
            break;
        }
    }
    return(i); // 若返回零说明错误
}
/***********************************************/
/* 状态位STA3 判断STA3 = 1 数据自动写状态*/
/***********************************************/
unsigned char fnSTA3(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((LCMCW & 0x08) == 0x08)
        {
            break;
        }
    }
    return(i); // 若返回零说明错误
}
/************************************************/
/* 状态位STA6 判断STA6 =1 屏读/屏拷贝状态*/
/************************************************/
uchar fnSTA6(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((LCMCW & 0x40) == 0x40)
        {
            break;
        }
    }
    return(i); // 若返回零说明错误
}
/************************/
/* 写双参数的指令*/
/************************/
unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
{
    if(fnSTA01() == 0)
    {
        return 1;
    }
    LCMDW=uPar1;
    if(fnSTA01() == 0)
    {
        return 2;
    }
    LCMDW=uPar2;
    if(fnSTA01() == 0)
    {
        return 3;
    }
    LCMCW=uCmd;
    return(0); // 返回0 成功
}
/************************/
/* 写单参数的指令*/
/************************/
unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
{
    if(fnSTA01() == 0)
    {
        return 1;
    }
    LCMDW=uPar1;
    if(fnSTA01() == 0)
    {
        return 2;
    }
    LCMCW=uCmd;
    return(0); // 返回0 成功 
}
/************************/
/* 写无参数的指令*/
/************************/
unsigned char fnPR12(unsigned char uCmd)
{   
    if(fnSTA01() == 0)
    {
        return 1;
    }
   LCMCW=uCmd;
    return(0); // 返回0 成功
}
/************************/
/* 写数据*/
/************************/
unsigned char fnPR13(unsigned char uData)
{
    if(fnSTA3() == 0)
    {
        return 1;
    }
    LCMDW=uData;
    return(0); // 返回0 成功
}
/************************/
/* 读数据*/
/************************/
unsigned char fnPR2(void)
{
   // unsigned char temp;
    if(fnSTA01() == 0)
    {
         return 1; // 获取状态如果状态错
    }
    return(LCMDW); // 返回数据
}



/************************/
/* 设置当前地址*/   //RAM里
/************************/
void fnSetPos(unsigned char urow, unsigned char ucol)
{
    unsigned int iPos;
    iPos = (unsigned int)urow * 30 + ucol;   //?~~~~~~~~~~~~~~~~~~
    fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
    gCurRow = urow;
    gCurCol = ucol;
}
/**********************/
/* 设置当前显示行列*/
/**********************/
void cursor(unsigned char uRow, unsigned char uCol)
{
    //fnSetPos(uRow * 16, uCol);
      fnSetPos(uRow * ASC_CHR_HEIGHT, uCol);
}
/*********************/
/* 清屏*/
/*********************/
void LCDClr(void)
{
    unsigned int i;
    fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针为从零开始
    fnPR12(LC_AUT_WR); // 自动写
    //for(i=0;i<240*64/8;i++) // 清一屏
      for(i=0;i<LCD_XMAX*LCD_YMAX*2/ASC_CHR_WIDTH;i++) // 清一屏
    {
        fnSTA3();
       //fnPR13(0x55);//测试时用
        fnPR13(0x0); // 写数据实际使用时请将0x55 改成0x0
    }
    fnPR12(LC_AUT_OVR); // 自动写结束
    fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
    gCurRow = 0; // 置地址指针存储变量
    gCurCol = 0;
}
/************************/
/* LCM 初始化*/
/************************/
char LCDInit(void)
{
    if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
    {
        return (0xff);
    }
    fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
	//fnPR1(LC_TXT_WID,0x10,0x00); // 文本显示区宽度
    fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
    fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
    fnPR12(LC_CUR_SHP | 0x01); // 光标形状
    fnPR12(LC_MOD_OR); // 显示方式设置
    fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
    return(0);
}

/*======================*/
/* 延时*/
/*======================*/
void shortdelay(unsigned int tt)
{
    unsigned char i;
    while (tt)
    {
        i=100;
        while (i)
        {
            i--;
        }
    tt--;
    }
}
/*********************************
     单个字符的显示
**********************************/
void Disponechar(unsigned char x,unsigned char y, char character)
{
    unsigned char c1,cData;
    unsigned char j,uRow,uCol;
    
	c1=character;
    uRow = y;
    uCol = x;
    fnSetPos(uRow*ASC_CHR_HEIGHT,uCol);      //起点定位

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -