最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

液晶顯示(二)-----字符控制IC-ST7066應(yīng)用

2022-05-30 08:21 作者:e小白官方  | 我要投稿

本文作者:顯示行家,e小白網(wǎng)址:www.e-xiaobai.com

在單色LCD應(yīng)用中,字符液晶模組是應(yīng)用很廣泛的一種顯示組件。到目前為止,像16x2,20x2,24x2的字符模組還有廣泛應(yīng)用。前面說過,要實(shí)現(xiàn)LCD顯示,必須搭配合適的控制驅(qū)動電路才能實(shí)現(xiàn)顯示功能。ST7066就是一顆專為實(shí)現(xiàn)字符顯示的控制IC。由臺灣ST(矽創(chuàng))推出,成為最早替代HD44780(日立)和S6A0069(三星)字符控制IC的公司之一。雖然目前有國內(nèi)的AIP31066(無錫中微愛芯)、UCI7066(臺灣晶宏)的替代品出現(xiàn),但ST7066還是占有比較大的應(yīng)用。這幾家的芯片基本可以兼容替換。這里就以ST7066為例,介紹字符液晶模組的驅(qū)動方式。

? ? ??先介紹幾個單色LCD驅(qū)動控制常用的術(shù)語:

? ? ? VDD(VCC)----指IC工作電壓,通常2.7-5.5V;

? ? ? VOP(VLCD)----指能驅(qū)動LCD顯示的電壓,段碼類和字符類一般不超過5V;點(diǎn)陣類最高可到24.0V;

? ? ? DUTY----可簡單理解為顯示行數(shù)的倒數(shù),如1/16duty,實(shí)際驅(qū)動行數(shù)16行;

? ? ? BIAS----可簡單理解為把顯示電壓進(jìn)行分壓的分壓比,BIAS跟DUTY有直接關(guān)系,一般1/4DUTY-->1/3bias;1/16DUTY--? ? >1/5bais;1/32DUTY-->1/6bias;1/64DUTY-->1/9bias;1/128DUTY-->1/12bias;1/240DUTY-->1/16bias;

? ? ? COM----行驅(qū)動;

? ? ? SEG----列驅(qū)動;

? ? ? CGROM----內(nèi)部字符只讀存儲器,ST7066自帶240個標(biāo)準(zhǔn)西文字符,出廠時已經(jīng)寫人ROM內(nèi),用戶不可更改;

? ? ? CGRAM----內(nèi)部字符隨機(jī)存儲器,ST7066允許用戶自定義8個5x點(diǎn)陣或者4個5x11點(diǎn)陣字符;

? ? ? DDRAM----顯示數(shù)據(jù)存儲器,這個存儲器定義了顯示數(shù)據(jù)在內(nèi)存中的顯示地址(與顯示屏的位置對應(yīng))。ST7066滿屏最大顯示80個字符,第一行起始地址為0x80,結(jié)束地址0xCF(單行);如果是2或是4行顯示,則第二行的開始地址從0xC0開始;

一、基本特點(diǎn)

? ??ST7066本身帶有16個COM輸出,40個SEG輸出,按照西文字符5x8點(diǎn)陣格式,則可實(shí)現(xiàn)1行16個字符(16x1)或者2行8個字符(8x2);如果搭配ST7065(40列輸出)或者ST7063(80列輸出)驅(qū)動器,可實(shí)現(xiàn)顯示字符擴(kuò)充,最大可實(shí)現(xiàn)40x2個字符顯示。

? ? 工作電壓2.7-5.5V(IC),LCD顯示驅(qū)動電壓3.0-18.0V(超過VDD電壓時,需要外部供電);

? ? 支持4BIT/8BIT并口通訊(AIP和UC新推出的還支持SPI/IIC);

? ? 軟件可選擇DUTY,1/8,1/11,1/16duty;

? ? 內(nèi)部自帶240個5x8西文字符庫(CGROM),支持不同字庫(英日字庫ST7066-0A,英歐字庫ST7066-0B等),注意ST7066系列不支持漢字顯示,顯示漢字庫有另外的控制IC--ST7920,以后介紹;

二、應(yīng)用電路如下圖(以16x2字符模組為例)

圖中完整描述了ST7066和ST7065組合使用的接法(COM和SEG需要接到LCD對應(yīng)標(biāo)號即可),因?yàn)橐@示16x2行字符,按照單個字符需要5x8點(diǎn)陣(加上光標(biāo))計(jì)算,總共需要5x16=80列,2x8=16行才可以,一顆ST7066只有16行x40列,因此需要搭配1顆ST7065,剛好可實(shí)現(xiàn)16x80點(diǎn)陣顯示。

? ? 采用1/16duty的VOP一般不超過5.0V(大多4.8V左右),因此不需要外加電壓,只需從VDD(5.0V)中分壓即可。圖中R2-R6構(gòu)成BIAS電路(VO端可直接接地),正常情況下R2-R6取等值(1K-10K),根據(jù)顯示效果調(diào)整,也可外接電位器調(diào)節(jié)。Bias與Duty關(guān)系如下圖:

三、參考例程(通過C51測試,可直接引用修改)

/**************************************/

/*? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? */

/*? ? ? this is a sample program? ? ? */

/*? ? ? ? ? for C1602? ,8Bit-6800? ? ?*/

/*? ? ? IC:ST7066U-0A /0B/0E? ? ? ? ? */

/**************************************/

#include

#include

#define Dat? ?P1? ? ? ? ? // MCU P1 Connect To LCM?

