📄 htlcd_spi.c
字号:
#include "73x_lib.h"
#include "73x_type.h"
#include "div.h"
#include "HTLCD_SPI.h"
/**********************************************************************************
函数功能:初始化LCDIO口
入口: 无
出口: 无
**********************************************************************************/
void InitHTLCDIOPort(void)
{
GPIO_InitTypeDef GPIO0_InitStructure;
GPIO_InitTypeDef GPIO4_InitStructure;
GPIO_InitTypeDef GPIO5_InitStructure;
//P0x
CFG_PeripheralClockConfig(CFG_CLK_GPIO0, ENABLE);
GPIO0_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO0_InitStructure.GPIO_Pins = TO_LCD_PWR | TO_LCD_LED;
GPIO_Init(GPIO0, &GPIO0_InitStructure);
//P4x
CFG_PeripheralClockConfig(CFG_CLK_GPIO4, ENABLE);
GPIO4_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO4_InitStructure.GPIO_Pins = TO_LCD_CS|TO_LCD_CLK;
GPIO_Init(GPIO4, &GPIO4_InitStructure);
//P5x
CFG_PeripheralClockConfig(CFG_CLK_GPIO5, ENABLE);
GPIO5_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO5_InitStructure.GPIO_Pins = TO_LCD_DATA;
GPIO_Init(GPIO5, &GPIO5_InitStructure);
/*
while(1)
{
CLOSE_LCD_BAT;
OPEN_LCD_BAT;
LIGHT_ON;
LIGHT_OFF;
HTLCD_CS_Ctrl(Bit_SET);
HTLCD_CS_Ctrl(Bit_RESET);
HTLCD_CLK_Ctrl(Bit_SET);
HTLCD_CLK_Ctrl(Bit_RESET);
HTLCD_DATA_Ctrl(Bit_SET);
HTLCD_DATA_Ctrl(Bit_RESET);
}
*/
}
/**********************************************************************************
函数功能:写1个指令到LCD
入口: 指令内容
出口: 无
**********************************************************************************/
void HTLCDWriteACommand(INT32U command)
{
INT8U i;
HTLCD_CS_Ctrl(CLR_BIT); //CS的数据口置低
for(i=0;i<=11;i++) //命令只取最低12位
{
HTLCD_CLK_Ctrl(CLR_BIT); //CLK的数据口
if((command&0x0800)) //先高位再低位
HTLCD_DATA_Ctrl(SET_BIT);
else
HTLCD_DATA_Ctrl(CLR_BIT);
asm("nop");
asm("nop");
HTLCD_CLK_Ctrl(SET_BIT); //CLK的数据口
asm("nop");
asm("nop");
command<<=1;
}
HTLCD_CS_Ctrl(SET_BIT);
HTLCD_DATA_Ctrl(SET_BIT);
}
/**********************************************************************************
函数功能:使LCD写数据模式
入口: 指令内容
出口: 无
**********************************************************************************/
void HTLCDInWriteMode(INT8U LCD_RAM_ADDR)
{
INT32U i,command;
command=WRITE_ID|((INT32U)LCD_RAM_ADDR);
for(i=0;i<=9;i++) //只取最低10位
{
HTLCD_CLK_Ctrl(CLR_BIT); //CLK的数据口
if((command&0x0200)) //先高位再低位
HTLCD_DATA_Ctrl(SET_BIT);
else
HTLCD_DATA_Ctrl(CLR_BIT);
asm("nop");
asm("nop");
HTLCD_CLK_Ctrl(SET_BIT); //CLK的数据口
asm("nop");
asm("nop");
command<<=1;
}
HTLCD_DATA_Ctrl(SET_BIT);
}
/**********************************************************************************
函数功能:写数据到LCD
入口:
LCD_RAM_ADDR----------HTLCD LCD RAM 地址(0-95)
DATA_ADDR-------------显示数据的缓冲区地址
DATA_LENGTH-----------显示数据的长度
出口: 无
**********************************************************************************/
void HTLCDWriteMultiData(INT8U LCD_RAM_ADDR,INT8U *DATA_ADDR,INT32U DATA_LENGTH)
{
INT32U i,j;
INT8U DATA_BYTE;
HTLCD_CS_Ctrl(CLR_BIT);
HTLCDInWriteMode(LCD_RAM_ADDR); //使HTLCD进入写数据模式
for(i=0;i<DATA_LENGTH;i++)
{
DATA_BYTE=*(DATA_ADDR+i);
for(j=0;j<=7;j++)
{
HTLCD_CLK_Ctrl(CLR_BIT); //WR的数据口
if((DATA_BYTE&0x01)) //显示数据顺序:D0/D1/D2/D3
HTLCD_DATA_Ctrl(SET_BIT); //DATA的数据口
else
HTLCD_DATA_Ctrl(CLR_BIT); //DATA的数据口
asm("nop");
asm("nop");
HTLCD_CLK_Ctrl(SET_BIT);
asm("nop");
asm("nop");
DATA_BYTE>>=1;
}
}
HTLCD_CS_Ctrl(SET_BIT);
HTLCD_DATA_Ctrl(SET_BIT);
}
/**********************************************************************************
函数功能:工作模式下初始化LCDIO口
入口: 无
出口: 无
**********************************************************************************/
void Init_HTLCD_WorkStatus(void) /*"正常情况下初始化HTLCD"*/
{
InitHTLCDIOPort();
//HT_LCD_POWER_DIRECTION_PORT=1; //HTLCD电源控制的方向口
HTLCD_PWR_Ctrl(SET_BIT); //HTLCD电源控制的数据口
CLOSE_LCD_BAT;
HTLCD_SYS_DIS(); //关振荡器和偏压发生器
HTLCD_LCD_OFF(); //关LCD显示
HTLCD_RC_32K(); //选择片上RC振荡器
HTLCD_SYS_EN(); //开振荡器"*/
HTLCD_LCD_ON(); //开LCD显示
}
/**********************************************************************************
函数功能:低功耗情况下初始化HTLCD
入口: 无
出口: 无
**********************************************************************************/
void Init_HTLCD_PwrDownStatus(void) //低功耗情况下初始化HTLCD
{
InitHTLCDIOPort();
//HT_LCD_POWER_DIRECTION_PORT=1; //HTLCD电源控制的方向口
//HTLCD_PWR_Ctrl(CLR_BIT);
OPEN_LCD_BAT;
HTLCD_SYS_DIS(); //关振荡器和偏压发生器
HTLCD_LCD_OFF(); //关LCD显示
HTLCD_RC_32K(); //选择片上RC振荡器
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -