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
相關文章
相關標籤/搜索