LCD1602显示程序理解

 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 }
View Code
相关文章
相关标签/搜索