void lcd _ init ()//LCD16 02初始化函数 delay (15); RS =0; RW =0; P1=0x30; EN =1; delay (5); EN =0; delay (5); P1=0x30; EN =1; delay (5); EN =0; delay (5); P1=0x30; EN =1; delay (5); EN =0; delay (5); P1=0x38; EN =1; delay (5); EN =0; delay (5); P1=0x08; EN =1; delay (5); EN =0; delay (5); P1=0x01; EN =1; delay (5); EN =0; delay (5); P1=0x06; EN =1; delay (5); EN =0; delay (5); P1=0x0c; EN =1; delay (5); EN =0; delay (5);解释代码
时间: 2023-08-03 08:08:33 浏览: 114
这段代码是LCD1602液晶屏的初始化函数,它的作用是初始化LCD屏幕,使其能够正常工作。
首先通过delay函数延时15ms,然后将RS(寄存器选择)和RW(读写选择)设置为0,将P1(数据口)设置为0x30,然后将EN(使能)置为1,再通过delay函数延时5ms,最后将EN置为0,这个过程相当于发送了一条指令给LCD屏幕。
接下来又发送了三次相同的指令,分别是0x30、0x30、0x38,这些指令的含义是:设置数据总线为8位,设置显示模式为两行显示,设置字符大小为5×8点阵。
然后又发送了一些指令,分别是0x08、0x01、0x06、0x0c,它们的含义是:关闭显示器,清除显示屏上的内容,设置字符显示方式为向右移动,打开显示器。
最后通过delay函数延时5ms,使得LCD屏幕完成初始化。
相关问题
讲下这段程序的编程流程和目的#include "main.h" //=========================================== sbit RS=P1^0; sbit RW=P1^1; sbit E=P1^2; sbit lcd_bla = P2^7; //=========================================== void Delay140us() //@12.000MHz 1T { unsigned char i, j; _nop_(); _nop_(); i = 2; j = 158; do { while (--j); } while (--i); } //void lcd_delay(uchar z) //{ // uchar t1,y; // for(t1=z;t1>0;t1--) // for(y=110;y>0;y--); //} //void Delay140us() //@12.000MHz 12T //{ // unsigned char i; // // _nop_(); // i = 67; // while (--i); //} // //uchar lcd_busy() //{ // register uchar lcd_start; // RS=0; // RW=1; // E=1; // lcd_delay(1); // lcd_start=P0; // E=0; // return(lcd_start&0x80); //} //============================================ void read(u8 del) //读函数 { P0=del; // while(lcd_busy()); RS=0; RW=0; E=0; Delay140us(); E=1; Delay140us(); } //============================================ void write(u8 del) //写函数 { P0=del; // while(lcd_busy()); RS=1; RW=0; E=0; Delay140us(); E=1; Delay140us(); } //============================================ //============================================ void lcd_init(void) //初始化函数 { lcd_bla = 0; read(0x01); read(0x0c); read(0x06); read(0xd0); read(0x38); lcd_show(1,1,' '); } //============================================ //void lcd_clear(void) //{ //read(0x01); //Delay140us(); //} void lcd_show(u8 hang,u8 lie,int sign) //数字显示 { u8 a; if(hang==1)a=0x80; if(hang==2) a=0xc0; a=a+lie-1; read(a); write(sign+48); } //============================================ void lcd_string(u8 hang,u8 lie,u8 *p) //字符串显示 { u8 a; if(hang==1)a=0x80; if(hang==2) a=0xc0; a=a+lie-1; read(a); while(1) { if(*p == '\0') break; write(*p); p++; } }
这段程序的目的是控制LCD液晶屏幕显示内容,包括数字和字符串。程序首先定义了LCD的接口引脚,然后定义了延时函数 Delay140us(),用于延时一段时间以等待LCD响应。接着定义了读函数 read() 和写函数 write(),分别用于向LCD发送读指令和写指令。然后是初始化函数 lcd_init(),用于初始化LCD屏幕。接下来是数字显示函数 lcd_show() 和字符串显示函数 lcd_string(),分别用于在LCD屏幕上显示数字和字符串。
具体地,数字显示函数 lcd_show() 接收三个参数:行号、列号和要显示的数字。首先通过行号和列号计算出要显示的位置,然后向该位置发送数字。字符串显示函数 lcd_string() 接收三个参数:行号、列号和要显示的字符串。同样通过行号和列号计算出要显示的位置,然后一次一个字符地向该位置发送字符串,直到遇到字符串结束符 '\0'。
讲下这段程序的编程流程和目的#include "main.h" //=========================================== sbit RS=P1^0; sbit RW=P1^1; sbit E=P1^2; sbit lcd_bla = P2^7; //=========================================== void Delay140us() //@12.000MHz 1T { unsigned char i, j; nop(); nop(); i = 2; j = 158; do { while (--j); } while (--i); } //void lcd_delay(uchar z) //{ // uchar t1,y; // for(t1=z;t1>0;t1--) // for(y=110;y>0;y--); //} //void Delay140us() //@12.000MHz 12T //{ // unsigned char i; // // nop(); // i = 67; // while (--i); //} // //uchar lcd_busy() //{ // register uchar lcd_start; // RS=0; // RW=1; // E=1; // lcd_delay(1); // lcd_start=P0; // E=0; // return(lcd_start&0x80); //} //============================================ void read(u8 del) //读函数 { P0=del; // while(lcd_busy()); RS=0; RW=0; E=0; Delay140us(); E=1; Delay140us(); } //============================================ void write(u8 del) //写函数 { P0=del; // while(lcd_busy()); RS=1; RW=0; E=0; Delay140us(); E=1; Delay140us(); } //============================================ //============================================ void lcd_init(void) //初始化函数 { lcd_bla = 0; read(0x01); read(0x0c); read(0x06); read(0xd0); read(0x38); lcd_show(1,1,' '); } //============================================ //void lcd_clear(void) //{ //read(0x01); //Delay140us(); //} void lcd_show(u8 hang,u8 lie,int sign) //数字显示 { u8 a; if(hang==1)a=0x80; if(hang==2) a=0xc0; a=a+lie-1; read(a); write(sign+48); } //============================================ void lcd_string(u8 hang,u8 lie,u8 *p) //字符串显示 { u8 a; if(hang==1)a=0x80; if(hang==2) a=0xc0; a=a+lie-1; read(a); while(1) { if(*p == '\0') break; write(*p); p++; } }
这段程序的编程流程和目的和上一段程序是一样的,都是控制LCD显示器,实现数字和字符串的显示。它们的区别在于一些细节上,比如其中的延时函数Delay140us()使用的是1T的延时方式,而上一段程序中的Delay140us()使用的是12T的延时方式。此外,lcd_init()函数中的lcd_show()函数的参数不同,上一段程序中是' ',而这一段程序中是0x30,这是因为这里将数字0的ASCII码值加上了48,即0x30,实现了数字的显示。