乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      LCD12864(不帶字庫(kù))

       ylw527 2011-01-26

       LCD12864(不帶字庫(kù))

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

      這個(gè)程序浪費(fèi)了我很多時(shí)間,因?yàn)槲乙恢睕]有找到datasheet,12864的型號(hào)實(shí)在太多了。為了這個(gè)程序,我在網(wǎng)上找了很多相關(guān)的例程,但大多都是C語言寫的,可惜俺沒學(xué)過C,用起來不順手,遂將其轉(zhuǎn)成匯編,但是轉(zhuǎn)后,程序運(yùn)行不正常,郁悶啊。好不容易找個(gè)匯編的吧,又寫得很亂,沒有頭緒,沒有datasheet,看起來很費(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í)來代替忙信號(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)論公約

        類似文章 更多