LCD

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LCD实验程序总框图:

相关头文件定义。h

主要头文件内容:

#define LCD_ClearScr() do{\

while(LCD_IsBusy()); \

LCD_WriteCmd(Clear_Display);\

while(LCD_IsBusy()); \

LCD_WriteCmd(Return_Home);\

while(LCD_IsBusy()); \

LCD_WriteCmd(0x28);\

}while(0)

#define LCD_PutStr(row,column, str) LCD_Putstr( row,column, str)

#define LCD_GetPos( addr) LCD_getPos( addr)

/* 指定连接到LCD数据线的端口*/

#define DATA_PORT PORTD

#define TRIS_DATA_PORT TRISD

/* 指定连接到LCD控制线的端口*/

#define RW_PIN PORTDbits.RD5 /* RD5 接LCD R/nW线*/ #define TRIS_RW TRISDbits.TRISD5

#define RS_PIN PORTDbits.RD4 /* RD4 接LCD RS线*/

#define TRIS_RS TRISDbits.TRISD4

#define E_PIN PORTAbits.RA2 /* RA2 接LCD E线*/

#define TRIS_E TRISAbits.TRISA2

//命令集

typedef enum LCD_CMD

{

Clear_Display = 0x01, //清屏

Return_Home = 0x20 //光标返回

}LCD_CMD;

//光标模式

typedef enum Cursor_Mode

{

I_S=0x07, //AC+1,并且移动

InS=0x06, //AC+1不移动

D_S=0x05, //AC-1,移动

DnS=0x04 //AC-1,不移动

}Cursor_Mode;

//显示控制

typedef enum Dis_Control //大写字母代表1,D:显示C:开关光标B:光标是否闪烁{

DCB=0x0f,

DCb=0x0e,

DcB=0x0d,

Dcb=0x0c,

dCB=0x0b,

dCb=0x0a,

dcB=0x09,

dcb=0x08

}Dis_Control;

//光标移动

typedef enum Cursor_Shift

{

DL=0x10, //光左ac-1

IR=0x14,

LL=0x18, //光和显示一起左

RR=0x1c

}Cursor_Shift;

//功能设置

typedef enum Fun_Set

{

Sin8=0x30,//单5x8

Dou8=0x38,//双5*8

Sin10=0x34,//单5*10

}Fun_Set;

void LCD_Putstr(uint8 row,uint8 column, uint8 *str);

void LCD_Putch(uint8 row,uint8 column, uint8 ch);

uint8 LCD_getPos(uint8 * addr);

void LCD_WriteCGRAM(uint8 * cube);

相关C代码:

void LCD_Putstr(uint8 row,uint8 column, uint8 *str)

{

uint8 addr;

uint8 i=0;

addr = (0x80)+row*(0x40)+column;

while(0 != str[i])

{

LCD_Putch(row,column++,str[i]);

i++;

}

}

void LCD_Putch(uint8 row,uint8 column,uint8 ch)

{

uint8 addr;

addr = (0x80)+row*(0x40)+column-1;

while(LCD_IsBusy()); // 等到LCD空闲

LCD_WriteCmd(addr);

while(LCD_IsBusy()); // 等到LCD空闲

LCD_WriteData(ch);

}

uint8 LCD_getPos(uint8 * addr)

{

uint8 ret;

uint8 data;

/* 为读LCD状态,相应设置I/O口*/

TRIS_DATA_PORT |= 0x0F; // 数据引脚设为输入口RW_PIN = 1; // R/nW 引脚输出高(读)RS_PIN = 0;

//LCD_E_Delay();

E_PIN = 1;

LCD_E_Delay();

/* 判断LCD是否忙,结果存在ret中*/

if(DATA_PORT&0x08)

ret = 1;

相关文档
最新文档