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
回復