LCD1602显示程序理解
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /*2018年8月11日 18点30分,于福安公寓 2 功能:LCD1602显示程序*/ 3 #include<reg52.h> 4 #define uchar unsigned char 5 #define uint unsigned int 6 uchar code table[] ="zhangshuaishuai"; 7 uchar code table1[] ="ce shi cheng xu"; 8 sbit lcdrw =P2^5; 9 sbit lcdrs =P2^6; 10 sbit lcde =P2^7; 11 void delay(uchar x) 12 { 13 uchar i,j; 14 for(i=x;i>0;i--) 15 for(j=110;j>0;j--); 16 } 17 //显示程序的位置 18 /*void lcd_display_char(uchar x,uchar y,uchar date) 19 { 20 uchar address; 21 if(y ==1) 22 address =0x80+x; 23 else 24 address =0xc0+x; 25 } 26 */ 27 /*写指令函数*/ 28 void lcd_write_cmd(uchar com) 29 { 30 lcdrs =0; //指令 31 P0 = com; 32 delay(1); 33 lcdrw =0;//写有效 34 lcde =1; //由时序图可知,当lcde为高电平之前就必须要将数据输入进去,故而P0 = com;这句指令在其前面 35 delay(1); 36 lcde =0; 37 38 } 39 /*写数据函数*/ 40 void lcd_write_data(uchar date) 41 { 42 P0 =date; 43 lcdrs =1; 44 delay(1); 45 lcdrw =0; 46 lcde =1; 47 delay(1); 48 lcde =0; 49 50 } 51 // 函数初始化 52 void init() 53 { 54 lcd_write_cmd(0x38);//设置8位格式;2行,5*7 55 lcd_write_cmd(0x0c);//整体显示,关光标,不闪烁 56 // lcd_write_cmd(0x01); //清除屏幕显示 57 lcd_write_cmd(0x06);//设定输入方式,增量不移位 58 59 delay(1); 60 } 61 void main() 62 { 63 uchar i,j,num; 64 init(); 65 66 /* lcd_write_data(0x41); 67 lcd_write_data('B'); 68 lcd_write_data('C'); 69 while(1); //当这里没有while(1);暂停语句时,就会出现满屏的数据 ;当输入多个字符时,比如'B','C'如上面,就会面屏出现同样的数据,并且在这几个字符中轮流变化 70 */ 71 72 lcd_write_cmd(0x80+0x13); //确定刚开始写入第一行数据的位置 73 for(i =0;i<15;i++) //如果没有确定要显示的位置,LCd显示屏默认就会从第一个字符开始 74 { 75 // lcd_display_char(0,0,table[i]) 76 77 lcd_write_data(table[i]); 78 delay(100); 79 80 // while(1); //如果在此处加上while(1)暂停语句时,就只会出现z这一个字符 81 } 82 // lcd_write_cmd(0x01); // 清屏指令 让上面的字符显示之后,再清屏 83 // delay(1000); //如果没有这个延时程序,那么下面显示的位置就不在你所设定的位置,会跑到第一行 84 85 lcd_write_cmd(0x80+0x53); //确定了下面要显示内容的位置 确定刚开始写入数据的位置 86 87 for(j =0;j<15;j++) 88 { 89 lcd_write_data(table1[j]); 90 delay(100); //动态显示让其延时,相当于 91 } 92 93 94 /*用于整屏向左移动的程序 由于是整个屏幕的向左移动,故而在将其所有要显示的 95 内容全部显示到不可见区域,然后统一按照移动屏幕的指令整体移动,每次移动也只移动一位*/ 96 for(num =0;num<18;num++) 97 { 98 lcd_write_cmd(0x18); //表示显示整屏向左移动 99 delay(1000); // 每个100ms移动一位 100 } 101 102 while(1); //如果在此处加上while(1)暂停语句时,会正常显示字符 103 104 }