这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 51,8279 请问:用51编8279

共2条 1/1 1 跳转至

51,8279 请问:用51编8279

院士
2006-09-17 18:14:16     打赏
51,8279 请问:用51编8279



关键词: 请问    

院士
2006-12-22 22:43:00     打赏
2楼
问 各位大虾:
    小弟现在有个问题请教,我用518279,用一片74LS154显示14位,在编写程序时,写进的显示内容,用不用每次必须清显示RAM,如果不用,那我怎样才能知道显示的哪一位。 1: 清一次即可,用字位控制。KEYCOM            XDATA         0E601H
KEYDAT            XDATA            0E600H
KEYCAM            EQU              30H ;定义存放按键值RAM起始地址
;*********************************************
;*           8279  初始化                    *
;* KEYCOM为8279命令口   KEYDAT为8279数据口   *
;*********************************************
START: MOV R0,#10
        MOV DPTR,#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
        JB ACC.7,BUSY1
        MOV IE,#81H
        MOV DPTR,#KEYDAT
        MOV A,#0C8H
        MOVX @DPTR,A ;字型送入8279
        INC DPTR
        MOV A,#90H
        MOVX @DPTR,A ;字位送入8279(显示P)
HA7S2:    MOV 30H,#80H
        MOV 31H,#40H
HA7S3:  MOV DPTR,#KEYCOM
        MOVX A ,@DPTR
        ANL A,#07H
        CJNE A,#00H ,HA7S4;
        AJMP HA7S3
HA7S4:  MOV DPTR ,#KEYDAT
        MOVX A,@DPTR
    MOV B,A ;取键值
    MOV R1,#00H
    MOV DPTR ,#KEYTAB ;数字键键值表
HA7S5:  MOV A , #00H
        MOVC A,@A+DPTR
    CJNE A , B ,HA7S6;查键值表是否相同
    AJMP HA7SA; 转数字键处理程序
HA7S6:  INC DPTR ;键值表地址加1
        INC R1  ;查找次数加1
    MOV A,R1
    JB ACC.4 ,HA7S7  ;是功能键吗?
    AJMP  HA7S5 ; 继续查找
HA7S7:  MOV R1,#00H
        MOV DPTR ,#KEYTAB1 ;功能键表地址
HA7S8:    MOV A,#00H
    MOVC A,@A+DPTR ;取出功能键键值
    CJNE A,B,HA7S9  ;键值相同吗?
    AJMP HA7SC  ;转功能键处理子程序
HA7S9:  INC DPTR
        INC R1
    MOV A,R1
    JNB ACC.2,HA7S8 ;继续查找
  LJMP START
     ;;;    AJMP HA7SD ;无按键返回
HA7SD:  LJMP START
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
    MOVC A,@A+DPTR;取字型代码
    MOV DPTR,#KEYDAT
    MOVX @DPTR,A ;送8279显示
    INC 30H
    MOV A,30H ;字位加1
    CJNE A,#88H,HA7SB  ;
    LJMP HA7S2
HA7SB:  AJMP HA7S3
HA7SC:  MOV DPTR ,#KJPADDR
        MOV A,R1
        RL A
  ;;       ADD A,R1
        ADD A,#00H
          JMP @A+DPTR ;
KJPADDR:LJMP LOOP0
           LJMP LOOP1
           LJMP LOOP2
KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H
        DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH
KEYTAB1:DB 0E3H,0E2H,0E1H
CDATA: DB 0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H,38H,6CH,1AH,68H,0E8H
LOOP0:MOV R5,#0CH  ;0
      LJMP DISPC
LOOP1:MOV R5,#9FH  ;1
      LJMP DISPC
LOOP2:MOV R5,#0BH  ;2
DISPC: MOV R6,#80H
DISPC1: MOV DPTR ,#KEYCOM
       MOVX @DPTR,A ;字位送8279
       MOV A ,R5
       MOV DPTR  ,#KEYDAT ;字形送8279
       MOVX @DPTR ,A
        LCALL DELAY1
;    MOV A ,#0FFH
;    MOVX @DPTR ,A ;关显示
;       INC R6 ;
;    CJNE R6,#88H,DISPC1
;    AJMP DISPC;
    LJMP HA7S2
AAA: NOP
     NOP
     RETI
DELAY1:MOV R1,#0FAH
DELAY2:NOP
       NOP
       DJNZ R1,DELAY2
       DJNZ R0,DELAY1
       RET
END 2: 问一下现在的8279这么贵(二十几元一块)还有多少人用啊 3: 不仅贵!不仅贵! 而且是NEC的(日货)!!!
建议用ZLG7289代替. 或用动态扫描法(74LS164+ ...).
4: RE建议max7219,非常好用,我有源代码。
你可试试。
#include<intrins.h>
#include<reg52.h>

#define N 8

sbit bytesend_din=P1^2;
sbit byteclk_clk=P1^3;
sbit byteload_load=P1^4;


//unsigned char num_show[N]={0,1,2,3,4,5,6,7};

void sendbyte(unsigned char value_send)
{

  unsigned char cycal=0x80;

  while(cycal>=0x01)
  {
     byteclk_clk=0;
     if((value_send&cycal)==0x00)
       bytesend_din=0;
     else
       bytesend_din=1;


     _nop_();
     _nop_();
     _nop_();

     byteclk_clk=1;

     _nop_();

     cycal=cycal>>1;
   }
  
}

void valuesend(unsigned char address,unsigned char value)
{
  
  sendbyte(address);
  sendbyte(value);
  byteload_load=0;
  _nop_();
  _nop_();
  _nop_();
  byteload_load=1;
}


void initial7219()
{
  valuesend(0x0b,0x06);
  valuesend(0x0a,0x05);
  valuesend(0x09,0xff);
  valuesend(0x0c,0x01);
}


void disp7219()
{
   unsigned char i;
   for(i=0x0;i<0x06;i++)
    //valuesend(i+1,num_show[i]);
    valuesend(i+1,i);
}



void main()
{
  initial7219();

  do
  {
    disp7219();
   }while(1);
}



共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]