#include "Lcd12864.h"
//#include "delay.h"
#include "usart.h"
#include "softdelay.h"
//STM32驱动ST7920的12864 液晶(串行方式)
//最终修改时间:2014.3.27
/******************************************************************************************
* 文件名称 :12864.c
* 版权 :
* 模块名称 :stm32驱动的12864液晶的串行工作方式驱动程序
* cpu : stm32f103vet6 主频:72M
* 作者 :
* 创建日期 :2013-10-25
* 功能概要 :
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :读取端口状态有问题,亟待解决
添加了软件延时softdelay
修改了float数据显示问题
******************************************************************************************/
// void delayms(u16 time);
/******************************************************************************************
* 创建日期 :2014-2-24
:
* 修改说明 :根据PCB板的设计,将LCD12864的控制口改为
CS-PC10; RST-PC11; SID-PC12; SCLK-PC7
******************************************************************************************/
/******************************************************************************************
* 创建日期 :2014-3-27
* 修改说明 : 修改了RTC实时时钟显示函数 DisInt_time(uchar X,uchar Y,long int num,int zero)
******************************************************************************************/
void Lcd12864_Config_OUT(void)
{
// SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void Lcd12864_Config_IN(void)
{
// SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
GPIO_InitStructure.GPIO_Pin = SID;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/******************************************************************************************
* 函数名称 :Lcd_init
* 功能描述 :初始化LCD
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2013-9-22
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void Lcd12864_Init(void)
{
Lcd12864_Config_OUT();
RST_L;
delayms(100);
RST_H ;
// PSB_L; //选择串行数据口
/****************lcd***********************/
delayms(2);
write_com(0x30); //30--基本指令动作
delayms(5);
write_com(0x0c); //光标右移画面不动
delayms(5);
write_com(0x01); //清屏
delayms(5); //清屏时间较长
write_com(0x06); //显示打开,光标开,反白关
delayms(5);
}
/******************************************************************************************
* 函数名称 :write_com
* 功能描述 :写指令
* 参数 :
*
* 返回值 :
* 作者 :
* 创建日期 :2013-9-22
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void write_com(uchar cmdcode)
{
CS_H;
//CheckBusy();
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delayms(2);
}
//uchar read_com(void) //有问题
//{
// int Hdata,Ldata;
// CS_H;
// sendbyte(0xfc);
// Hdata= receivebyte () ;
// Ldata= receivebyte () ;
// // data=Hdata-Ldata;
// return Hdata;
//}
//void wait_busy(void) //有问题
//{
// uchar flag;
// while(1){
// flag=read_com();
// printf("%d \n",flag);
// if(!(flag&&0x80))break;
// }
// Lcd12864_Config_OUT();
//}
/******************************************************************************************
* 函数名称 :write_dat
* 功能描述 :写数据
* 参数 :
*
* 返回值 :
* 作者 :
* 创建日期 :2013-9-22
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void write_dat(uchar Dispdata)
{
CS_H;
// CheckBusy();
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delayms(2);
}
/******************************************************************************************
* 函数名称 :sendbyte(uchar zdata)
* 功能描述 :发送一个字节
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2013-9-22
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void sendbyte(uchar zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80) SID_H;
else SID_L;
SCLK_L;
SCLK_H;
}
}
uchar receivebyte (void)
{
unsigned int i;
uchar zdata=0;
Lcd12864_Config_IN();
for(i=0; i<8; i++)
{
if(SID)zdata|=0x01;
zdata=zdata<<1;
SCLK_L;
SCLK_H;
}
return zdata;
}
/******************************************************************************************
* 函数名称 :Clr_Scr
* 功能描述 :清屏函数
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2009-10-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void Clr_Scr(void)//清屏函数
{
write_com(0x01);
}
/******************************************************************************************
* 函数名称 : lcd_pos(uchar X,uchar Y)
* 功能描述 :设置LCD显示的起始位置,X为行,Y为列
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
write_com(pos); //显示地址
}
/******************************************************************************************
* 函数名称 :display_char
* 功能描述 :英文字符串显示函数
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* �