51單片機驅(qū)動1602液晶顯示器的小例子
引腳功能:
本文引用地址:http://m.butianyuan.cn/article/201611/318169.htm1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:VSS為電源地
第2腳:VCC接5V電源正極
第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。
第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。
第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。
第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執(zhí)行指令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。
第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負極。
指令表:
指令碼 | 功 能 | ||||||||||
令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
清除顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 將DDRAM填滿"20H",并且設(shè)定DDRAM的地址計數(shù)器(AC)到"00H" |
地址歸位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | 設(shè)定DDRAM的地址計數(shù)器(AC)到"00H",并且將游標(biāo)移到開頭原點位置;這個指令不改變DDRAM 的內(nèi)容 |
顯示狀態(tài)開/關(guān) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | [D=1: 整體顯示 ON][C=1: 游標(biāo)ON] [B=1:游標(biāo)位置反白允許] |
進入點設(shè)定 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 指定在數(shù)據(jù)的讀取與寫入時,設(shè)定游標(biāo)的移動方向及指定顯示的移位 |
游標(biāo)或顯示移位控制 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X | 設(shè)定游標(biāo)的移動與顯示的移位控制位;這個指令不改變DDRAM 的內(nèi)容 |
功能設(shè)定 | 0 | 0 | 0 | 0 | 1 | DL | X | RE | X | X | [DL=0/1:4/8位數(shù)據(jù)] [RE=0/1: 基本指令操作 / 擴充指令操作] |
設(shè)定CGRAM地址 | 0 | 0 | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 設(shè)定CGRAM 地址 |
設(shè)定DDRAM地址 | 0 | 0 | 1 | 0 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 設(shè)定DDRAM 地址(顯示位址) [第一行:80H-A7H] [第二行:C0H-E7H] |
讀取忙標(biāo)志和地址 | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 讀取忙標(biāo)志(BF)可以確認(rèn)內(nèi)部動作是否完成,同時可以讀出地址計數(shù)器(AC)的值 |
寫數(shù)據(jù)到RAM | 1 | 0 | 數(shù)據(jù) | 將數(shù)據(jù)D7——D0寫入到內(nèi)部的RAM (DDRAM/CGRAM/IRAM/GRAM) | |||||||
讀出RAM的值 | 1 | 1 | 數(shù)據(jù) | 從內(nèi)部RAM讀取數(shù)據(jù)D7——D0(DDRAM/CGRAM/IRAM/GRAM) |
特性:
3.3V或5V工作電壓,對比度可調(diào)
內(nèi)含復(fù)位電路
提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能
有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM
內(nèi)建有192個5X7點陣的字型的字符發(fā)生器CGROM
8個可由用戶自定義的5X7的字符發(fā)生器CGRAM
測試電路原理圖:
測試代碼:
#include#define uchar unsigned char#define uint unsigned intsbit lcden=P3^2; //使能端sbit lcdrs=P3^0; //數(shù)據(jù)命令選擇端sbit rw=P3^1;uchar code table[]="xian shi 1"; //輸入的字符uchar code table1[]="xian shi 2"; //輸入的字符uchar num=0;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com)//根據(jù)寫時序圖寫出指令程序{lcdrs=0;rw=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date)//根據(jù)寫時序圖寫出數(shù)據(jù)程序{lcdrs=1;rw=0;P1=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){lcden=0; //使能端為低電平write_com(0x38);/*顯示模式設(shè)置 00111000 設(shè)置16*2顯示 5*7點陣 8位數(shù)據(jù)接口*/write_com(0x0f);/*顯示開關(guān)及光標(biāo)設(shè)置 00001DCBD=1,開顯示 D=0, 關(guān)顯示C=1,顯示光標(biāo) C=0,不顯示光標(biāo)B=1,光標(biāo)閃爍 B=0,光標(biāo)不閃爍*/write_com(0x06);//地址指針自動+1且光標(biāo)+1,寫字符屏幕不會移動write_com(0X01);write_com(0X80); }void main(){init();for(num=0;num<10;num++) //輸入的字符數(shù)量,修改{write_data(table[num]);delay(50);}write_com(0X80+0x40);for(num=0;num<10;num++) //輸入的字符數(shù)量,修改{write_data(table1[num]);delay(50);}while(1);}
測試效果:
評論