久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4389|回復: 7
打印 上一主題 下一主題
收起左側

誰有51控制DS12C887的程序,還有8279的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:53053 發表于 2015-7-29 22:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
誰有51控制DS12C887的程序,還有8279的程序,初學者望大神施舍啊
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:53053 發表于 2015-7-29 22:19 | 只看該作者
我的郵箱:1039633544@qq.com
回復

使用道具 舉報

板凳
ID:7485 發表于 2015-7-31 13:19 | 只看該作者
看看這個: DS12C887中文資料[1].pdf (339.85 KB, 下載次數: 17)
回復

使用道具 舉報

地板
ID:7485 發表于 2015-7-31 13:27 | 只看該作者
;*******************************************
;處理DS12887中斷子程序
;判斷中斷源,轉相應處理子程序
;::::三個中斷的響應順序要注意!!!
;*******************************************
INT12887:
                MOV    DPTR, #7F0CH                 ;讀12887 C寄存器,判中斷源
                MOVX   A, @DPTR                                                        ;讀c寄存器后所有標志清除
;                MOV    21H,  A                     ;暫時保存中斷標志
;                JNB    21H.7, INT12887RETI         ;21.7H=IRQF,=0,表示沒有中斷
;
;                JNB    21H.4, INT12887A                          ;如果不是更新中斷,轉
                CALL   DU12887                                                         ;是更新中斷轉讀12887時間值
;INT12887A:                                                                                   ;3個中斷可能同時發生,所以要繼續處理下一個
;                JNB    21H.5,  INT12887B                         ;如果不是報警中斷,轉
;                CALL   BAO_JING                    ;轉處理12887報警中斷子程序
;INT12887B:
;                JNB    ACC.6,  INT12887RETI               ;如果不是周期中斷,轉
;                CALL   ZHOU_QI                     ;轉處理12887周期中斷子程序
;INT12887RETI:
;                CALL   DISPLAY                     ;每秒中斷一次,同時掃描一次(CH453靜態)
                RETI                                ;顯示掃描要用定時器中斷,否則處理鍵盤時沒顯示
;**********************************************
;讀12887時間值
;**********************************************
DU12887:
                MOV    DPTR, #7F00H      ;DS12887的片選接的是P2.7,所以秒地址=7F00H
                MOVX   A,  @DPTR                ;"秒"地址,讀秒
                MOV    SEC, A         
                MOV    DPTR,#7F00H+2     ;"分"地址,
                MOVX   A,@DPTR           ;讀分
                                     MOV    MIN, A
                MOV    DPTR,#7F00H+4     ;"時"地址,
                MOVX   A,  @DPTR         ;讀小時
                MOV    HOUR, A
                INC    DPL
                INC    DPL                                    ;"星期"地址,
                MOVX   A,@DPTR           ;讀星期
                MOV    WEEK, A
                INC    DPTR                                   ;"日"地址
                MOVX   A,  @DPTR         ;讀日  
                MOV    DATE, A
                INC    DPTR                                   ;"月"地址
                MOVX   A,@DPTR
                MOV    MONTH, A          ;讀月
                INC    DPTR                                   ;"年"地址
                MOVX   A,  @DPTR         ;讀年  
                MOV    YEAR, A
                RET
;**********************************************
;處理12887周期中斷子程序(暫時空)
;**********************************************
ZHOU_QI:
           RET
;**********************************************
;處理12887報警中斷子程序(暫時空)
;**********************************************
BAO_JING:
           RET
;**********************************************
;初始化12887
;**********************************************
SET12887:
             PUSH   ACC
             PUSH   DPH
             PUSH   DPL
             MOV    DPTR, #7F0EH                 ;上電時,轉這里進行初始化DS12887
             MOVX   A, @DPTR                     ;判斷有無"初始化過"標記
             CJNE   A, #0A5H,SET12887A           ;如果沒有設置過,轉去設置
             JMP    SET12887RET                  ;已經設置過,退出
