1602液晶显示模块驱动
/* 本驱动主要提供1602液晶显示模块的读写操作,可以完成1602显示模块的绝大多数操作,如有特殊的操作请适当更改函数的调用
提供以下几个函数可供调用
********************************************************************************************************
* 1. lcd_init() 用于lcd初始化 *
* 2. comm_send(unsigned char a)用于控制命令发送 *
* 3. data_send(unsigned char a) 用于数据发送 *
* 4. lcd_pos(unsigned char a)用于lcd显示定位 第一行为00H开始,第二行为40H开始 *
* 5. lcd_disp(unsigned char *a)用于lcd显示字符串 *
* 6. lcd_clear()用于清除屏 *
* 7. lcd_disp_long(unsigned long x,unsigned char y)用于显示数字,不能大于8位 第一个参数为要显示的数 第二个参数为要显示的位数 *
********************************************************************************************************
使用时请将下面三个位连线重新设置为硬件实际连接
使用时请修改lcd_Delay_ms函数中的lcd_Base_1ms()调用参数为实际的时钟频率,单位为MHZ
*/
sbit lcd_rs= P2^6; //此处定义lcd的rs端与P2.6连接
sbit lcd_rw= P2^5; //此处定义lcd的rw端与P2.5连接
sbit lcd_en= P2^7; //此处定义lcd的EN端与P2.7连接
nop(void) //此处定义空操作
{
}
//以下定义一个基本的延时函数,用于产生1MS的延时
//入口参数为单片机的时时钟频率
void lcd_Base_1ms(unsigned time)
{
unsigned char i,j;
for(i=0;i<8;i++)
for(j=0;j<4*time/10;j++);
}
//以下定义一个延时函数,用于MS级延时
//入口参数为延时多少个MS,不得大于250
void lcd_Delay_ms(unsigned time)
{
unsigned a;
for (a=0;a<=time;a++)
{
lcd_Base_1ms(12);
}
}
lcd_read() //此处定义lcd状态读取函数
{
bit sta;
lcd_rs=0;
lcd_rw=1;
lcd_en=1;
sta=(bit)(P0&0x80);
lcd_en=0;
return sta;
}
comm_send(unsigned char a)//此处定义命令发送函数
{
while(lcd_read())
nop();
nop();
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
P0=a;
nop();
nop();
lcd_en=1;
nop();
nop();
nop();
lcd_en=0;
lcd_Delay_ms(15);
}
data_send(unsigned char a) //此处定义数据发送函数
{
while(lcd_read());
nop();
nop();
nop();
nop();
nop();
nop();
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=a;
nop();
nop();
lcd_en=1;
nop();
nop();
nop();
lcd_en=0;
}
lcd_init() //此处定义lcd初始化函数
{
comm_send(56); //设置为16X2显示,5X7点阵,8位数据接口
lcd_Delay_ms(15);
comm_send(15);//设置为打开显示,显示光标,光标闪烁.
lcd_Delay_ms(15);
comm_send(6);//设置显示一个字符后地址为加1;
lcd_Delay_ms(15);
comm_send(1);//清屏
lcd_Delay_ms(15);
}
lcd_pos(unsigned char a)//此处定义lcd显示定位函数 第一行为00H开始,第二行为40H开始
{
comm_send(128+a);
}
lcd_disp(unsigned char *a) //此处定义lcd显示字符串函数
{
while(*a!='\0')
{
data_send(*a++);
}
}
lcd_clear()//此处定义清除屏幕函数
{
comm_send(1);
}
lcd_disp_long(unsigned long x,unsigned char y) //此处定义lcd显示字符串函数
{
unsigned char d[8]={0,0,0,0,0,0,0,0};
char b;
unsigned char c;
for(b=0;b<8;b++)
{
c=x/10*10;
d[b]=(x-c)+48;
x=x/10;
}
for(b=y-1;b>=0;b--)
{
data_send(d[b]);
}
}
浙公网安备 33010602011771号