📄 lm3229.c
字号:
/********************************************************************************************************
/**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: T6963C 128X128.c
**创 建 人: LUCKY 论坛ID muyuyuzhong
**最后修改日期: 2007年11月28日
**描 述: 基于T6963C图形液晶芯片的 LM4265 128x128液晶驱动,做简单修改通用适用基于T6963C的图形液晶
**
**说 明 :本来是想写LM3229 240x128的,但是LM3229只显示了上班屏幕.所以改成了LM4265了
** 图形部分还没有写,因为还没找到合适的字模提取软件,也许是我还不会用,呵呵
**
**
**注 意:T6963C的字符集不是ASCII,一个8x8的字符点阵的字节顺序是由上而下的 高位在左 低位在右
*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称:
** 功能描述:
**
** 输 入:
**
** 输 出:
**
** 全局变量:
** 调用模块:
**
** 作 者:
** 日 期:
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <reg51.h>
#include <intrins.h>
#ifndef UINT8
#define UINT8 unsigned char
#endif
#ifndef UINT16
#define UINT16 unsigned int
#endif
#ifndef INT8
#define INT8 signed char
#endif
#ifndef CHAR
#define CHAR unsigned char
#endif
#ifndef BOOL
#define BOOL bit
#endif
/*********************************************************************************************************
** T6963C定义模块
**
********************************************************************************************************/
/*********************定义液晶接口***********************/
sbit LCD_CD = P3^7 ; //LCD_CD = 1 写命令LCD_CD = 0 写数据
sbit LCD_RD = P3^6 ;
sbit LCD_WR = P3^5 ;
#define LCD_OutPort P1
/*--------------------------------------------------------*
*定义T6963C的状态字检测
*---------------------------------------------------------*/
#define CHECK_01 0x03 //检测0-1位,位0指令读写状态,位1数据读写状态:1 = 准备好 ,0 = 忙
#define CHECK_2 0x04 //检测2位,数据自动读状态:1 = 准备好 ,0 = 忙
#define CHECK_3 0x08 //检测3位,数据自动写状态:1 = 准备好 ,0 = 忙
#define CHECK_6 0x60 //检测6位,屏读/屏拷贝出错状态:1 = 出错,0 = 正确
#define COLUMN 16 //定义列为30,作为文本显示区宽度 、
/***************************T6963C的字符表******************************************
**----------------------------------------------------------------------------------
**0 0x00 0x01 0x02 0x03 0x04 0x03 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
** 空格 ! " # $ % & ‘ ( ) * + , - . /
**----------------------------------------------------------------------------------
**1 0x10 0x11 0x12 0x13 0x14 0x13 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f
** 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
**---------------------------------------------------------------------------------
**2 0x20 0x21 0x22 0x23 0x24 0x23 0x26 0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f
** @ A B C D E F G H I J K L M N O
**----------------------------------------------------------------------------------
**3 P Q R S T U V W X Y Z [ 反/ ] ^ _
**----------------------------------------------------------------------------------
**4 ' a b c d e f g h i j k l m n o
**----------------------------------------------------------------------------------
**5 p q r s t u v w x y z { 直| } ~ 空格
**----------------------------------------------------------------------------------
** 0x0 1 5 a f
**其余见T6963C手册
/*********************************************************************************************************
** 函数名称: CheckState
** 功能描述: 读状态字,在读写数据之前必须要检测状态.在每一次对T6963C的软件操作之前,都要进行判"忙.
** 只有在不忙的状态下计算机对T6963C的操作才有效
**
** 输 入: bitCheck 检测相应的位
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: 无
** 说明 : CHECK_01 检测0-1位,位0指令读写状态,位1数据读写状态:1 = 准备好 ,0 = 忙
** CHECK_2 检测2位,数据自动读状态:1 = 准备好 ,0 = 忙
** CHECK_3 检测3位,数据自动写状态:1 = 准备好 ,0 = 忙
** CHECK_6 检测6位,屏读/屏拷贝出错状态:1 = 出错,0 = 正确
** 在仿真中,要关掉检测,实际中应打开
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void CheckState(UINT8 bitCheck)
{
/***********************************
//仿真时关掉状态检测
UINT8 status;
LCD_CD = 1;
do
{
LCD_RD = 0;
status = LCD_OutPort;
LCD_RD = 1;
status = bitCheck & status;
}while( status != bitCheck);
********************************/
}
/*********************************************************************************************************
** 函数名称: WriteData
** 功能描述: 写数据到T6963C
**
** 输 入: dat 传输数据变量
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: void CheckState(UINT8 bitCheck)
** 说明 : 无
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteData(UINT8 dat) //写数据
{
CheckState(CHECK_01); //检测状态位0 1
LCD_CD = 0;
LCD_WR = 0;
LCD_OutPort = dat;
LCD_WR = 1;
}
/*********************************************************************************************************
** 函数名称: WriteCommand
** 功能描述: 写命令到T6963C
**
** 输 入: cmd 传输命令变量
**
** 输 出: 无
**
** 全局变量: LCD_CD
** LCD_WR
** 调用模块: void CheckState(UINT8 bitCheck)
** 说明 : 无
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteCommand(UINT8 cmd) //写命令
{
CheckState(CHECK_01); //检测状态位0 1
LCD_CD = 1;
LCD_WR = 0;
LCD_OutPort = cmd;
LCD_WR = 1;
}
/*********************************************************************************************************
** 函数名称: ReadData
** 功能描述: 从T6963C读数据到MCU
**
** 输 入: 无
**
** 输 出: dat 返回读出的数据
**
** 全局变量: 无
** 调用模块: void CheckState(UINT8 bitCheck)
** 说明 : 无
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 ReadData(void) //读数据
{
UINT8 dat;
CheckState(CHECK_01); //检测状态位0 1
LCD_CD = 0;
LCD_RD = 0;
dat = LCD_OutPort;
LCD_RD = 1; ;
return dat;
}
/*********************************************************************************************************
** 函数名称: WriteOneDataOneCmd
** 功能描述: 写有一个数据,一个命令
**
** 输 入: dat 传数据
** cmd 传命令
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: vvoid WriteData(UINT8 dat)
** void WriteCommand(UINT8 cmd)
** 说明 : 无
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteOneDataOneCmd(UINT8 dat, UINT8 cmd)
{
WriteData(dat);
WriteCommand(cmd);
}
/*********************************************************************************************************
** 函数名称: WriteTwoDataOneCmd
** 功能描述: 写有两个数据,一个命令
**
** 输 入: data1 传数据1
** data2 传数据1
** cmd 传命令
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: vvoid WriteData(UINT8 dat)
** void WriteCommand(UINT8 cmd)
** 说明 : 当data1和data2组合传输一个16位的参数时,data1为低八位,data2为高八位
** 作 者: LUCKY
** 日 期: 2007 - 11 -20
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteTwoDataOneCmd(UINT8 data1, UINT8 data2, UINT8 cmd)
{
WriteData(data1);
WriteData(data2);
WriteCommand(cmd);
}
/*********************************************************************************************************
** 函数名称: LCD_Init
** 功能描述: 初始化液晶,设置文本图形
**
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: void WriteTwoDataOneCmd(UINT8 data1, UINT8 data2, UINT8 cmd)
** void WriteCommand(UINT8 cmd)
** 说明 : 当data1和data2组合传输一个16位的参数时,data1为低八位,data2为高八位
** 作 者: LUCKY
** 日 期: 2007 - 11 -20
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LCD_Init(void)
{
UINT8 data1,data2,cmd;
/*********************设置文本显示*****************************/
data1 = 0x00;
data2 = 0x00;
cmd = 0x40; //设置文本显示区首地址
WriteTwoDataOneCmd(data1,data2,cmd);
data1 = 0x10;
data2 = 0x00;
cmd = 0x41; //设置文本显示区宽度
WriteTwoDataOneCmd(data1,data2,cmd);
/*********************设置图形显示*****************************/
data1 = 0x00;
data2 = 0x08;
cmd = 0x42; //设置图形显示区首地址
WriteTwoDataOneCmd(data1,data2,cmd);
data1 = 0x1e;
data2 = 0x00;
cmd = 0x43; //设置图形显示区宽度
WriteTwoDataOneCmd(data1,data2,cmd);
/*********************设置图形显示*****************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -