LCD1602A显示字符或字符串
2017-09-14 / 电子技术 / 1783 次围观 / 0 次吐槽 /#include<reg52.h> #include<string.h> #define uchar unsigned char #define uint unsigned int sbit EN=P1^4; sbit RS=P1^6; sbit RW=P1^5; void LCD1602() { EN=0; RS=1; RW=1; P0=0xff; //这里P0为与LCD D0~D7相连的I/O口 } void read_busy() { P0=0xff; RS=0; RW=1; EN=1; while(P0&0x80); //P0和10000000相与,D7位若不为0,停在此处 EN=0; //若为0跳出进入下一步;这条语句的作用就是检测D7位 } void write(uchar i,bit j) { read_busy(); P0=i; //其中i=0,写指令;i=1,写数据; RS=j; RW=0; EN=1; EN=0; } void delay(uint c) //功能为提供初始化等其他子程序中的延时1xc MS { uint a,b; for(a=0;a<c;a++) for(b=0;b<120;b++); } void init() //完全按照要求初始化流程来,中间省略了一步写指令38H { delay(15); write(0x38,0); delay(5); write(0x38,0); write(0x08,0); write(0x01,0); write(0x06,0); write(0x0c,0); } void display_lcd_byte(uchar y,uchar x,uchar z) //Y=0,1(起始行)X=0~15(起始列)Z=想写字符的ASCII码 { if(y) //是否显示在第二行(若在第一行Y=0,不进入IF语句,若在第二行,进入IF语句 { x+=0x40; //第二行起始地址加上列数为字符显示地址 } x+=0x80; //设置数据指针位置 write(x,0); write(z,1); //写入数据 } void display_lcd_text(uchar y,uchar x,uchar table[]) //Y,X同上字符显示,table[]字符串数组 { uchar z=0; uchar t; t=strlen(table)+x; // 求得字符串长度加上起始列位置 while(x<t) //功能为LCD显示到字符串最后一个字符,防止字符串 { //没有16个字符,从而不够位产生乱码; display_lcd_byte(y,x,table[z]); //逐位显示数组内字符 x++; z++; } } void main() { LCD1602(); init(); display_lcd_byte(0,0,'C'); // 显示一个字符 display_lcd_text(1,0,"www.cheug.com"); // 显示字符串 while(1); }
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.