日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

LCD12864(不帶字庫(kù))

 ylw527 2011-01-26

 LCD12864(不帶字庫(kù))

 
其實(shí)看了本版的1602教程以后很容易就可以掌握12864了。
剛才看到有網(wǎng)友要12864教程,俺就把博客里以前練習(xí)的一個(gè)程序弄過來(lái),算作參考吧。
不足之處請(qǐng)見諒。

這個(gè)程序浪費(fèi)了我很多時(shí)間,因?yàn)槲乙恢睕]有找到datasheet,12864的型號(hào)實(shí)在太多了。為了這個(gè)程序,我在網(wǎng)上找了很多相關(guān)的例程,但大多都是C語(yǔ)言寫的,可惜俺沒學(xué)過C,用起來(lái)不順手,遂將其轉(zhuǎn)成匯編,但是轉(zhuǎn)后,程序運(yùn)行不正常,郁悶啊。好不容易找個(gè)匯編的吧,又寫得很亂,沒有頭緒,沒有datasheet,看起來(lái)很費(fèi)勁,最后終于找到一個(gè)相關(guān)的datasheet,這才完成這個(gè)程序??偨Y(jié)一下:與其費(fèi)力分析別人的程序,不如看datasheet自己寫。下面總結(jié)一下datasheet。

→↑←   ONE→且看datasheet:


12864點(diǎn)陣型LCD簡(jiǎn)介

    12864是一種圖形點(diǎn)陣液晶顯示器,它主要由行驅(qū)動(dòng)器/列驅(qū)動(dòng)器及128×64全點(diǎn)陣液晶顯示器組成。可完成圖形顯示,也可以顯示8×4個(gè)(16×16點(diǎn)陣)漢字。


click here to enlarge






    在使用12864LCD前先必須了解以下功能器件才能進(jìn)行編程。12864內(nèi)部功能器件及相關(guān)功能如下:

1. 指令寄存器(IR)

    IR是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對(duì)應(yīng)。當(dāng)D/I=0時(shí),在E信號(hào)下降沿的作用下,指令碼寫入IR。

2.?dāng)?shù)據(jù)寄存器(DR)

    DR是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對(duì)應(yīng)。當(dāng)D/I=1時(shí),在下降沿作用下,圖形顯示數(shù)據(jù)寫入DR,或在E信號(hào)高電平作用下由DR讀到DB7∽DB0數(shù)據(jù)總線。DR和DDRAM之間的數(shù)據(jù)傳輸是模塊內(nèi)部自動(dòng)執(zhí)行的。

3.忙標(biāo)志:BF

    BF標(biāo)志提供內(nèi)部工作情況。BF=1表示模塊在內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù)。BF=0時(shí),模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù)。

    利用STATUS READ指令,可以將BF讀到DB7總線,從檢驗(yàn)?zāi)K之工作狀態(tài)。

4.顯示控制觸發(fā)器DFF

    此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。DFF=1為開顯示(DISPLAY OFF),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAY OFF)。

    DDF的狀態(tài)是指令DISPLAY ON/OFF和RST信號(hào)控制的。

5.XY地址計(jì)數(shù)器

    XY地址計(jì)數(shù)器是一個(gè)9位計(jì)數(shù)器。高3位是X地址計(jì)數(shù)器,低6位為Y地址計(jì)數(shù)器,XY地址計(jì)數(shù)器實(shí)際上是作為DDRAM的地址指針,X地址計(jì)數(shù)器為DDRAM的頁(yè)指針,Y地址計(jì)數(shù)器為DDRAM的Y地址指針。

    X地址計(jì)數(shù)器是沒有記數(shù)功能的,只能用指令設(shè)置。

    Y地址計(jì)數(shù)器具有循環(huán)記數(shù)功能,各顯示數(shù)據(jù)寫入后,Y地址自動(dòng)加1,Y地址指針從0到63。

