当前位置:首页 > LCM1602液晶屏显示实验程序
LCM1602液晶屏显示实验程序
文件:lcm16x2p.h
#ifndef LCM16X2_H #define LCM16X2_H
#define BUSYFLAG 0x80 #define BLINK 0x01 #define NOBLINK 0x00
unsigned char LCMReadState(void); void LCMDelay(int);
void LCMWriteCmd(unsigned char); void LCMWriteData(unsigned char); void LCMClear(void); void LCMInit(void);
void LCMGotoXY(unsigned char,unsigned char);
void LCMDisplayChar(unsigned char,unsigned char,unsigned char); void LCMDisplayString(unsigned char,unsigned char,unsigned char*); void LCMBlink(unsigned char,unsigned char,unsigned char);
#endif
文件:lcm16x2p.c
#include
#define LCM_DB P2
sbit LCM_RS = P1^0; sbit LCM_RW = P1^1; sbit LCM_E = P1^2; sbit LCM_BLC = P1^3;
unsigned int data DelayConst = 140;
/*******************************************************************************
函数名:LCMDelay
功 能:通过循环的方式延时
参 数:int,表示要延时的毫秒数 返 回:
作 者:倪晓军 2003-5-25 15:21
*******************************************************************************/
void LCMDelay(int ms) { unsigned int i,cnt; cnt = DelayConst * ms; for(i=0;i /******************************************************************************* 函数名:LCMReadState 功 能:查询LCM的忙标志/当前AC地址 参 数: 返 回:BYTE,最高bit为1表示忙,为0表示闲 作 者:倪晓军 2003-5-25 15:24 *******************************************************************************/ unsigned char LCMReadState(void) { unsigned char state; LCM_E = 0; LCM_RS = 0; LCM_RW = 1; LCM_E = 1; _nop_(); _nop_(); state = LCM_DB; LCM_E = 0; return state; } /******************************************************************************* 函数名:LCMClear 功 能:清屏 参 数: 返 回: 作 者:倪晓军 2003-5-25 15:25 *******************************************************************************/ void LCMClear(void) { LCMDelay(1); LCM_E = 0; LCM_RS = 0; LCM_RW = 0; LCM_DB = 0x01; LCM_E = 1; _nop_(); _nop_(); LCM_E = 0; LCMDelay(1); } /******************************************************************************* 函数名:LCMWriteCmd 功 能:向LCM写入控制字 参 数:BYTE,命令字节。写入前不判断忙表示(因为初始化过程中不能判断) 返 回: 作 者:倪晓军 2003-5-25 15:26 *******************************************************************************/ void LCMWriteCmd(unsigned char cmd) { LCMDelay(1); LCM_E = 0; LCM_RS = 0; LCM_RW = 0; LCM_DB = cmd; LCM_E = 1; _nop_(); _nop_(); LCM_E = 0; } /******************************************************************************* 函数名:LCMWriteData 功 能:向LCM写入数据 参 数:BYTE,将要写入的数据 返 回: 作 者:倪晓军 2003-5-25 15:27 *******************************************************************************/ void LCMWriteData(unsigned char dc) { while(LCMReadState() & BUSYFLAG); LCM_RS = 1; LCM_RW = 0; LCM_DB = dc; LCM_E = 1; _nop_(); _nop_(); LCM_E = 0; } /******************************************************************************* 函数名:LCMInit 功 能:初始化LCM 参 数:DWORD,晶振频率(Hz),供计算延时常数 返 回: 作 者:倪晓军 2003-5-25 15:28 *******************************************************************************/ void LCMInit(void) { LCMDelay(60); // 延时60ms,等待LCM复位 LCMWriteCmd(0x38); // 功能设置:8位接口,2行,5x7字符点阵 LCMDelay(5); // 延时 LCMWriteCmd(0x38); // 第二次 LCMDelay(1); // 延时 LCMWriteCmd(0x38); // 此后可以通过监测忙标志判断指令执行情况 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x08); // 关闭显示 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x01); // 清屏 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x06); // 显示地址自动增量,整体不移位 while(LCMReadState() & BUSYFLAG); LCMWriteCmd(0x0e); // 开显示,开光标,不闪烁 while(LCMReadState() & BUSYFLAG); } /******************************************************************************* 函数名:LCMGotoXY 功 能:移动光标到X行,Y列 参 数:BYTE,x表示行(0,1),y表示列(横向,取值0~0x0f) 返 回: 作 者:倪晓军 2003-5-25 15:29 *******************************************************************************/ void LCMGotoXY(unsigned char x,unsigned char y) // x:行(0~1) y:列(0~F) { unsigned char cmd; if(x==0) { cmd = 0x80 | y;(设置显示缓冲区DDRAM地址命令D7=1,第0行第0列从00H开始) } else { cmd = 0x80 | 0x40 | y; (第1行第0列为40H开始) } LCMWriteCmd(cmd); while(LCMReadState() & BUSYFLAG); } /******************************************************************************* 函数名:LCMDisplayChar 功 能:在指定位置显示一个字符 参 数:x表示行(0,1),y表示列(横向,取值0~0x0f),ch表示将要显示的字符(ASCII码) 返 回: 作 者:倪晓军 2003-5-25 15:31 *******************************************************************************/ void LCMDisplayChar(unsigned char x,unsigned char y,unsigned char ch) { LCMGotoXY(x,y); LCMWriteData(ch); }
共分享92篇相关文档