lcd 1602采用4线并口通信,连接方式是db4-db7接p1.4-p1.7;rs:p2.7;rw:p2.6
en:p2.5;注意初始化的设置。
在万利medwin 3.0开发环境上调试通过!
#include
/********************************************************************/
#define lcdio p1
sbit lcd1602_rs=p2^7;
sbit lcd1602_rw=p2^6;
sbit lcd1602_en=p2^5;
/********************************************************************/
void lcd_delay(void);
void lcd_en_command(unsigned char command);
void lcd_en_dat(unsigned char temp);
void lcd_set_xy( unsigned char x, unsigned char y );
void lcd_write_char( unsigned x,unsigned char y,unsigned char dat);
void lcd_write_string(unsigned char x,unsigned char y,unsigned char *s);
void lcd_init(void);
/********************************************************************/
void delay_nms(unsigned int n);
/********************************************************************/
void main(void)
{
lcd_init();
while(1 )
{
lcd_en_command(0x01);
delay_nms(2);
lcd_write_string(0,0," create by ");
lcd_write_string(0,1," fenyman ");
delay_nms(200);
lcd_en_command(0x01);
delay_nms(2);
lcd_write_string(0,0," lcd1602 ");
lcd_write_string(0,1," test ");
delay_nms(200);
}
}
/******************** lcd part *************************************/
void lcd_delay(void)
{
unsigned char i;
for(i=40;i>0;i--)
;
}
/********************************************************************/
void lcd_en_command(unsigned char command)
{
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_en=0;
lcdio=(command & 0xf0);
lcd1602_en=1;
lcd_delay();
lcd1602_en=0;
lcdio=(command & 0x0f)<<4;
lcd1602_en=1;
lcd_delay();
lcd1602_en=0;
}
/********************************************************************/
void lcd_en_dat(unsigned char dat)
{
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_en=0;
lcdio=(dat & 0xf0);
lcd1602_en=1;
lcd_delay();
lcd1602_en=0;
lcdio=(dat & 0x0f)<<4;
lcd1602_en=1;
lcd_delay();
lcd1602_en=0;
}
/********************************************************************/
void lcd_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
if (y ==0)
address = 0x80 x;
else
address = 0xc0 x;
lcd_en_command(address);
}
/********************************************************************/
void lcd_write_char( unsigned x,unsigned char y,unsigned char dat)
{
lcd_set_xy( x, y );
lcd_en_dat(dat);
}
/********************************************************************/
void lcd_write_string(unsigned char x,unsigned char y,unsigned char *s)
{
lcd_set_xy( x, y ); //set address
while (*s) // write character
{
lcdio=*s;
lcd_en_dat(*s);
s ;
}
}
/********************************************************************/
void lcd_init(void)
{
lcd_en_command(0x01);
delay_nms(5);
lcd_en_command(0x01);
delay_nms(5);
lcd_en_command(0x28);
delay_nms(5);
lcd_en_command(0x28);
delay_nms(5);
lcd_en_command(0x28);
delay_nms(5);
lcd_en_command(0x0c);
delay_nms(5);
lcd_en_command(0x80);
delay_nms(5);
lcd_en_command(0x01);
delay_nms(5);
}
/********************************* *********************************/
void delay_nms(unsigned int n)
{
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=0;j<1140;j );
}
/********************************************************************/
『本文转载自网络,皇冠最新app版本的版权归原作者所有,如有侵权请联系删除』