6.顯示數(shù)據(jù)RAM(DDRAM)

    DDRAM是存儲(chǔ)圖形顯示數(shù)據(jù)的。數(shù)據(jù)為1表示顯示選擇,數(shù)據(jù)為0表示顯示非選擇。DDRAM與地址和顯示位置的關(guān)系見DDRAM地址表。

7.Z地址計(jì)數(shù)器

    Z地址計(jì)數(shù)器是一個(gè)6位計(jì)數(shù)器,此計(jì)數(shù)器具備循環(huán)記數(shù)功能,它是用于顯示行掃描同步。當(dāng)一行掃描完成,此地址計(jì)數(shù)器自動(dòng)加1,指向下一行掃描數(shù)據(jù),RST復(fù)位后Z地址計(jì)數(shù)器為0。

    Z地址計(jì)數(shù)器可以用指令DISPLAY START LINE預(yù)置。因此,顯示屏幕的起始行就由此指令控制,即DDRAM的數(shù)據(jù)從哪一行開始顯示在屏幕的第一行。此模塊的DDRAM共64行,屏幕可以循環(huán)滾動(dòng)顯示64行。

12864LCD的指令系統(tǒng)及時(shí)序

    該類液晶顯示模塊(即KS0108B及其兼容控制驅(qū)動(dòng)器)的指令系統(tǒng)比較簡(jiǎn)單,總共只有七種。其指令表如表2所示:


click here to enlarge

其他的自己下個(gè)datasheet好好看吧,這里不再截圖了。
不過我要強(qiáng)調(diào)關(guān)于行列和頁(yè)的解釋:從上向下共64行,每8行為一頁(yè),共八頁(yè),從左到右共128列,左半屏0到63列,右半屏0到63列。顯示的時(shí)候,每頁(yè)以列為單位顯示。

→↑← TWO→程序?qū)嵗?br>
;#############################################
;*********************************************
;程序名稱:LCD12864
;主控芯片:89c51,12MHZ
;編者心得:看別人程序不如仔細(xì)看datasheet
;移用核心:看datasheet按需要修改即可
;程序編寫者:buyixin (不亦心)
;編寫時(shí)間:2009年10月10日 20:33                    

;不亦心的博客:http://hi.baidu.com/不亦心/

;*********************************************
;#############################################
;//////變量申明///////////////////////////////
E         BIT    P3.0 ;LCD 使能端
RW        BIT    P3.1 ;LCD 讀/寫端
RS        BIT    P3.2 ;命令/數(shù)據(jù)控制端
CS1       BIT    P3.3 ;左半屏
CS2       BIT    P3.4 ;右半屏
WR_DATA   DATA   30H ;數(shù)據(jù)暫存區(qū)
Y         DATA   31H ;列數(shù)據(jù)暫存區(qū)
;//////主程序開始//////////////////////////////
ORG       0000H
AJMP      START
ORG       0030H
START:      MOV SP,#60H   ;設(shè)置堆棧
LCALL     CLR_Screen    ;調(diào)用清屏子程序
LCALL     Init          ;調(diào)用初始化子程序
;------左半屏顯示------------------------------
REP:        MOV R2,#00H   ;用于記錄顯示個(gè)數(shù)
MOV       Y,#00H        ;用于增加LCD列數(shù)
MOV       DPTR,#TAB     ;取字碼
;------左上半字顯示------------------------------
REP1:       MOV R3,#10H   ;記錄列數(shù)
MOV       WR_DATA,#0C0H ;設(shè)置行數(shù)(第一行開始顯示)
LCALL     WR_Left_COM   ;調(diào)用左半屏寫命令子程序
MOV       WR_DATA,#0BBH ;設(shè)置頁(yè)數(shù)(第4頁(yè))
LCALL     WR_Left_COM  
CLR       A             ;設(shè)置顯示開始列數(shù)  
ADD       A,Y
ADD       A,#50H
MOV       WR_DATA,A
LCALL     WR_Left_COM
REP2:       MOV A,#00H
MOVC      A,@A+DPTR
MOV       WR_DATA,A
LCALL     WR_Left_Byte ;調(diào)用左半屏寫數(shù)據(jù)子程序
INC       DPTR
DJNZ      R3,REP2
;------左下半字顯示--------------------------------
MOV       R3,#10H;左下
MOV       WR_DATA,#0C0H
LCALL     WR_Left_COM
MOV       WR_DATA,#0BCH ;第五頁(yè)
LCALL     WR_Left_COM
CLR       A
ADD       A,Y
ADD       A,#50H
MOV       WR_DATA,A
LCALL     WR_Left_COM
REP3:       MOV A,#00H
MOVC      A,@A+DPTR
MOV       WR_DATA,A
LCALL     WR_Left_Byte
INC       DPTR
DJNZ      R3,REP3
;------實(shí)現(xiàn)左半屏顯示3個(gè)字---------------------------
INC       R2
MOV       A,y
ADD       A,#10H
MOV       Y,A
CJNE      R2,#03H,REP1
;------右半屏顯示------------------------------------
MOV       R2,#00H
MOV       Y,#00H
;------右上半字顯示----------------------------------
REP4:      MOV R3,#10H
MOV       WR_DATA,#0C0H
LCALL     WR_Right_COM ;調(diào)用右半屏寫入命令子程序
MOV       WR_DATA,#0BBH
LCALL     WR_Right_COM
CLR       A
ADD       A,Y
ADD       A,#40H
MOV       WR_DATA,A
LCALL     WR_Right_COM
REP5:       MOV A,#00H
MOVC      A,@A+DPTR
MOV       WR_DATA,A
LCALL     WR_Right_Byte ;調(diào)用右半屏寫入數(shù)據(jù)子程序
INC       DPTR
DJNZ      R3,REP5
;------右下半字顯示----------------------------------
MOV       R3,#10H
MOV       WR_DATA,#0C0H
LCALL     WR_Right_COM
MOV       WR_DATA,#0BCH
LCALL     WR_Right_COM
CLR       A
ADD       A,Y
ADD       A,#40H
MOV       WR_DATA,A
LCALL     WR_Right_COM
REP6:       MOV A,#00H
MOVC      A,@A+DPTR
MOV       WR_DATA,A
LCALL     WR_Right_Byte
INC       DPTR
DJNZ      R3,REP6
;------實(shí)現(xiàn)右半屏顯示2個(gè)字-----------------------------
INC       R2
MOV       A,y
ADD       A,#10H
MOV       Y,A
CJNE      R2,#02H,REP4
;------循環(huán)顯示----------------------------------------
LJMP      REP
;//////初始化子程序///////////////////////////////////
Init:       MOV WR_DATA,#3EH ;關(guān)顯示
LCALL     WR_COM           ;調(diào)用全屏寫入命令子程序
MOV       WR_DATA,#3FH     ;開顯示
LCALL     WR_COM
RET
;//////左半屏寫入字節(jié)子程序///////////////////////////
WR_Left_Byte: CLR CS1       ;選擇左半屏
SETB      CS2            
CLR       RW               ;寫
SETB      RS               ;選擇寫命令
MOV       A,WR_DATA
SETB      E
MOV       P0,A
CLR       E
LCALL     DELAY            ;調(diào)用延時(shí)子程序,這里用延時(shí)來(lái)代替忙信號(hào)檢測(cè)
RET
;//////右半屏寫入字節(jié)子程序///////////////////////////////
WR_Right_Byte: SETB CS1    
CLR       CS2
CLR       RW
SETB      RS
MOV       A,WR_DATA
SETB      E
MOV       P0,A
CLR       E
LCALL     DELAY
RET
;//////全屏寫入字節(jié)子程序////////////////////////////////
WR_Byte:    CLR CS1
CLR       CS2
CLR       RW
SETB      RS
MOV       A,WR_DATA
SETB      E
MOV       P0,A
CLR       E
LCALL     DELAY
RET
;//////左半屏寫入命令子程序/////////////////////////////
WR_Left_COM: CLR CS1
SETB      CS2
CLR       RS
CLR       RW
MOV       A,WR_DATA
SETB      E
MOV       P0,A
CLR       E
LCALL     DELAY
RET
;//////右半屏寫入命令子程序//////////////////////////////////
WR_Right_COM: SETB CS1
CLR       CS2
CLR       RS
CLR       RW
MOV       A,WR_DATA
SETB      E
MOV       P0,A
CLR       E
LCALL     DELAY
RET
;//////全屏寫入命令字程序/////////////////////////////////////
WR_COM:     CLR CS1
CLR       CS2
CLR       RS
CLR       RW
MOV       A,WR_DATA
SETB      E
MOV       P0,A
CLR       E
LCALL     DELAY
RET
;//////全屏清屏子程序//////////////////////////////////////////
CLR_Screen: MOV WR_DATA,#0C0H
LCALL     WR_COM
MOV       R0,#0B8H
MOV       R1,#00H
LOOP:       MOV WR_DATA,R0
LCALL     WR_COM
MOV       WR_DATA,#40H
LCALL     WR_COM
LOOP1:      MOV WR_DATA,#0FFH ;全屏清黑(這里我是用反色顯示漢字的)
LCALL     WR_Byte
INC       R1
CJNE      R1,#40H,LOOP1
INC       R0
CJNE      R0,#0C0H,LOOP
RET
;//////延時(shí)子程序//////////////////////////////////
DELAY:      MOV R7,#25H
DJNZ      R7,$
RET
;//////字型碼表////////////////////////////////////
TAB:
;-- 文字: 不 --
;-- 隸書12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --
DB 0FFH,0FFH,0FFH,0DFH,0CFH,0CFH,0DFH,1FH,1FH,5FH,0DFH,0DFH,0DFH,0FFH,0FFH,0FFH
DB 0FFH,0F7H,0F7H,0F3H,0FBH,0F9H,0FCH,0C0H,0C0H,0FFH,0FEH,0FCH,0F1H,0F3H,0F7H,0F7H

;-- 文字: 亦 --
;-- 隸書12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --
DB 0FFH,0BFH,0BFH,0BFH,3FH,0DFH,1FH,0CFH,0CFH,1FH,0DFH,9FH,9FH,0BFH,0BFH,0FFH
DB 0FFH,0FFH,0EBH,0ECH,0E6H,0F3H,0F8H,0EFH,0EFH,0E0H,0FFH,0FEH,0FDH,0FBH,0FFH,0FFH

;-- 文字: 心 --
;-- 隸書12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --
DB 0FFH,0FFH,7FH,0FFH,7FH,0FFH,0FFH,3FH,8FH,0FFH,7FH,3FH,0BFH,0FFH,0FFH,0FFH
DB 0F7H,0F1H,0F8H,0FFH,0FEH,0FEH,0FCH,0F9H,0F3H,0F1H,0E6H,0E7H,0C7H,0E7H,0E7H,0FFH

;-- 文字: 制 --
;-- 隸書12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --
DB 0FFH,7FH,0BFH,8FH,0BFH,0FH,2FH,3FH,0BFH,0FFH,1FH,0FFH,0CFH,0FH,0FFH,0FFH
DB 0FEH,0FEH,0EEH,0E0H,0FCH,0C0H,0FCH,0F9H,0E1H,0EFH,0E8H,0CFH,0C7H,0E0H,0FFH,0FFH

;-- 文字: 作 --
;-- 隸書12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --
DB 0FFH,9FH,9FH,1FH,1FH,6FH,0BFH,9FH,0CFH,0FH,9FH,9FH,9FH,0BFH,0BFH,0FFH
DB 0FFH,0FFH,0FFH,0E0H,0E0H,0FFH,0FFH,0FFH,0FFH,0C0H,0FAH,0FAH,0FAH,0FAH,0FBH,0FFH
;//////程序結(jié)束/////////////////////////////////////////////
END

以上程序我用的是反顯。
→↑← THREE→硬件連接及仿真效果圖(僅為仿真目的,不做實(shí)際應(yīng)用)


click here to enlarge

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多