📄 tg12232e.c
字号:
/****************************************Copyright (c) ****************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**―――File Info――――――――――――――――――――――――――――――――――――――
** File name: TG12232E.h
** Last modified Date: 2006年11月13日
** Last Version: V1.0
** Descriptions: TG12232E液晶显示器驱动文件,实现LCD驱动程序
**
**――――――――――――――――――――――――――――――――――――――――――――――
** Created by: 郭敏辉
** Created date: 2006年11月13日
** Version: V1.0
** Descriptions: TG12232E液晶显示器驱动文件,实现LCD驱动程序
**
**――――――――――――――――――――――――――――――――――――――――――――――
** Modified by: 黄钦宁
** Modified date: 2007-04-13
** Version: V2.0
** Descriptions:
**
*******************************************************************************************/
#include "main.h"
#include "TG12232E.h"
#include <stdarg.h>
#include <stdio.h>
/*******************************************************************************************
**函数名称: void LCD_Init(void)
**函数功能: LCD初始化
**入口参数: 无
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_TimeDly(uint16 Time)
{
OSTimeDly(Time);
}
/*******************************************************************************************
**函数名称: void LCD_Init(void)
**函数功能: LCD初始化
**入口参数: 无
**返 回 值: 无
**说 明:
*******************************************************************************************/
int32 Spi_Handles ; // SPI句柄
void LCD_Init(void)
{
/* 初始化SPI接口 */
Spi_Handles=dopen("SPI0",O_RDWR,OCCUPY); // 以独占方式打开SPI 设备
if(Spi_Handles <0) // dopen成功,句柄将大于0
{
Spi_Handles = getlasterr(Spi_Handles); // 查看错误状态
while(1)
{
OSTimeDly(OS_TICKS_PER_SEC);
}
}
//diocontrol(Spi_Handles,SPI_SELDEVICE,(void*)GPIOA1);
diocontrol(Spi_Handles,SPI_SCKPSET,(void*)SPISCK_L);
diocontrol(Spi_Handles,SPI_OPMOD,(void*) SPISIMPLEX); // 数据单向模式
//液晶IO口初始化
gpio_clr(LCD_CS);
gpio_set(LCD_RST); // LCD模块复位
gpio_clr(LCD_RST);
LCD_TimeDly(1);
gpio_set(LCD_RST);
LCD_DisplaySwitch(1,0,0);
LCD_Clear();//清屏
}
/*******************************************************************************************
**函数名称: void LCD_Write(uint8 *SndDatBuff,uint16 length)
**函数功能: 向LCD写数据
**入口参数: uint8 *SndDatBuff 要写入数据地址的指针
** uint16 length 要写入数据的长度
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_Write(uint8 *SndDatBuff,uint16 length)
{
gpio_clr(LCD_CS); // 片选LCD
gpio_set(LCD_CS);
dwrite(Spi_Handles,(char *)SndDatBuff,length);
gpio_clr(LCD_CS);
}
/*******************************************************************************************
**函数名称: void LCD_SendControl(uint8 Data)
**函数功能: 发送一个控制字节
**入口参数: Data 发送控制命令。
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_SendControl(uint8 Data)
{
uint8 Buff[3];
Buff[0]=LCD_WriteCommand;
Buff[1]=Data&0xF0;
Buff[2]=Data<<4;
LCD_Write((uint8 *)Buff,3);
LCD_TimeDly(2);
}
/*******************************************************************************************
**函数名称: void LCD_SendData(uint8 Data)
**函数功能: 发送一个显示数据
**入口参数: Data 发的显示数据。
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_SendData(uint8 Data)
{
uint8 Buff[3];
Buff[0]=LCD_Write_Data;
Buff[1]=Data&0xF0;
Buff[2]=Data<<4;
LCD_Write((uint8 *)Buff,3);
}
/*******************************************************************************************
**函数名称: LCD_SendStr(uint8 Row,uint8 Col,uint8 *String)
**函数功能: 设定LCD显示的起始位置
**入口参数: x x轴位置
y y轴位置
**返 回 值: TRUE 设定成功;FALSE 设定失败。
**说 明:
*******************************************************************************************/
uint8 LCD_SetPos(uint8 x,uint8 y)
{
if ((x < 2) && (y < 8)) // 汉字字符为2行7.5列(汉字必须偶数对齐)
{
LCD_SendControl((0x80+(x*16+y)));
return TRUE; // 成功返回
}
else
return FALSE; // 失败返回
}
/*******************************************************************************************
**函数名称: LCD_SendStr(uint8 x,uint8 y,char *fmt,...)
**函数功能: 指定位置显示字符串
**入口参数: x x轴位置
y y轴位置
char *fmt 发送的数据指针
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_SendStr(uint8 x,uint8 y,char *fmt,...)
{
va_list ap;
char String[256];
uint8 *StringData;
va_start(ap,fmt);
vsprintf(String,fmt,ap); // 转换格式
va_end(ap);
StringData=(uint8 *)String;
if (LCD_SetPos(x, y)==TRUE)
{
while(*StringData)
LCD_SendData(*StringData ++);
}
}
/*******************************************************************************************
**函数名称: void LCD_Clear(void)
**函数功能: 清屏
**入口参数:
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_Clear(void)
{
LCD_SendControl(Display_Clear);
}
/*******************************************************************************************
**函数名称: void LCD_DisplaySwitch(uint8 D,uint8 C,uint8 B)
**函数功能: 显示状态开/关
**入口参数: D=0: 整体显示OFF D=1: 整体显示ON
** C=0: 游标OFF C=1: 游标ON
** B=0: 光标位置反白OFF B=1: 光标位置反白ON
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_DisplaySwitch(uint8 D,uint8 C,uint8 B)
{
LCD_SendControl((0x08+(D<<2)+(C<<1)+(B<<0)));
}
/*******************************************************************************************
**函数名称: void LCD_CurDispShift(uint8 y,int8 Num)
**函数功能: 设定光标的移动与显示的移位控制位
**入口参数: CS=0 光标的移动; CS=1 显示的移动.
** int8 Num 移动的位数; Num>0 右移Num; Num<0 左移Num.
**返 回 值: 无
**说 明:
*******************************************************************************************/
void LCD_CurDispShift(uint8 CS,int8 Num)
{
if(Num>0) //右移
{
while(Num--)
LCD_SendControl((0x10+(CS<<3)+(1<<2)));
}
else
{
Num=(-1)*Num;
while(Num--)
LCD_SendControl((0x10+(CS<<3)+(0<<2)));
}
}
/*******************************************************************************************
** End Of File
*******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -