当前位置:文档之家› lcd1602C语言驱动

lcd1602C语言驱动

/*LCD1602 驱动程序 */
display (行号,数据指针) displayUser (行号,列号,字符/字符串) Ddisplay (行号、列号、字符/字符串) Fldisplay (行号、列号、字符/字符串)
/*
声明代码(放工程中需要包含的自定义头文件中)
void delay(unsigned char n);
void init();
void display(unsigned char a,unsigned char table[]);
void write_date(uchar);
void write_command(uchar);
void displayUser(unsigned char hang,unsigned lie,unsigned char table[]); void Ddisplay(unsigned char hang,unsigned lie,unsigned char table[]);
void Fldisplay(unsigned char hang,unsigned lie,unsigned char table[]);
*/
#include <reg51.h>
#define uchar unsigned char
sbit rs=P2A 4;
sbit rw=P2A5;
sbit e=P2A6;
uchar busyc,line;
void delay(uchar n)
{
uchar x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void busy(uchar busyc)
{
rs=0;
rw=1;e=1;
delay(1);
busyc=P0;
e=0;
}
void write_command(uchar command)
{
/* 程序用法: 1、按行显示:
2、定位显示
3、动态显示
4、闪烁显示
*/
busy(busyc);
while(busyc); // 判断LCD 是否忙碌
rs=0;
rw=0;
e=1;
P0=command;
delay(10);
e=0;
}
void write_date(uchar date)
{
busy(busyc);
while(busyc); // 判断LCD 是否忙碌
rs=1;
rw=0;
e=1;
P0=date;
delay(10);
e=0;}
void init()
{
e=0;
write_command(0x38);
delay(15);
write_command(0x0c);
write_command(0x06);
write_command(0x01);
}
void display(unsigned int a,unsigned char *table)
{
uchar i;
if(a==1)
{
write_command(0x80); // 设置显示位置(第一行开头) for(i=0;i<16;i++)
write_date(*(table+i)); // 显示字符
}
if(a==2)
{
write_command(0xc0); // 设置显示位置(第二行开头)
for(i=0;i<16;i++)
write_date(*(table+i)); // 显示字符
}
}
void displayUser(unsigned char hang,unsigned lie,unsigned char table[]) // 定位显示,定位行号和列号。

相关主题