sbit RS = P2^7;? // Command or Data Select,1:DATA , 0:COMMAND??

sbit RW = P2^6; // 1:Read; 0: Write

sbit EN = P2^5; // Enable, 0?

sbit LED1? ?= P3^7;?

#define uchar unsigned char

#define uint? unsigned int

/*------------------延時子程序1--------------------------*/

void nop(uint t) ??

{

? while(t--)

_nop_();

}

/*------------------延時子程序2---------------------------*/

void delay(uint t)

{

? while(t--)

{? nop(500);}


}

/*------------------ 讀狀態(tài)字子程序-----------------------*/

uchar Read_state(void)

{?

uchar State=0x00;??

Dat=0x00;? ? ? ? ? ? ? ? //注意這里如果是0xff會導(dǎo)致處于busy狀態(tài)

RS=0; ??

RW=1; ? nop(1);

EN=1; ? nop(1);

State=Dat;nop(2); //讀狀態(tài)的高4位

EN=0; ??

return(State); ? ? ? ? ?//返回狀態(tài)值

}?


/*------------------ 判忙子程序,可以不采用---------------------------*/

void CheckBusy(void)

{ uchar Busy;

do{

Busy=Read_state();??

? }

? while((Busy&0x80)==0x80); ? //如果BF=1,則判忙,等待繼續(xù)查詢;否則跳出

}


/*---------------- 4bit子程序---------------------*/

void Write(uchar flag,uchar n)

{

RS=flag;

RW=0;? ? ? ? ? ? ? nop(1);

EN=1;? ? ? ? ? ? ? nop(1);

Dat=(0xf0&n); ? ?nop(2);? ? ? ? ? ? ? ? ?//屏蔽低4位,保留高4位

EN=0;? ? ? ? ? ? ? ? nop(1);

}

/*---------------- 8bit命令子程序---------------------*/ ? ?

void Writecom(uchar n)

{??

CheckBusy();

Write(0,n); ?

}

/*---------------- 8bit數(shù)據(jù)子程序---------------------*/

void Writedata(uchar n)

{? ??

? ? ? ? CheckBusy();

? ? ? ? Write(1,n);?

}

?

/*------------------初始化LCD屏-----------------------------*/

void InitLCD(void)

{

? ? delay(15);

? ? Write(0,0x38);? delay(15);? ? ? //設(shè)置工作方式8bit,2行顯示,5x8點(diǎn)陣,1/16duty;? ?0x28=4BIT,2行顯示

? ? Write(0,0x38);? nop(100);? ? ? ?//可以不保留

? ? Writecom(0x06); nop(10) ;? ? // 設(shè)置輸入方式: 數(shù)據(jù)讀寫后DDRAM地址自動加1,光標(biāo)右移

? ? Writecom(0x0F); nop(10) ;? ? // 開顯示,開光標(biāo)及光標(biāo)閃爍;0x00=關(guān)顯示

? ? Writecom(0x01); nop(10) ;? ?// 清屏?

?

?}

??

void ClearLCD()? ? ? ? ? ? ? ? ? ? //清屏

{

? ? ?Writecom(0x01); nop(4);

}


void writelcd(uchar m,uchar n)? ? ?//連續(xù)寫入指令或數(shù)據(jù),0(m)--指令,1(n)--數(shù)據(jù)

{?

? Writecom(m);

? Writedata(n);

}


/--------------------------以下是主測試程序--------------------------------/

main() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

{??

? ?uint i,k=0;

? ?InitLCD();


? ?while(1)

? {

? ? for(m=0;m<8;m++)? ? ? ? ? ? ? ? ? ? ? ?//顯示字庫表(CGROM)中256個字符,

? ? { ?

? ? ? for(i=0;i<16;i++)

? ? ? {? ?

? ? ? ? writelcd(0x80+i,k++) ;? ? ? ? ? ? ?//第1行16個字符,起始地址0x80,首16個會隨機(jī)顯示,忽略

? ? ? }

? ? ? ? for(i=0;i<16;i++)

? ? ? {? ?

? ? ? ? writelcd(0xC0+i,k++) ;? ? ? ? ? ? ?//第2行16個字符,起始地址0xc0,正常字符開始顯示

? ? ? }

delay_ms(n);


? ? ?}

ClearLCD();

?

k=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//256個字符顯示完畢,計(jì)數(shù)器置0? ? ? ? ? ? ? ? ? ??

?

for(i=0;i<16;i++)

? ?{??

? ? ? writelcd(0x80+i,'8') ;? ? ? ? ? ? ?//顯示2行8字

? ? ? writelcd(0xC0+i,'8') ;

? ?}?

delay(100);

? ? ?} ?

? ? ?

? }

? ? 編譯通過,即可看到如下圖顯示

LCD模式不同,顯示效果不同,驅(qū)動原理一樣。

液晶顯示(二)-----字符控制IC-ST7066應(yīng)用的評論 (共 條)

分享到微博請遵守國家法律
安顺市| 新密市| 宣汉县| 虎林市| 神池县| 股票| 长顺县| 岐山县| 玉龙| 大邑县| 开封县| 蓝田县| 电白县| 连云港市| 泊头市| 巴里| 休宁县| 阿巴嘎旗| 渭南市| 遂平县| 泽州县| 华蓥市| 肇源县| 松阳县| 静宁县| 弋阳县| 泾川县| 宝鸡市| 双柏县| 黎城县| 新田县| 新乐市| 丹江口市| 桃园市| 福建省| 荔浦县| 通道| 临朐县| 耒阳市| 宁强县| 屯留县|