林嘉
摘要:液晶顯示器以其零輻射,低耗能,散熱小,纖薄輕巧等諸多優(yōu)點,已經(jīng)在各個領(lǐng)域中得到了廣泛的應(yīng)用。LCD1602作為現(xiàn)在電子產(chǎn)品的通用器件,一般用于顯示數(shù)字、專用符號和圖形。該文采用單片機系統(tǒng)對LCD1602進(jìn)行控制,分析LCD1602液晶顯示器的管腳功能,對LCD1602顯示進(jìn)行程序設(shè)計。
關(guān)鍵詞:單片機;LCD1602;程序設(shè)計
中圖分類號:TP 368.2文獻(xiàn)標(biāo)識碼:B文章編號:1009-3044(2012)26-6376-03
Program Design of LCD1602 Based on the 89S52
LIN Jia
(HTC Hangzhou Information Technology Service Center, Hangzhou 363000, China)
Abstract: Liquid crystal display with their zero radiation, low energy consumption, small heat, fiber thin light, and many other advantages, has been widely used in various field. LCD1602 as electronic products a universal device, are used for display Num? bers, special symbols and graphics. This paper uses single- chip system to control LCD1602, analyzes the pin function of LCD1602 display, design the program of LCD1602 display.
Key words: single-chip; LCD1602; program design
1概述
采用單片機系統(tǒng)對LCD1602進(jìn)行控制,具有接口更加簡單可靠,編程易于實現(xiàn),操作更加方便,顯示質(zhì)量高的優(yōu)點。液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)到顯示目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。圖1為LCD1602與89S52的硬件連接圖.[1]
2 LCD1602簡介
LCD1602液晶顯示器是目前廣泛使用的一種字符型液晶顯示模塊[2]。它是由字符型液晶顯示屏(LCD)、控制驅(qū)動主電路HD44780及其擴展驅(qū)動電路HD44100,以及少量電阻、電容元件和結(jié)構(gòu)件等裝配在PCB板上而組成。LCD1602中,16代表每一行可以顯示16個字符,02代表總共可以顯示兩行字符。目前市場上的字符液晶通常有14條引腳或16條引腳,16條引腳多出來的兩條線是背光電源線和地線,表1為LCD1602的管腳功能。
LCD1602的Vss端需接一個電位器,用以調(diào)整流過液晶的電流,如果電流太大,會產(chǎn)生“鬼影”,使液晶顯示有重影現(xiàn)象,太小則整個屏幕比較暗,常用1K的調(diào)節(jié)電位,Vdd端連接5V電源電壓,Vee接地,RS為數(shù)據(jù)/命令選擇,RE為讀/寫選擇,E為使能信號,D0-D7為雙向數(shù)據(jù)線,BLA為背光電源正極,BLK為背光電源負(fù)極,可分別與5V電源正負(fù)極相連。
3程序的設(shè)計編寫
LCD液晶器件的軟件驅(qū)動程序為[3]:判斷液晶是否處于忙狀態(tài),若忙,則繼續(xù)進(jìn)行判定,當(dāng)不忙時,想液晶寫入命令,如讓液晶清屏、光標(biāo)向右移位、光標(biāo)是顯示是否打開等,這些都可以放在液晶初始化函數(shù)里實現(xiàn),在軟件編寫時將各自的頭文件包含在對方源文件中,互相調(diào)用。
下面分別為LCD1602顯示的源代碼及頭文件:
/ /液晶控制與顯示驅(qū)動源程序LCD1602.c//
#include
#include
#include
#include "LCD1602.h"
//---------------忙檢查-------------------//
uchar LCD_Busy_Check()
{uchar LCD_Status;
RS = 0;
RW = 1;
E = 1;
delay4us();
LCD_Status = P0;
E = 0;
return LCD_Status;
}
//--------------向LCD寫入命令--------------------//
void Write_LCD_Command(uchar cmd)
{while((LCD_Busy_Check()& 0x80)==0x80); //忙等待
RS = 0;
RW = 0;
E = 0;
P0 = cmd;
delay4us();
E = 1;
delay4us();
E = 0;
}
//-----------向LCD寫入一個字節(jié)的數(shù)據(jù)函數(shù)-----------------*/
void Write_LCD_Data(uchar dat)
{while((LCD_Busy_Check()&0x80)==0x80);
RS = 1;
RW = 0;
E = 0;
P0 = dat;
delay4us();
E = 1;
delay4us();
E = 0;
}
//-----------LCD初始化-----------------*/
void Initialize_LCD1602() //液晶初始化函數(shù)
{
Write_LCD_Command(0x38); //功能設(shè)置,數(shù)據(jù)長度為8位,雙行顯示,5×7點陣字體
delay50us(10);
Write_LCD_Command(0x0C); //顯示開,關(guān)光標(biāo)
delay50us(10);
Write_LCD_Command(0x06); //字符進(jìn)入模式:屏幕不動,字符后移
delay50us(10);
Write_LCD_Command(0x01); //清屏
delay50us(10);
}
//-----------在LCD上顯示字符串-----------------*/
void LCD_Display(uchar *str)
{
uchar i;
for(i=0;i { Write_LCD_Data(str[i]);delay50us(100); } / /液晶控制與顯示驅(qū)動頭文件LCD1602.h// #ifndef __lCD1602_H__ #define__LCD1602_H__ #include #define dat_port P0 #define uchar unsigned char #define uint unsigned int #define delay4us() {_nop_();_nop_();_nop_();_nop_();} sbit RS=P2^0;//RS=1數(shù)據(jù)RS=0命令 sbit RW=P2^1;//RW=1讀取RW=0寫入 sbit E=P2^2;//E使能信號 uchar LCD_Busy_Check();//忙檢查 void Write_LCD_Command(uchar cmd);//向LCD寫入命令 void Write_LCD_Data(uchar dat); //向LCD寫入一個字節(jié)的數(shù)據(jù)函數(shù) void Initialize_LCD1602(); //液晶初始化函數(shù) void LCD_Display(uchar *str);//在LCD上顯示字符串 #endif 接好硬件,通過冷啟動方式將程序所生成的.hex文件下載到單片機運行后,復(fù)位單片機,然后可在學(xué)習(xí)板上看到液晶的顯示的字符 4結(jié)束語 本文介紹了LCD1602的工作原理并介紹各管腳的功能,用C語言對LCD1602的顯示程序進(jìn)行設(shè)計,要想熟練的掌握對LCD1602編程,必須熟悉操作基本的編程語言,通過不斷的實踐,不斷的摸索,才能發(fā)現(xiàn)問題,對問題進(jìn)行分析,才能找出問題的解決方法,從而不斷的提高LCD1602的編程技巧,使程序得到最大程度的優(yōu)化。 參考文獻(xiàn): [1]趙亮.跟我學(xué)單片機(七)[J].電子制作,2011(7):74-77. [2]于志贛,劉國平,等.液顯LCD1602模塊的運用[J].機電技術(shù),2009(3):21-23. [3]劉伏文.單片機C和匯編語言混合編程[J].電子制作,2007(6).