/**************************************
带字库LCD12864操作源代码
**************************************/
//文件12864.h
#ifndef _DSP12864_H_
#define _DSP12864_H_
//#include "dsp12864.h"
#define P_184RS PC5_OUT
#define P_184RW PC4_OUT
#define P_184EN PC3_OUT
//-----X 以字为单位 共8个字-----
#define LX1 0
#define LX2 1
#define LX3 2
#define LX4 3
#define LX5 4
#define LX6 5
#define LX7 6
#define LX8 7
//-----Y-------------------------
#define LY1 1
#define LY2 2
#define LY3 3
#define LY4 4
//=========================================
uint8 CheckLcdBusy(void);
void WriteDataLCD(uint8 WDLCD);
void WriteCommandLCD(uint8 WCLCD);
uint8 ReadDataLCD(void);
extern void LCDInit(void);
extern void LCDClear(void);
extern void DisplayOneChar(uint8 X, uint8 Y, uint8 DData);
extern void DisplayListChar(uint8 X, uint8 Y, uint8 *DData);
extern void DisplayImage(uint8 *DData);
#endif
//文件12864.C
#include "global.h"
#include "dsp12864.h"
#define LCD_RS_HIGH P_184RS = 1 //RS 数据 命令切换
#define LCD_RS_LOW P_184RS = 0
#define LCD_RW_HIGH P_184RW = 1 //Read
#define LCD_RW_LOW P_184RW = 0 //Write
#define LCD_EN_HIGH P_184EN = 1 //ENABLE
#define LCD_EN_LOW P_184EN = 0
#define LcdBusyBit 0x80 //用于检测LCD状态字中的Busy标识
#define DLY5MS 125
//#define DLY1MS 25
#define DLY100US 2
//延时函数5MS ok
void DelayLcdMs(uint8 TDly)
{
uint8 i,j ;
for(i=100;i>0;i--)
for(j=TDly;j>0;j--);
}
//*************************************
// 函数名称:LcdDat
// 函数功能:写数据到IO
// 入口参数:12864的数据
// 返回值 :无
//***************************************
void WriteLcdIo(uint8 Dat)
{
uint8 Tmp ;
Tmp = Dat & 0xfc;
if(Dat & 0x02)
{
Tmp |= 0x01 ;
}
PD_ODR = Tmp ;
if(Dat & 0X01)
{
PC7_OUT = 1 ;
}
else
{
PC7_OUT = 0 ;
}
}
//*************************************
// 函数名称:ReadLcdIo
// 函数功能:读LCD IO 的数据
// 入口参数:无
// 返回值 :LCD的数据
//***************************************
void SetLcdIo(void)
{
PD_ODR = 0xff ;
PC7_OUT = 1 ;
_asm("nop");_asm("nop");_asm("nop");_asm("nop");
_asm("nop");_asm("nop");_asm("nop");_asm("nop");
}
uint8 ReadLcdIo(void)
{
uint8 Tmp=0 ;
Tmp = PD_IN & 0Xfc ;
if(PD_IN & 0x01)
{
Tmp |= 0X02 ;
}
if(PC_IN & 0x80)
{
Tmp |= 0X01 ;
}
return Tmp ;
}
//*************************************
// 函数名称:CheckLcdBusy
// 函数功能:读12864的状态
// 入口参数:无
// 出口参数:无
// 返回值 :所读的数据
//***************************************
uint8 CheckLcdBusy(void)
{
uint8 Tmp ;
SetLcdIo() ; //把IO置高
LCD_RS_LOW ;
LCD_RW_HIGH ;
LCD_EN_HIGH ;
do{
Tmp = ReadLcdIo() ;
}while (Tmp & LcdBusyBit); //检测忙信号
LCD_EN_LOW ;
return(Tmp);
}
//**************************************
// 函数名称:WriteCommandLCD
// 函数功能:写命令到12864
// 入口参数:要写的数据
// 出口参数:无
// 返回值 :无
//***************************************
void WriteCommandLCD(uint8 Dat) //BuysC为0时忽略忙检测
{
CheckLcdBusy(); //检测忙
LCD_RS_LOW ;
LCD_RW_LOW ;
WriteLcdIo(Dat) ;//写数据到IO
LCD_EN_HIGH ;
DelayLcdMs(DLY100US) ;
LCD_EN_LOW ;
}
//********带字库LCD12864操作源代码(一)
| 评论 |
|
|