c51子程序集,有了它,写程序真方便!!!
全部回复(18)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
我也来一4位数据 1602液晶驱动,可以显示一行和一个字符
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P0^1;
sbit rw=P0^2;
sbit en=P0^3;
void delay_x_ms(uchar x)
{
uchar i,j;
for(j=0;j {
for(i=0;i<110;i++){;}
}
}
/* 写数据 */
void write_data(uchar lcd_data)
{
P0=lcd_data&0xf0;
rs=1;
rw=0;
en=0;
en=0;
en=1;
en=1;
en=0;
en=0;
lcd_data=lcd_data<<4;
P0=lcd_data&0xf0;
rs=1;
rw=0;
en=0;
en=0;
en=1;
en=1;
en=0;
en=0;
}
/* 写命令 */
void write_command(uchar lcd_command)
{
rs=0;
rw=0;
P0=lcd_command&0xf0;
en=0;
en=0;
en=1;
en=1;
en=0;
en=0;
lcd_command=lcd_command<<4;
P0=lcd_command&0xf0;
en=1;
en=1;
en=0;
en=0;
}
/* 初始化LCD */
void init_lcd(void)
{
delay_x_ms(50);
write_command(0x01); //清屏
delay_x_ms(50);
write_command(0x28); //设置4位数据线,2行显示
delay_x_ms(50);
write_command(0x28);
delay_x_ms(50);
write_command(0x06); //显示开,光标开,闪烁关
delay_x_ms(50);
write_command(0x0c); //设置AC为增量方式显示,不移位
}
///////////////////////////////////////////////////////
/* 液晶显示程序 */
//显示一行程序
void lcd_disp_string(uchar *s,uchar str_x,uchar str_y)//液晶显示程序
{
uchar lcd_addr;
if(str_y==0)
lcd_addr=0x00+str_x;
if(str_y==1)
lcd_addr=0x40;
lcd_addr=lcd_addr|0x80+str_x;
delay_x_ms(10);
write_command(lcd_addr);
while(*s)
{
delay_x_ms(10);
write_data(*s);
s++;
}
}
void lcd_disp_char(uchar x,uchar y, uchar disp_char)
{
uchar lcd_addr;
if(y==0)
lcd_addr=0x00+x;
if(y==1)
lcd_addr=0x40+x;
lcd_addr=lcd_addr|0x80;
delay_x_ms(10);
write_command(lcd_addr);
delay_x_ms(10);
write_data(disp_char);
}
/*
main()
{
uint i;
init_lcd();
delay_x_ms(10);
write_command(0x01);
lcd_disp_string("your",5,1);
lcd_disp_char(0,0,'=');
// delay_x_ms(250);
// write_command(0x01);
i=0;
while(1)
{
i=1500;
while(i--)
{
;
}
i=0;
}
}*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P0^1;
sbit rw=P0^2;
sbit en=P0^3;
void delay_x_ms(uchar x)
{
uchar i,j;
for(j=0;j
for(i=0;i<110;i++){;}
}
}
/* 写数据 */
void write_data(uchar lcd_data)
{
P0=lcd_data&0xf0;
rs=1;
rw=0;
en=0;
en=0;
en=1;
en=1;
en=0;
en=0;
lcd_data=lcd_data<<4;
P0=lcd_data&0xf0;
rs=1;
rw=0;
en=0;
en=0;
en=1;
en=1;
en=0;
en=0;
}
/* 写命令 */
void write_command(uchar lcd_command)
{
rs=0;
rw=0;
P0=lcd_command&0xf0;
en=0;
en=0;
en=1;
en=1;
en=0;
en=0;
lcd_command=lcd_command<<4;
P0=lcd_command&0xf0;
en=1;
en=1;
en=0;
en=0;
}
/* 初始化LCD */
void init_lcd(void)
{
delay_x_ms(50);
write_command(0x01); //清屏
delay_x_ms(50);
write_command(0x28); //设置4位数据线,2行显示
delay_x_ms(50);
write_command(0x28);
delay_x_ms(50);
write_command(0x06); //显示开,光标开,闪烁关
delay_x_ms(50);
write_command(0x0c); //设置AC为增量方式显示,不移位
}
///////////////////////////////////////////////////////
/* 液晶显示程序 */
//显示一行程序
void lcd_disp_string(uchar *s,uchar str_x,uchar str_y)//液晶显示程序
{
uchar lcd_addr;
if(str_y==0)
lcd_addr=0x00+str_x;
if(str_y==1)
lcd_addr=0x40;
lcd_addr=lcd_addr|0x80+str_x;
delay_x_ms(10);
write_command(lcd_addr);
while(*s)
{
delay_x_ms(10);
write_data(*s);
s++;
}
}
void lcd_disp_char(uchar x,uchar y, uchar disp_char)
{
uchar lcd_addr;
if(y==0)
lcd_addr=0x00+x;
if(y==1)
lcd_addr=0x40+x;
lcd_addr=lcd_addr|0x80;
delay_x_ms(10);
write_command(lcd_addr);
delay_x_ms(10);
write_data(disp_char);
}
/*
main()
{
uint i;
init_lcd();
delay_x_ms(10);
write_command(0x01);
lcd_disp_string("your",5,1);
lcd_disp_char(0,0,'=');
// delay_x_ms(250);
// write_command(0x01);
i=0;
while(1)
{
i=1500;
while(i--)
{
;
}
i=0;
}
}*/
0
回复
提示