1. 程式人生 > >LCD1602顯示程序理解

LCD1602顯示程序理解

else i++ 第一個字符 指令 open 默認 cmd 統一 ++

技術分享圖片
  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

LCD1602顯示程序理解