SET12887A:                                       ;沒有設置過標記轉這里開始設置12887                               
             MOV        SEC,  #00                                                   ;秒初值
             MOV        MIN,  #23                       ;分初值
             MOV        HOUR, #19                                                   ;時初值
             MOV        WEEK, #06                                                   ;星期初值
             MOV        DATE, #22                                                   ;日初值
             MOV        MONTH,#10                                                   ;月初值
             MOV        YEAR, #11                                                   ;年初值
             CALL   W_12887                      ;將初始值寫入,否則任意值不方便調整。
                                  MOV    DPTR, #7F0EH
                                  MOV    A,#0A5H                      ;設置"已經初始過DS12887"標記
             MOVX   @DPTR,A
SET12887RET:
             POP    DPL
             POP    DPH
             POP    ACC
             RET
;--------------------------------------------------------------
W_12887:                                         ;寫入12887       
             PUSH   ACC
             PUSH   DPH
             PUSH   DPL            
;             MOV    DPTR, #7f0AH
;             MOV    A, #01110000B              ;停止12887,高4位只有0010能啟動
;             MOVX   @DPTR,A
             MOV    DPTR, #7f0BH
             MOV    A, #1010010B                ;停止12887,高4位只有0010能啟動
             MOVX   @DPTR,A

             INC    DPTR
             MOV    A,#10000110B                 ;設置寄存器B,停止更新
             MOVX   @DPTR,A
             MOV    DPTR,#7f00H                  ;設置秒
             MOV    A,SEC
             MOVX   @DPTR,A
             INC    DPTR                         ;設置秒報警
             MOV    A, #0FFH                                                        ;不關心碼
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,MIN                        ;設置分
             MOVX   @DPTR,A
             INC    DPTR                         ;設置分報警
             MOV    A, #0FFH                     ;不關心碼
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,HOUR                       ;設置時
             MOVX   @DPTR,A
             INC    DPTR                         ;設置時報警
             MOV    A, #0FFH                                                        ;不關心碼
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,WEEK                       ;設置星期
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,DATE                       ;設置日
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,MONTH                      ;設置月
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,YEAR                       ;設置年
             MOVX   @DPTR,A
             MOV    DPTR, #7f0AH
             MOV    A, #00100000B                ;設置寄存器A,啟動12887,中斷周期64HZ
             MOVX   @DPTR,A
             MOV    DPTR, #7f0CH                 ;讀一次寄存器C,清除中斷標志,否則下次無法中斷。
             MOVX   A, @DPTR                                        
             MOV    DPTR, #7f0DH
             MOVX   A, @DPTR                     ;讀一次寄存器D,自動置VRT=1,內部RAM和寄存器有效
             MOV    A,#00010110B                 ;啟動,關周期、關報警、開更新中斷,(接下行)   
             MOV    DPL,#0BH                     ;關方波輸出,二進制,24小時,無夏令時
             MOVX   @DPTR,A
             POP    DPL
             POP    DPH
             POP    ACC
             RET
回復

使用道具 舉報

5#
ID:7485 發表于 2015-7-31 13:29 | 只看該作者
本帖最后由 ahshmj 于 2015-7-31 13:33 編輯

這是我做的12864顯示的萬年歷中的有關DS12c887的部分程序。
我這里用的ds12c887的地址是自己的硬件所決定的,你要根據自己的硬件電路修改。
回復

使用道具 舉報

6#
ID:7485 發表于 2015-7-31 13:42 | 只看該作者
本帖最后由 ahshmj 于 2015-7-31 13:49 編輯

8279鍵盤、顯示接口芯片
序號:6-10
生產廠家:Intel公司
特性:Intel8279芯片是一種通用的可編程序的鍵盤、顯示接口器件,單個芯片就能完成鍵盤輸入和LED
顯示控制兩種功能。其內部結構如圖6-10-1所示。8279包括鍵盤輸入和顯示輸出兩個部分。
      鍵盤部分提供的掃描方式,可以和64個按鍵或傳感器的陣列相連。能自動消除開關抖動以及N個鍵
同時按下的保護。
      顯示部分按掃描的方式工作。可以顯示8或16位LED顯示塊。
      一、8279電路工作原理
      根據結構框圖,分別介紹各部分電路工作原理。
      1.I/O控制及數據緩沖器
      數據緩沖器是雙向緩沖器,連接內、外總線,用于傳送CPU和8279之間的命令或數據;I/O控制線是
