51微控制器的LCD顯示
阿新 • • 發佈:2019-01-06
一、lcd1602
(一)、管腳展示
(二)、管腳釋義
穿插:1602:意思:可以顯示2行16列字元 (三)、時序圖 1、
看的方法:先做垂線時間軸t,可以看到RS先變化(有交叉即變化),然後看到同一垂線上的R/W被拉低,DB0--DB7 改變電平,之後E被拉高,持續TPw (四)、LCD1602寫命令和資料函式 static void lcd_write_cmd(unsigned char byte) { RS = 0;//寫入命令,R/S被拉低 RW = 0;//寫 LCDPORT = byte; E = 1;//E被拉高 delay_us(10);//延時 E = 0;//E被拉低 } static void lcd_write_date(unsigned char byte) { RS = 1;//寫入資料,R/S被拉高 RW = 0; LCDPORT = byte; E = 1; delay_us(10); E = 0; } (四)、LCD初始化函式 static void lcd_init() { delay_ms(5); lcd_write_cmd(0x38);//設定顯示位數,行數,點陣值,寫四次,防止不成功 delay_ms(5); lcd_write_cmd(0x38); delay_ms(5); lcd_write_cmd(0x38); delay_ms(5); lcd_write_cmd(0x38); delay_ms(5); lcd_write_cmd(0x08);//設定游標 delay_ms(5); lcd_write_cmd(0x01);//清屏 delay_ms(5); lcd_write_cmd(0x06);//設定自動加一位顯示 delay_ms(5); lcd_write_cmd(0x0c);//開啟顯示 delay_ms(5); } (五)、LCD相關命令
(六)、LCD寫入函式 void main() { lcd_init();//初始化 lcd_write_cmd(0x80);//確定寫入地址 lcd_write_data('a');//確定寫入值 while(1); }
(七)、自定義字元顯示
1、低六位可編輯: A5 A4 A3 :表示編輯的是第幾個自定義字元 A2 A 1 A0:表示編輯的是某個字元的第幾行 2、CGRAM地址範圍:從0X40----0X7F,LCD1602為8行5列 3、自定義圖形函式 void lcd_display_self() { lcd_write_cmd(0x40);//確定寫入的CGRAM位置 lcd_write_date(0xff);//低三行全亮,因為LCD只有五位,所以0X1F和0Xff是一樣的 lcd_write_date(0xff);//確定過地址之後行數自動加一 lcd_write_date(0xff); lcd_write_date(0x07);//第四五六行為0000 0111,只兩三列 lcd_write_date(0x07); lcd_write_date(0x07); lcd_write_date(0x03);//第四五六行為0000 011,只亮兩列列 lcd_write_date(0x03); lcd_write_cmd(0x80+0x40);//確定要顯示的DDRAM的地址 lcd_write_date(0);//表示寫入的為第0個字元 } 4、CGRAM和DDRAM地址示意:
(二)、管腳釋義
穿插:1602:意思:可以顯示2行16列字元 (三)、時序圖 1、
看的方法:先做垂線時間軸t,可以看到RS先變化(有交叉即變化),然後看到同一垂線上的R/W被拉低,DB0--DB7 改變電平,之後E被拉高,持續TPw (四)、LCD1602寫命令和資料函式 static void lcd_write_cmd(unsigned char byte) { RS = 0;//寫入命令,R/S被拉低 RW = 0;//寫 LCDPORT = byte; E = 1;//E被拉高 delay_us(10);//延時 E = 0;//E被拉低 } static void lcd_write_date(unsigned char byte) { RS = 1;//寫入資料,R/S被拉高 RW = 0; LCDPORT = byte; E = 1; delay_us(10); E = 0; } (四)、LCD初始化函式 static void lcd_init() { delay_ms(5); lcd_write_cmd(0x38);//設定顯示位數,行數,點陣值,寫四次,防止不成功 delay_ms(5); lcd_write_cmd(0x38); delay_ms(5); lcd_write_cmd(0x38); delay_ms(5); lcd_write_cmd(0x38); delay_ms(5); lcd_write_cmd(0x08);//設定游標 delay_ms(5); lcd_write_cmd(0x01);//清屏 delay_ms(5); lcd_write_cmd(0x06);//設定自動加一位顯示 delay_ms(5); lcd_write_cmd(0x0c);//開啟顯示 delay_ms(5); } (五)、LCD相關命令
(六)、LCD寫入函式 void main() { lcd_init();//初始化 lcd_write_cmd(0x80);//確定寫入地址 lcd_write_data('a');//確定寫入值 while(1); }
(七)、自定義字元顯示
1、低六位可編輯: A5 A4 A3 :表示編輯的是第幾個自定義字元 A2 A 1 A0:表示編輯的是某個字元的第幾行 2、CGRAM地址範圍:從0X40----0X7F,LCD1602為8行5列 3、自定義圖形函式 void lcd_display_self() { lcd_write_cmd(0x40);//確定寫入的CGRAM位置 lcd_write_date(0xff);//低三行全亮,因為LCD只有五位,所以0X1F和0Xff是一樣的 lcd_write_date(0xff);//確定過地址之後行數自動加一 lcd_write_date(0xff); lcd_write_date(0x07);//第四五六行為0000 0111,只兩三列 lcd_write_date(0x07); lcd_write_date(0x07); lcd_write_date(0x03);//第四五六行為0000 011,只亮兩列列 lcd_write_date(0x03); lcd_write_cmd(0x80+0x40);//確定要顯示的DDRAM的地址 lcd_write_date(0);//表示寫入的為第0個字元 } 4、CGRAM和DDRAM地址示意: