免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
LCD12864(不帶字庫)

 LCD12864(不帶字庫)

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

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

→↑←   ONE→且看datasheet:


12864點陣型LCD簡介

    12864是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器/列驅(qū)動器及128×64全點陣液晶顯示器組成??赏瓿蓤D形顯示,也可以顯示8×4個(16×16點陣)漢字。









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

1. 指令寄存器(IR)

    IR是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對應。當D/I=0時,在E信號下降沿的作用下,指令碼寫入IR。

2.數(shù)據(jù)寄存器(DR)

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

3.忙標志:BF

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

    利用STATUS READ指令,可以將BF讀到DB7總線,從檢驗模塊之工作狀態(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信號控制的。

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

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

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

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

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

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

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

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

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

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

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




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

→↑← TWO→程序?qū)嵗?br>
;#############################################
;*********************************************
;程序名稱:LCD12864
;主控芯片:89c51,12MHZ
;編者心得:看別人程序不如仔細看datasheet
;移用核心:看datasheet按需要修改即可
;程序編寫者:buyixin (不亦心)
;編寫時間: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   ;用于記錄顯示個數(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è)置頁數(shù)(第4頁)
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 ;第五頁
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
;------實現(xiàn)左半屏顯示3個字---------------------------
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
;------實現(xiàn)右半屏顯示2個字-----------------------------
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)用延時子程序,這里用延時來代替忙信號檢測
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
;//////延時子程序//////////////////////////////////
DELAY:      MOV R7,#25H
DJNZ      R7,$
RET
;//////字型碼表////////////////////////////////////
TAB:
;-- 文字: 不 --
;-- 隸書12; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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; 此字體下對應的點陣為:寬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→硬件連接及仿真效果圖(僅為仿真目的,不做實際應用)


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
采用AT89C2051的數(shù)字可調(diào)穩(wěn)壓電源單片機源程序
adc0809轉(zhuǎn)換問題-偉納電子-http://www.willar.com/
成功做一只DS1302電子鐘(走時飛快)
射頻卡讀寫源代碼
用AT89C2051自制電子鐘(原理圖及匯編代碼)
E2PROM芯片24C02的讀寫程序
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服