首页 新闻 > 科技 > 正文

LCD1602程序代码及显示流程图

lcd1602显示程序代码

本文引用地址:http://www.eepw.com.cn/article/201710/366255.htm

前些天弄了最小系统板后就想着学习1602的显示程序,可惜坛子里的或网上的,都没有简单的1602显示程序,无柰在网上下载了一段经过反复修改测试,终于有了下面一段代码:

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// - - 初始化接口

# define LCD_DB P0 // - - P0 = DB0~DB7

sbit LCD_RS=P2^0; // - - p2.0 = RS

sbit LCD_RW=P2^1; // - - p2.1 = RW

sbit LCD_E=P2^2; // - - p2.2 = E

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// - - 定义函数

# define uchar unsigned char

# define uint unsigned int

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// - - 定义子程序函数

void LCD_init(void); // - - 初始化LCD1602函数

void LCD_write_command(uchar command); // - - 向LCD1602写指令函数

void LCD_write_data(uchar dat); // - - 向LCD1602写数据函数

void LCD_set_xy(uchar x,uchar y); // - - 设置LCD1602显示位置 X(0-16),y(1-2)

void LCD_disp_char(uchar x,uchar y,uchar dat); // - - 在LCD1602上显示一个字符

void LCD_disp_string(uchar X,uchar Y,uchar *s); // - - 在LCD1602上显示一个字符串

//void LCD_check_busy(void);//检查忙函数。我没用到此函数,因为通过率极低。

void LCD_delay_10us(uint n); // - - 10微秒的延时子程序

void LCD_delay_50us(uint n); // - - 50微秒的延时子程序

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// - - 初始化LCD1602

void LCD_init(void)

{

LCD_delay_10us(20);

LCD_write_command(0x38); // - - 设置8位格式,2行,5x7

LCD_delay_10us(5);

LCD_write_command(0x0c); // - - 整体显示,关光标,不闪烁

LCD_delay_10us(5);

LCD_write_command(0x06); // - - 设定输入方式,增量不移位

LCD_delay_10us(5);

LCD_write_command(0x01); // - - 清除屏幕显示

LCD_delay_50us(40);

}

//********************************

// - - 向LCD1602写指令

void LCD_write_command(uchar dat)

{

LCD_delay_10us(5);

LCD_RS=0; // - - 指令

LCD_RW=0; // - - 写入

LCD_DB=dat;

LCD_delay_10us(5);

LCD_E=1; // - - 允许

LCD_delay_10us(5);

LCD_E=0;

}

// - - 向LCD1602写数据

void LCD_write_data(uchar dat)

{

LCD_delay_10us(5);

LCD_RS=1;// - - 数据

LCD_RW=0;// - - 写入

LCD_DB=dat;

LCD_delay_10us(5);

LCD_E=1;// - - 允许

LCD_delay_10us(5);

LCD_E=0;

}

// - - 设置显示位置

void LCD_set_xy(uchar x,uchar y)

{

uchar address;

if(y==1)

{

address=0x80+x; // - - 第一行位置

} else {

address=0xc0+x; // - - 第二行位置

}

LCD_delay_10us(5);

LCD_write_command(address);

}

// - - 显示一个字符函数

void LCD_disp_char(uchar x,uchar y,uchar dat) // - - LCD_disp_char(0,1,0x38); // - - 显示8

{

LCD_set_xy(x,y);

LCD_delay_10us(5);

LCD_write_data(dat);

}

// - - 显示一个字符串函数

void LCD_disp_string(uchar x,uchar y,uchar *s)

{

LCD_set_xy(x,y);

LCD_delay_10us(5);

while(*s!=‘\0’)

{

LCD_write_data(*s);

s++;

}

}

//********************************

/*******检查忙函数*************

void LCD_check_busy() //实践证明,在我的LCD1602上,检查忙指令通过率极低,以

{ //至于不能正常使用LCD。因此我没有再用检查忙函数。而使

do //用了延时的方法,延时还是非常好用的。我试了一下,用

{ LCD_E=0; //for循环作延时,普通指令只要1次循就可完成。清屏指令

LCD_RS=0; //要用200次循环便能完成。

LCD_RW=1;

LCD_DB=0xff;

LCD_E=1;

}while(LCD_DB^7==1);

******************************/

void LCD_delay_10us(uint n) // - - 10微秒的延时子程序

{

uint i,j;

for(i=n;i》0;i--)

for(j=2;j》0;j--);

}

void LCD_delay_50us(uint n) // - - 50微秒的延时子程序

{

uint i,j;

for(i=n;i》0;i--)

for(j=22;j》0;j--);

}

LCD1602显示程序流程图及句解

让LCD1602显示字符前要输入字符所在的地址,这也是每显示一个字符地址要加一的原因,在下面的一段代码里你会明白怎么设置地址,怎么让地址自动加一,怎么清屏,怎么显示字符,希望你能看懂哦

sbit LCD_E=P2^0; //lcd1602控制置位

sbit LCD_RW=P2^1; //lcd1602控制置位

sbit LCD_RS=P2^2; //lcd1602控制置位

void LCD_command(unsigned char com)

{

LCD_E=0;

LCD_RW=0;

LCD_RS=0;

P1=com;

delay_us(100);

LCD_E=1;

delay_us(100);

LCD_E=0;

}

void LCD_date(unsigned char dat)

{

LCD_E=0;

LCD_RW=0;

LCD_RS=1;

P1=dat;

delay_us(100);

LCD_E=1;

delay_us(100);

LCD_E=0;

}

LCD_command(0x38); //设置LCD为16*2显示,5*7点阵,8位数据接口

LCD_command(0x0c); //设置LCD显示开,光标显示关

LCD_command(0x06); //写一个数据后地址加1

LCD_command(0x01); //显示清屏

LCD_command(0x80); //数据指针设置为第一行第一位

LCD_date(‘pi’);

LCD_date(‘l’);

LCD_date(‘e’);

LCD_date(‘a’);

LCD_date(‘s’);

LCD_date(‘e’);

LCD_date(‘ ’);

LCD_date(‘c’);

LCD_date(‘h’);

LCD_date(‘e’);

LCD_date(‘c’);

LCD_date(‘k’);

LCD_date(‘ ’);

LCD_date(‘t’);

LCD_date(‘h’);

LCD_date(‘e’);

LCD_command(0x80+0x40); //LCD地址指针指向第二行第一个位置

LCD_date(‘c’);

LCD_date(‘o’);

LCD_date(‘n’);

LCD_date(‘n’);

LCD_date(‘e’);

LCD_date(‘c’);

LCD_date(‘t’);

LCD_date(‘i’);

LCD_date(‘o’);

LCD_date(‘n’);

LCD_date(‘!’);

LCD_date(‘!’);

关键词: LCD1602 LCD1602显示程序

最近更新

关于本站 管理团队 版权申明 网站地图 联系合作 招聘信息

Copyright © 2005-2018 创投网 - www.xunjk.com All rights reserved
联系我们:33 92 950@qq.com
豫ICP备2020035879号-12