CPU對8279進行控制的引線。CS是8279的片選信號,CS=0時,8279才被允許讀出或寫入信息。WR、RD為來自
CPU的控制信號。
      A0用于區別信息特性:A0=1時,表示數據緩沖器輸入為指令、輸出為狀態字;A=0時,輸入、輸出皆為數據。
      2.控制與定時寄存器及定時控制
      控制與定時寄存器用來寄存鍵盤及顯示的工作方式,以及由CPU編程的其它操作方式。這些寄存器一旦接受并鎖存送來的命令,就通過譯碼產生相應的信號,從而完成相應的控制功能。
      定時控制包含基本記數鍵。首級計數器是一個可編程的N級計數器。N可以2~31之間由軟件編程,以便
從外界時鐘CLK分頻得到內部所需要的100KHZ時鐘。然后再經過分頻為鍵盤掃描提供適當的逐行掃描頻率和顯示掃描時間。
     3.掃描計數器
      掃描計數器有兩種工作方式。按編碼方式工作時,計數器作二進制記數。4位記數狀態從掃描線SL0~SL3
輸出,經外部譯碼器譯碼后,為鍵盤和顯示器提供掃描線;按譯碼方式工作時,掃描計數器的最低二位被譯碼后,從SL0~SL3輸出。因此,SL0~SL3提供了4中取1的掃描譯碼。
     4.回復緩沖器、鍵盤去抖及控制
     來自RL0~RL3的8根回復線的回復信號,由回復緩沖器緩沖并鎖存。
     在鍵盤工作方式中,回復線作為行列式鍵盤的行列輸入線。在逐行列輸入時,在逐行列掃描時,回復線用來搜索每一行列中閉合的鍵。當某一鍵閉合時,去抖電路被置位,延時等待10ms后,再檢驗該鍵是否繼續閉和,并將該鍵的地址和附加的移位、控制狀態一起形成鍵盤數據被送入8279內部FIFO(先進先出)存儲器。鍵盤數據格式如下:
                                                                     D7   D6   D5   D4   D3   D2   D1   D0
控制        移位        掃描        回復
     控制和移位(D6、D7)的狀態由兩個獨立的附加開關決定,而掃描(D5、D4、D3)和回復(D2、D1、D0)則是被按鍵置位的數據。D5、D4、D3來自動掃描計數器,是按下鍵的行列編碼,而(D7D7D7)則來自行/列計數器,它們是根據回復信號而確定的行/列編碼。
     在傳感器開關狀態矩陣方式中,回復線的內容直接被送往和相應的傳感器RAM(即FIFO存儲器)。
在選通輸入方式中,回復線的內容在CNTL/STB線的脈沖上升沿被送入FIFO存儲器。
      5.FIFO/傳感器及其狀態寄存器
