液晶1602的C语言驱动程序

#include"AT89x52.h"
#include"math.h"

#define uchar unsigned char
#define uint unsigned int

//sbit rs=P2^7;
//sbit rw=P2^6;
//sbit cs=P2^5;
sbit rs=P2^4;
sbit rw=P2^3;
sbit cs=P2^2;
sbit DUAN=P2^0; //74HC573的LE端 U5 LED的段选端
sbit WEI=P2^1; //74HC573的LE端 U4 LED的位选端

uchar lcd_data_1[]={"2008-07-24"};
uchar lcd_data_2[]={"00:00:00"};
//uchar lcd_data_3[]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};

void wei_1()
{
WEI=1;
P0=0;
WEI=0;
}

void duan_1()
{
DUAN=1;
P0=0;
DUAN=0;
}

void nop(){} //延时一会

//=函数原型:delay
//=功 能:1ms延时
//=参 数:z
//=返 回 值:
//=函数性质:私有函数
void delay(uchar z)
{
uchar t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}

//=函数原型:lcd_busy
//=功 能:忙标志
//=参 数:
//=返 回 值:lcd_start&0x01值
//=函数性质:私有函数
uchar lcd_busy()
{
register uchar lcd_start;
rs=0;
rw=1;
cs=1;
nop();
lcd_start=P0;
cs=0;
return(lcd_start&0x80);
}

//=函数原型:write_cmd
//=功 能:写命令
//=参 数:cmd
//=返 回 值:
//=函数性质:私有函数
void write_cmd(uchar cmd)
{
uchar CMD;
CMD=cmd;
while(lcd_busy());
rs=0;
rw=0;
cs=1;
nop();
P0=CMD;
cs=0;
}

//=函数原型:write_data
//=功 能:写数据
//=参 数:data1
//=返 回 值:
//=函数性质:私有函数
void write_data(uchar data1)
{
uchar DATA;
DATA=data1;
while(lcd_busy());
rs=1;
rw=0;
cs=1;
nop();
P0=DATA;
cs=0;
}

//=函数原型:lcdinit
//=功 能:LCD初始化
//=参 数:
//=返 回 值:
//=函数性质:
void lcdinit()
{
delay(30); //延时30ms
write_cmd(0x38); //设定8位操作格式,2行显示,5*7点阵
write_cmd(0x0c); //整体显示,关光标,不闪烁
write_cmd(0x06); //输入方式设定(增量不移位)
write_cmd(0x01); //清屏且光标回原位
write_cmd(0x0d); //开显示开光标
}

//=函数原型:time
//=功 能:时间调节
//=参 数:
//=返 回 值:
//=函数性质:
void time()
{
uint i;
write_cmd(0x80+0x03); //地址指针的设置
for(i=0;i<10;i++)
{
write_data(lcd_data_1[i]);
}
write_cmd(0xc0+0x04); //地址指针的设置
for(i=0;i<8;i++)
{
write_data(lcd_data_2[i]);
}
write_cmd(0xc0+0x0c); //地址指针的设置
}

void main(void)
{
wei_1();
duan_1();
lcdinit();
time();
while(1);
}

液晶1602的C语言驱动程序相关文档

最新文档

返回顶部