找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3804|回复: 7
收起左侧

谁有51控制DS12C887的程序,还有8279的程序

[复制链接]
ID:53053 发表于 2015-7-29 22:18 | 显示全部楼层 |阅读模式
谁有51控制DS12C887的程序,还有8279的程序,初学者望大神施舍啊
回复

使用道具 举报

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
回复

使用道具 举报

ID:7485 发表于 2015-7-31 13:29 | 显示全部楼层
本帖最后由 ahshmj 于 2015-7-31 13:33 编辑

这是我做的12864显示的万年历中的有关DS12c887的部分程序。
我这里用的ds12c887的地址是自己的硬件所决定的,你要根据自己的硬件电路修改。
回复

使用道具 举报

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


回复

使用道具 举报

ID:7485 发表于 2015-7-31 13:56 | 显示全部楼层
8279中文资料[1].pdf (291.27 KB, 下载次数: 7)
回复

使用道具 举报

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 单片机教程网

快速回复 返回顶部 返回列表