FIFO/傳感器RAM是一個雙重功能的8×8RAM。
     在鍵盤或選通方式工作時,它是FIFO存儲器,其輸入或讀出遵循先入先出的原則。FIFO狀態寄存器用于存放FIFO的工作狀態。例如,RAM是滿還是空;其中存有多少數據;是否操作出錯等。當FIFO存儲器不空,狀態邏輯將產生IRQ=1信號向CPU申請中斷。
     在傳感器矩陣方式工作時,這個存儲器以是傳感器不是存儲器。它存放著傳感器矩陣中的每一個傳感器狀態。在此方式中,若檢索出傳感器的變化,IRQ信號變為高電平,向CPU申請中斷。
     6.顯示RAM和顯示地址寄存器
    顯示RAM用來存儲顯示數據。容量為16×8位。在顯示過程中,存儲的顯示數據輪流從顯示寄存器輸出。顯示寄存器分別為A、B兩組,OUTA0~3和OUTB0~3可以單獨送數,也可以組成一個8位的字。顯示寄存器的輸出與顯示掃描配合,不斷從顯示RAM中讀出顯示數據,同時輪流驅動被選中的顯示器件,以達到多路復用的目的,使顯示器件呈現穩定的顯示狀態。
    顯示地址寄存器用來寄存由CPU進行讀/寫顯示RAM的地址,它可以由命令設定,也可以設置成每次讀寫或寫入之后自動遞減。
    二.管腳、引線與功能
    8279采用40引腳封裝,其管腳、引線功能如圖6-10-2所示。其引腳功能如下:
     D0~D7(數據總線):雙向、三態總線,和系統數據總線相連;用于CPU和8279間的數據/命令傳遞。
     CLK(系統時鐘):輸入線,為8279提供內部時鐘的輸入端。
  RESET(復位):輸入線,當RESET=1時,8279復位,其復位狀態為:
    16個字符顯示;
    編碼掃描鍵盤--雙鍵鎖定;
  程序時鐘編碼為31。
    CS(片選):輸入線,當CS=0時8279被選中,允許CPU對其讀、寫,否則被禁止。
    A0(數據選擇):輸入線。當A0=1時CPU寫入數據為命令字,讀出數據為狀態字;A0=0時CPU讀、寫的字節均為數據。
    RD、WR(讀、寫信號):輸入線。低電平有效,來自CPU的控制信號,控制8279的讀、寫操作。
    IRQ(中斷請求):輸出線。高電平有效。
    在鍵盤工作方式中,當FIFO/傳感器RAM存有數據時,IRQ為高電平。CPU每次從RAM中讀出數據時,IRQ變為低電平。若RAM中仍有數據,則IRQ再次恢復高電平。
    在傳感器工作方式中,每當檢測到傳感器狀態變化時,IRQ就出現高電平。
    SL0~SL3(掃描線):輸出線。用來掃描鍵盤和顯示器。它們可以編程設定為編碼(4中取1)或譯碼輸出(16取1)。
         RL0~RL7(回復線):輸入線。它們是鍵盤矩陣或傳感矩陣的列(或行)信號輸入線。
      SHIFT(移位信號):輸入線、高電平有效。該輸入信號是鍵盤數據的最高位(D7),通常用來擴充鍵開關的功能,作為控制功能鍵用。
     在選通輸入方式時,該信號的上升沿可將來自RL0~RL7的數據存入FIFO RAM中。
     在傳感器輸入下,該信號無效。
     OUTA0~OUTA3(A組顯示信號):輸出線。
     OUTB0~OUTB3(B組顯示信號):輸出線。
     這兩組引線都是顯示數據輸出線,與多位數字顯示的掃描線SL0~SL3同步,兩組可以獨立使用,也可以合并使用。
     BD(顯示消隱):輸出線。低電平有效。該信號在數字切換顯示或使用消隱命令時,將顯示消隱。
     三、命令格式與命令字
     8279的操作方式是通過CPU對8279送入命令時來實現編程的。當數據選擇端A0置1時,CPU對8279寫入數據為命令字,讀出的數據為狀態字。
     8279共有八條命令。其功能及命令字定義分述如下。
    1.鍵盤/顯示方式設置命令字
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        0        0        D        D        K        K        K
    其中:
    D7、D6、D5=000方式設置命令特征位。
    D  D(D4、D3):來設定顯示方式,其定義如下:
                  00:8個字符顯示,左入口
                  00:16個字符顯示,左入口
                  00:8個字符顯示,右入口
                  00:16個字符顯示,右入口
     所謂左入口,即顯示位置從最左一位(最高位)開始,以后逐次輸入的顯示字符逐個向右順序排列; 所謂右入口,即顯示位置從最右一位(最低位)開始,以后逐次輸入的顯示字符時,已有的顯示字符逐個向左順序移動。
    KKK(D2、 D1、 D0):用來設定七種鍵盤、顯示工作方式:
                   000  編碼掃描鍵盤,雙鍵鎖定
                   001  譯碼掃描鍵盤,雙鍵鎖定
                   010  編碼掃描鍵盤,N鍵輪回
                   011  譯碼掃描鍵盤,N鍵輪回
                   100  編碼掃描傳感器矩陣
                   101  譯碼掃描傳感器矩陣
                   110  選通輸入,編碼顯示掃描
                   111  選通輸入,譯碼顯示掃描
    雙鍵鎖定與N鍵輪回是多鍵按下時的兩種不同的保護方式。雙鍵鎖定為兩鍵同時按下提供的保護方法。再消顫周期里,如果有兩鍵同時按下,則只有其中一個鍵彈起,而另一個鍵保持在按下位置時,才被認可。N鍵輪回為N鍵同時按下的保護方法。當有若干鍵按下時,鍵盤掃描能夠根據發現他們的順序,依次將它們的狀態送入FIFO RAM中。
    2.程序時鐘命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        0        1        P        P        P        P        P
    其中:
    D7、D6、D5=001為時鐘命令特征位。
    PPPPP(  D4、D3、D2、D1、D0)用來設定外部輸入CLK端的時鐘進行分頻的分頻數N。N取值為2~31。例如外部時鐘頻率為2MHZ,PPPPP被置為10100(N=20),則對輸入的外部時鐘20分頻,以獲得8279內部要求的100KMZ的基本頻率。
    3.讀FIFO/傳感器RAM命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        1        0        AI        X        A        A        A
    其中:
    D7D6D5 =010為讀FIFO/傳感器RAM命令特征位。該命令字只在傳感器方式時使用。在CPU讀傳感器RAM之前,必須使用這條命令來設定傳感器RAM中的8個地址(每個地址一個字節)。
    AAA(D2、D1、D0)為傳感器RAM中的八個字節地址。
    AI(D4)為自動增量特征位。當AI=1時,每次讀出傳感器RAM后地址自動加1使地址指針指向下一個存儲單元。這樣,下一個數據便從下一個地址讀出,而不必重新設置讀FIFO/傳感器RAM命令。
    在鍵盤工作方式中,由于讀出操做嚴格按照先入先出順序,因此,不需使用此命令。
   4.讀顯示RAM命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        1        1        AI        A        A        A        A
    其中:
    D7D6D5 =011為讀顯示RAM命令字的特征位。該命令用來設定將要讀出的顯示RAM地址。
    AAAA(D3、D2、D1、D0)用來尋址顯示RAM命令字的特征位。由位顯示RAM中有16個字節單元故需要4位尋址。
    AI(D4)為自動增量特征位。當AI=1時,每次讀出后地址自動加1指向下一地址。
    5.寫顯示RAM命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        0        0        AI        A        A        A        A
    其中:
    D7D6D5 =100為寫顯示RAM命令字的特征位。在寫顯示器RAM之前用該命令用來設定將要寫入的顯示RAM地址。
    AAAA(D3、D2、D1、D0)為將要寫入的存儲單元地址。
   AI(D4)為自動增量特征位。當AI=1時,每次寫入后地址自動加1指向下一次寫入地址。
    6.顯示禁止寫入/消隱命令特征位
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        0        1        X        IW
A        IW
B        BL
A        BL
B
     其中:
     D7D6D5 =101為顯示禁止寫入/消隱命令特征位。
   IW/A、IW/B(D3、D2)為A、B組顯示RAM寫入屏蔽位。由于顯示寄存器分成A、B兩組,可以單獨送數,故用兩位來分別屏蔽。當A組的屏蔽位D3=1時,A組的顯示RAM禁止寫入。因此,從CPU寫入顯示器RAM數據時,不會影響A的顯示。這種情況通常在采用雙4位顯示器時使用。因為兩個雙四位顯示器是相互獨立的。為了給其中一個雙四位顯示器輸入數據而又不影響另一個四位顯示器,因此必須對另一組的輸入實行屏蔽。
    BL/A、BL/B(D1、D0)為消隱顯示位。用于對兩組顯示輸出消隱。若BL=1時,對應組的顯示輸出被消隱。當BL=0時,則恢復顯示。
    7.清除命令
     命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        1        0        CD        CD        CD        CF        CA
    其中:
    D7D6D5 =110清除命令特征位。
  CDCDCD(D4D3D2)用來設定清除顯示RAM方式。共有四種消除方式,見表6-10-1。
  CF(D1)用來置空FIFO存儲器,當=1時,執行清除命令后,FIFO RAM被置空,使中斷輸出線復位。同時,傳感器RAM的讀出地址也被置0。
    CA(D0)為總清的特征位。它兼有CD和CF的聯合效能。在CD=1時,對顯示的清除方式由D3、D2的編碼決定。
   清除顯示RAM約需160μS。在此期間FIFO狀態時的最高位DU=1,表示顯示無效。CPU不能向顯示RAM寫入數據。
    8.結束中斷/錯誤方式設置命令
       命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        1        1        E        ×        ×        ×        ×
      其中:
      D7D6D5 =111為該命令的特征位。此命令有兩種不同的作用。
  (1)作為結束中斷命令。在傳感器工作方式中使用。每當傳感器狀態出現變化時,掃描檢測電路將其狀態寫入傳感器RAM,并啟動中斷邏輯,使IRQ變高,向CPU請求中斷,并且禁止寫入傳感器RAM。此時,若傳感器RAM讀出地址的自動遞增特征沒有置位(AI=0),則中斷請求IRQ在CPU第一次從傳感器RAM讀出數據時就被清除。若自動遞增特征已置位(AI=1),則CPU對傳感器RAM的讀出并不能清除IRQ,而必須通過給8279寫入結束中斷/錯誤方式設置命令才能使IRQ變低。因此在傳感器工作方式中,此命令用來結束傳感器RAM的中斷請求。
  (2)作為特定錯誤方式設置命令。在8279已被設定為鍵盤掃描N鍵輪回方式以后,如果CPU給8279又寫入結束中斷/錯誤方式設置命令(E=1),則8279將以一種特定的錯誤方式工作。這種方式的特點是:在8279的消顫周期內,如果發現多個按鍵同時按下,則FIFO狀態字中的錯誤特征位S/E將置1,并產生中斷請求信號和阻止寫入FIFO RAM。
   上述八種用于確定8279操作方式的命令字皆由D7D6D5特征位確定,輸入8279后能自動尋址相應的命令寄存器。因此,寫入命令字時唯一的要求是使數據選擇信號A0=1。
   四、狀態格式與狀態字
   8279的FIFO狀態字,主要用于鍵盤和選通工作方式,以指示FIFO RAM中的字符數和有無錯誤發生。其格式為:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
