导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→关于MAX7219的一个问题,请赐教[caorr]

 *第10276篇: 关于MAX7219的一个问题,请赐教

  
楼 主:caorr 2003年4月13日23:36
 关于MAX7219的一个问题,请赐教
我用MAX7219驱动8位LED,想要使8位LED分别显示数字1~8,结果全速运行时,1~8显示(但有闪烁现象),但单步运行时,LED全亮,而且发现单步时当第一次调用DISPLAY时LED便已全亮,请问会是什么原因啊?我怎么都不明白,那时MAX7219还没初始化啊,怎么会亮的!
我若关掉电源再上电,请问7219里的寄存器是什么状态啊?
程序如下:
MAX7219的DIN,LOAD,CLK分别连8051的P1.6,P3.5和8255的PC0

       ORG  0000H
       LJMP MAIN
       ORG    0100H
MAIN:  MOV    SP,#60H
       MOV    A,#11000000B
       MOV    DPTR,#7FFFH       ;;8255控制口地址
       MOVX   @DPTR,A
START: MOV    26H,#0BH          ;; 扫描寄存器 (显示位数)
       MOV    27H,#07H          ;; 取值由 00-- 07 , 分别表示显示 1 --- 8 个数码管
       

LCALL  DISPLAY
   ;;单步运行时第一次调用DISPLAY,8位LED便已全亮
       
       MOV    26H,#0AH          ;;; 亮度寄存器
       MOV    27H,#09H          ;; 00 --- 0F 是由 最暗 -->   最亮
       LCALL  DISPLAY

       MOV    26H,#0CH          ;; 关灭寄存器
       MOV    27H,#01H          ;; 取值为 0, 或 1.  为1,正常操作; 为0,关灭
       LCALL  DISPLAY   
      
       MOV    26H,#0FH          ;; 测试寄存器
       MOV    27H,#00H          ;; 取值为 0, 或 1.  为1,测试状态; 为0,正常操作
       LCALL  DISPLAY
       
       MOV    26H,#09H          ;; 译码方式寄存器
       MOV    27H,#0FFH         ;; 取值为0FFH时为BCD码方式,00H时为段选码方
       LCALL  DISPLAY
       
       MOV    26H,#01H          ;; 位0
       MOV    27H,#01H
       LCALL  DISPLAY

       MOV    26H,#02H
       MOV    27H,#02H
       LCALL  DISPLAY

       MOV    26H,#03H
       MOV    27H,#03H
       LCALL  DISPLAY

       MOV    26H,#04H
       MOV    27H,#04H
       LCALL  DISPLAY

       MOV    26H,#05H
       MOV    27H,#05H
       LCALL  DISPLAY

       MOV    26H,#06H
       MOV    27H,#06H
       LCALL  DISPLAY

       MOV    26H,#07H
       MOV    27H,#07H
       LCALL  DISPLAY

       MOV    26H,#08H
       MOV    27H,#08H
       LCALL  DISPLAY

DISPLAY:
       PUSH   00H
       MOV    R0,#08H
       MOV    A,26H
L000:  PUSH   ACC
       MOV    A,#00H
       MOV    DPTR,#7FFFH
       MOVX   @DPTR,A
       POP    ACC
       RLC    A
       MOV    P1.6,C
       NOP
       PUSH   ACC
       MOV    A,#01H
       MOV    DPTR,#7FFFH
       MOVX   @DPTR,A
       POP    ACC
       DJNZ   R0,L000
       NOP
;;=====
       MOV    R0,#08H
       MOV    A,27H
L001:  PUSH   ACC
       MOV    A,#00H
       MOV    DPTR,#7FFFH
       MOVX   @DPTR,A
       POP    ACC
       RLC    A
       MOV    P1.6,C
       NOP
       PUSH   ACC
       MOV    A,#01H
       MOV    DPTR,#7FFFH
       MOVX   @DPTR,A
       POP    ACC
       DJNZ   R0,L001

       NOP
       CLR    P3.5         ;;即MAX7219的LOAD脚
       NOP
       NOP
       SETB   P3.5
       pop    00H
       RET
     
;;==================
       END

  
2楼:CAORR 2003年4月14日00:51
 而且很奇怪的是,当我在
MOV 26H

而且很奇怪的是,当我在
MOV 26H,#08H
MOV 27H,#08H
LCALL DISPLAY
语句后加一个循环语句后(WAIT:SJMP  WAIT),全速运行程序时LED就全亮了,偶而有那么一次全速运行后,LED会显示1~8,请问是怎么回事啊?
  
3楼:langren0468 2003年4月14日09:06
 你前两句付值作用是?
  
4楼:caorr 2003年4月14日16:39
 因为MAX7219的CLK脚连8255的
因为MAX7219的CLK脚连8255的PC0脚,所以那是给8255初始化,让8255的PC口作通用I/O用

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:大家有谁使用过sm2965?给点建议好吗?这次我想用sm2965

[下一篇主题]:朋友说说32位机的开发步骤嘛?