#include "STM8S.h"
#include "LCD_Driver.h"
#include "delay.h"
/**************************************************
//--------*函数介绍* : disp_StrArry() 显示数组
//--------*输入参数* : addr:液晶地址 len:数组长度
Arry: 数组名称
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2014.05.13
**************************************************/
void disp_StrArry(uchar addr,uchar len ,uchar *Arry)
{
uchar i=0;
Lcd_Write_Data(CMD,Lcd_Basic_Format); //文本写入方式
Lcd_Write_Data(CMD,addr); //坐标
for(i=0; i<len; i++)
Lcd_Write_Data(DATA,Arry[i]);
}
/**************************************************
//--------*函数介绍* : Lcd_busy()
//--------*输入参数* : 无
//--------*输出参数* : 无
//--------*返 回 值* : busy
//--------*完成日期* : 2017.04.27
**************************************************/
BitStatus Lcd_busy(void)
{
BitStatus lcdbusy=RESET; //读LCD BF
BitStatus bit_status;
//u8 a;
GPIO_WriteLow(Lcd_Port,Lcd_Rs);
GPIO_WriteHigh(Lcd_Port,Lcd_Rw);
GPIO_WriteHigh(Lcd_Port,Lcd_En);
GPIO_Init(GPIOH, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);
delay_us(2);
/*a=GPIO_ReadInputData(Lcd_Data);
if((a&0x80)==1) busy=SET;*/
bit_status = GPIO_ReadInputPin(GPIOH, GPIO_PIN_4);//读DB7
if(bit_status == SET) //SET or RESET
{lcdbusy=SET;}
GPIO_Init(GPIOH, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_WriteLow(Lcd_Port,Lcd_En);
delay_us(5);
return(lcdbusy);
}
/**************************************************
//--------*函数介绍* : wr_lcd() LCD 写函数
//--------*输入参数* : dat_comm H:Data L:Command
content :数据
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2017.04.21
**************************************************/
void LCD_Data_Trim(u8 content)
{
u8 i;
u8 a[8]={0};
a[0]= content&0x01;
for(i=7;i>0;i--)
{
a[i]=(content>>i)&0x01;
}
DB0=a[0];
DB1=a[1];
DB2=a[2];
DB3=a[3];
DB4=a[4];
DB5=a[5];
DB6=a[6];
DB7=a[7];
}
void Lcd_Write_Data(Data_Flag Flag,u8 data)
{
while(Lcd_busy()==SET);
delay_us(500); //----如果出现数据不对的情况,有可能是延时短.例如 显示不对或者不显示
if(Flag==CMD) //是命令还是数据
GPIO_WriteLow(Lcd_Port,Lcd_Rs);
else
{
GPIO_WriteHigh(Lcd_Port,Lcd_Rs);
}
GPIO_WriteLow(Lcd_Port,Lcd_Rw);
GPIO_WriteLow(Lcd_Port,Lcd_En);
//GPIO_Write(Lcd_Data,data); //输出数据
LCD_Data_Trim(data);//--------输出数据
GPIO_WriteHigh(Lcd_Port,Lcd_En); //使能信号产生
delay_us(5);
GPIO_WriteLow(Lcd_Port,Lcd_En);
}
/**************************************************
//--------*函数介绍* : init_lcd() 液晶初始化
//--------*输入参数* : Format
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2017.04.27
**************************************************/
void Lcd_Configuration(u8 Format)
{
/************选择并口方式*******************/
GPIO_WriteHigh(Lcd_Port_1, Lcd_Psb);
/**************复位LCD***************/
GPIO_WriteLow(Lcd_Port_1, Lcd_Rst);
delay_us(300);
GPIO_WriteHigh(Lcd_Port_1, Lcd_Rst);
delay_us(300);
Lcd_Write_Data(CMD,Lcd_Mannerism_Format);
delay_us(500);
Lcd_Write_Data(CMD,Format); //基本指令操作
delay_us(500);
Lcd_Write_Data(CMD,Lcd_Close_Cursor);//显示开
delay_us(500);
//Lcd_Write_Data(CMD,Lcd_Clear);//清除LCD的显示内容
delay_us(1800);
}
/**************************************************
//--------*函数介绍* : clrram() 清DDRAM
//--------*输入参数* : 无
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2017.04.28
**************************************************/
void clrram (void)
{
Lcd_Write_Data(CMD,Lcd_Basic_Format); //基本指令操作
Lcd_Write_Data(CMD,Lcd_Clear);//清除LCD的显示内容
}
|