DU        S/E        O        U        F        N        N        N
   其中:
   DU( D7)為顯示無效特征位。當DU=1表示顯示無效。當顯示RAM由于清除顯示或全清命令尚未完成時,DU=1。
                             表6-10-1    CD位定義的清除方式
D4           D3         D2         清除方式
1        0        ×        將顯示RAM全部清零
        1        0        將顯示RAM清成20H(A組=0010;B組=0000)
        1        1        將顯示RAM全部置1
0        不清除(若CA=1,則D3、D2仍有效)


;鍵盤和LED顯示程序
;
;*********************************************
;*8279初始化*
;* KEYCOM為8279命令口KEYDAT為8279數據口*
;*********************************************
KEYCOM XDATA 0E601H
KEYDAT XDATA 0E600H
KEYCAM  EQU  30H;定義存放按鍵值RAM起始地址
ORG 0000H
AJMP START
ORG 0003H
LJMP AAA
ORG 0060H
START: MOVR0,#10
MOVDPTR,#KEYCOM ;命令口地址
MOV A, #10H;鍵盤/顯示方式命令字8字符顯示左入口,編碼鍵盤,雙鍵鎖定
MOVX @DPTR,A
MOV A,#34H;程序時鐘命令 26分頻對外部輸入時鐘
MOVX @DPTR,A
MOV A,#0DFH ;清除顯示緩沖區命令
MOVX @DPTR,A
BUSY1:
MOVX A,@DPTR
JBACC.7,BUSY1
MOV IE,#81H
MOVDPTR,#KEYDAT
MOV A,#0C8H
MOVX @DPTR,A;字型送入8279
INC DPTR
MOV A,#90H
MOVX @DPTR,A;字位送入8279(顯示P)
HA7S2:MOV30H,#80H
MOV 31H,#40H
HA7S3:MOVDPTR,#KEYCOM
MOVX A ,@DPTR
ANL A,#07H
CJNE A,#00H,HA7S4;
AJMP HA7S3
HA7S4:MOVDPTR ,#KEYDAT
MOVX A,@DPTR
MOV B,A ;取鍵值
MOV R1,#00H
MOV DPTR,#KEYTAB ;數字鍵鍵值表
HA7S5:MOV A ,#00H
MOVCA,@A+DPTR
CJNE A , B,HA7S6;查鍵值表是否相同
AJMP HA7SA; 轉數字鍵處理程序
HA7S6:INCDPTR ;鍵值表地址加1
INC R1;查找次數加1
MOV A,R1
JB ACC.4,HA7S7;是功能鍵嗎?
AJMPHA7S5 ; 繼續查找
HA7S7:MOVR1,#00H
MOV DPTR,#KEYTAB1 ;功能鍵表地址
HA7S8:MOV A,#00H
MOVCA,@A+DPTR ;取出功能鍵鍵值
CJNEA,B,HA7S9;鍵值相同嗎?
AJMP HA7SC;轉功能鍵處理子程序
HA7S9:INCDPTR
INC R1
MOV A,R1
JNBACC.2,HA7S8 ;繼續查找
LJMP START
;;;AJMP HA7SD;無按鍵返回
HA7SD:LJMPSTART
HA7SA:MOV A,30H
MOV DPTR,#0FE01H
MOVX @DPTR,A; 字位送入8279
MOV A,R1
MOV R0,31H
MOV @R0,A
INC 31H
MOV DPTR,#CDATA
MOVCA,@A+DPTR;取字型代碼
MOVDPTR,#KEYDAT
MOVX @DPTR,A;送8279顯示
INC 30H
MOV A,30H ;字位加1
CJNEA,#88H,HA7SB;
LJMP HA7S2
HA7SB:AJMPHA7S3
HA7SC:MOVDPTR ,#KJPADDR
MOV A,R1
RL A
;;ADD A,R1
ADD A,#00H
JMP @A+DPTR ;
KJPADDR:LJMPLOOP0
LJMP LOOP1
LJMP LOOP2
KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H
DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH
KEYTAB1:DB0E3H,0E2H,0E1H
CDATA: DB0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H,38H,6CH,1AH,68H,0E8H
LOOP0:MOVR5,#0CH;0
LJMP DISPC
LOOP1:MOVR5,#9FH;1
LJMP DISPC
LOOP2:MOVR5,#4aH;2
DISPC: MOVR6,#80H
DISPC1: MOVDPTR ,#KEYCOM
MOVX @DPTR,A;字位送8279
MOV A ,R5
MOVDPTR,#KEYDAT ;字形送8279
MOVX @DPTR ,A
LCALL DELAY1
;MOV A ,#0FFH
;MOVX @DPTR,A ;關顯示
;INC R6 ;
;CJNER6,#88H,DISPC1
;AJMP DISPC;
LJMP HA7S2
AAA: NOP
NOP
RETI
DELAY1:MOVR1,#0FAH
DELAY2:NOP
NOP
DJNZR1,DELAY2
DJNZR0,DELAY1
RET
END


回復

使用道具 舉報

7#
ID:7485 發表于 2015-7-31 13:56 | 只看該作者
8279中文資料[1].pdf (291.27 KB, 下載次數: 7)
回復

使用道具 舉報

8#
ID:53053 發表于 2015-8-11 15:57 | 只看該作者
ahshmj 發表于 2015-7-31 13:42
8279鍵盤、顯示接口芯片
序號:6-10
生產廠家:Intel公司

好感謝你的回復,但是我不會匯編,看不懂!!!謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久久久久密臀 | 欧美区日韩区 | 亚洲国产一区二区视频 | 欧美日韩一区二区三区四区五区 | 久久精品国产99国产精品 | 久久久亚洲| 欧美一级二级在线观看 | 国产高清在线观看 | 91视频进入 | 懂色tv| 日本一道本视频 | 亚洲国产一区二区三区 | 欧美日韩在线观看一区 | 天天操妹子 | 欧美一页 | 国产日韩精品在线 | 国产精品久久久久久av公交车 | 亚洲精品亚洲人成人网 | 一本色道精品久久一区二区三区 | 草久久| 久久精品免费 | 99久久免费精品国产免费高清 | 久久久久亚洲精品 | 亚洲 欧美 日韩 在线 | 天天爱天天操 | 亚洲区在线| 美女视频一区二区 | 成人免费视频在线观看 | 91久久精品国产91久久性色tv | 亚洲欧美精品国产一级在线 | 国产日韩一区二区 | 天天久久 | 在线中文视频 | 99久热 | 午夜小视频在线观看 | 高清视频一区二区三区 | 久久精品91 | 黄色免费在线观看 | 粉嫩av | 欧美美乳 | 国产精品a久久久久 |