打印

MAX7219的问题

[复制链接]
5592|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen3bing|  楼主 | 2012-3-15 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我参照一本C51书和MAX7219的数据手册,搭了个MAX7219控制共阴极数码管的电路。原理图见附件。源程序如下:
#include <stc89c52rc.h>
#include <absacc.h>
#include <intrins.h>
#define uint  unsigned int
#define uchar unsigned char
sbit DIN=P1^0;
sbit CLK=P1^1;
sbit LOAD=P1^2;
/*void delay(uint x)
{
   uint k,z;
   for(k=0;k<x;k++)
    for(z=300;z>0;z--);
} */
void send(uchar add,uchar dat)
{
uchar ADS,i,j;
LOAD=0;
i=0;
while(i<16)
{
  if(i<8) ADS=add;
  else    ADS=dat;
  for(j=8;j>=1;j--)
  {
   DIN=ADS&0X80;
   ADS=ADS<<1;
   CLK=1;
   CLK=0;
  }
  i=i+8;
  //delay(20);
}
LOAD=1;
}
void main(void)
{
send(0x0c,0x01);    //初始化MAX7219,开机
send(0x0b,0x01); //接两个数码管
send(0x0a,0xf5); //亮度控制,11/32
send(0x09,0xff); //译码方式,code B 译码7-0
while(1)
{
  send(0x01,0x81);     //在两个数码管上显示1~2,带小数点显示
  send(0x02,0x82);
}
}
程序下载进去以后,发现所用的两个数码管位选一直是高电平。
我搞不明白,请高手指教,谢谢!

MAX7219-1.JPG (28.6 KB )

MAX7219-1.JPG

MAX7219.JPG (61.15 KB )

MAX7219.JPG

相关帖子

沙发
chen3bing|  楼主 | 2012-3-15 21:44 | 只看该作者
芯片用stc89c52rc,DIN接P1.0,LOAD接P1.2,CLK接P1.1。MAX7219的18腿和19腿接10K电阻,19腿接5V。晶振用11.0592兆。我用示波器观察,P1.0,P1.1,P1.2都有波形。MAX7219上也有5V。我还测试了一下,数码管是好的。手册上一个地方看不明白,有一个参数tDSPD,2.2MS。时序图上没有。请高手指教,谢谢!

MAX7219_2.JPG (42.06 KB )

MAX7219_2.JPG

MAX7219_TIME.JPG (49.34 KB )

MAX7219_TIME.JPG

使用特权

评论回复
板凳
chen3bing|  楼主 | 2012-3-16 07:57 | 只看该作者
高手支招啊!

使用特权

评论回复
地板
yewuyi| | 2012-3-16 08:07 | 只看该作者
还能买到吗?

即使买到,估计要20个银子以上啦。

使用特权

评论回复
5
ayb_ice| | 2012-3-16 08:32 | 只看该作者
只要IO足够,51直接动态驱动比这专用芯片还方便

使用特权

评论回复
6
chen3bing|  楼主 | 2012-3-16 09:26 | 只看该作者
能买到,多少钱我记不清了。
我只是做实验,怎么就不行呢?
我用PROTEUS仿真可以,可是那不算数。
还有,tDSPD的问题谁能解答一下?
小弟先谢过了。
是不是这玩意现在没人用了?

使用特权

评论回复
7
h615| | 2012-3-16 10:04 | 只看该作者
用用天微的,那个才1块多

使用特权

评论回复
8
chen3bing|  楼主 | 2012-3-16 10:34 | 只看该作者
天微的,哪里可以买到?淘宝网上可以买到?

使用特权

评论回复
9
chen3bing|  楼主 | 2012-3-16 10:38 | 只看该作者
这个我也不想放弃,毕竟花了不少钱。大家帮帮忙啊!
我在此表示感谢,同时感谢4楼,5楼和7楼。

使用特权

评论回复
10
chen3bing|  楼主 | 2012-3-16 11:12 | 只看该作者
7楼,天微的虽然便宜,那个和这个用法一样吗?一样的话,不会用也是枉然。
难道没人用过吗?我悲剧了。

使用特权

评论回复
11
jiabin1024| | 2012-3-16 15:38 | 只看该作者
去年调试过,还可以。价格记不清了,好像没超过10RMB

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
chen3bing + 1 助人为乐,传给我一个例子。
12
jiabin1024| | 2012-3-16 15:48 | 只看该作者
LZ留下邮箱传一个给你

使用特权

评论回复
13
jiabin1024| | 2012-3-16 16:14 | 只看该作者
6位显示

max7219.rar

1.63 KB

使用特权

评论回复
14
jiabin1024| | 2012-3-16 16:14 | 只看该作者
刚开始都传不上来

使用特权

评论回复
15
chen3bing|  楼主 | 2012-3-16 17:42 | 只看该作者
多谢jiabin1024大侠!

使用特权

评论回复
16
jiabin1024| | 2012-3-17 16:18 | 只看该作者
呵呵,不敢当,用过而已

使用特权

评论回复
17
hopewise| | 2012-3-17 19:58 | 只看该作者
用天微公司的TM1637......
下面是我常用的TM1637来驱动6位共阳数码管子程序
;**********TM1637驱动数码管********
;**********************************
IC_TM1637_driver_man:          ;start信号----dio先从高电平拉低,接着clk从高电平拉低
       clr      dioac
       set      dio
       nop
       set      clk                             
       nop
       nop
       nop
       nop
       nop
       clr      dio
       nop
       nop
       nop
       nop   
       nop  
       clr      clk
;--------------------------------
       nop
       nop
       mov      a,01000000b    ;写数据命令设置指令(command1),自动+1模式
       mov      temp1,a
       call     out_out_data   ;将temp1值送出,下同            
       set      dioac          ;将dio脚设为输入状态,等待ack信号(低电平),下同
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com
waiting_ack_low1:
       sz       dio            ;读出ack信号
       jmp      $+2
       jmp      write_ret1
       siz      pcs_com
       jmp      waiting_ack_low1
write_ret1:
       nop
       nop
       clr      clk
       nop
       nop
       clr      dio
       clr      dioac           ;将dio脚设为输出状态
       nop     
       nop                      ;clk和dio各发出1个脉冲
       set      clk
       nop
       set      dio
       nop
       clr      dio
       nop
       clr      clk  
;----------------------------------
       nop
       nop
       mov      a,11000000b
       mov      temp1,a                                 
       call     out_out_data    ;写地址命令设置指令(command2),起始地址00H   
       set      dioac                    
       nop
       nop
       set      clk                    
       nop
       nop
       clr      pcs_com
waiting_ack_low2:
       sz       dio             ;读出ack信号
       jmp      $+2
       jmp      write_ret2
       siz      pcs_com
       jmp      waiting_ack_low2
write_ret2:
       nop
       nop
       clr       clk
;--------------------------------
       nop
       nop
       clr      clk
       clr      dioac            ;dio脚改为输出状态(下同)
       mov      a,disp_ram1
       mov      temp1,a                                       
       call     out_out_data     ;写入数码管第1位的显示内容disram1   
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com
waiting_ack_low3:
       sz       dio               ;读出ack信号
       jmp      $+2
       jmp      write_ret3
       siz      pcs_com
       jmp      waiting_ack_low3
write_ret3:
       nop
       nop
       clr      clk  
;--------------------------------
       nop
       nop
       clr      clk
       clr      dioac
       mov      a,disp_ram2
       mov      temp1,a                                 
       call     out_out_data      ;写入数码管第2位的显示内容disram2
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr     pcs_com
waiting_ack_low4:
       sz       dio               ;读出ack信号
       jmp      $+2
       jmp      write_ret4
       siz      pcs_com
       jmp      waiting_ack_low4
write_ret4:
       nop
       nop
       clr       clk   
;---------------------------------
       nop
       nop
       clr      clk
       clr      dioac
       mov      a,disp_ram3
       mov      temp1,a                                 
       call     out_out_data      ;写入数码管第3位的显示内容disram3
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com
waiting_ack_low5:
       sz       dio               ;读出ack信号
       jmp      $+2
       jmp      write_ret5
       siz      pcs_com
       jmp      waiting_ack_low5
write_ret5:
       nop
       nop
       clr      clk
;-------------------------------
       nop
       nop
       clr      clk
       clr      dioac
       mov      a,disp_ram4
       mov      temp1,a                              
       call     out_out_data      ;写入数码管第4位的显示内容disram4      
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com
waiting_ack_low6:
       sz       dio               ;读出ack信号
       jmp      $+2
       jmp      write_ret6
       siz      pcs_com
       jmp      waiting_ack_low6
write_ret6:
       nop
       nop
       clr      clk
;----------------------------------
       nop
       nop
       clr      clk
       clr      dioac
       mov      a,disp_ram5
       mov      temp1,a                                    
       call     out_out_data      ;写入数码管第5位的显示内容disram5
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com
waiting_ack_low7:
       sz       dio               ;读出ack信号
       jmp      $+2
       jmp      write_ret7
       siz      pcs_com
       jmp      waiting_ack_low7
write_ret7:
       nop
       nop
       clr      clk
;-----------------------------------
       nop
       nop
       clr      clk
       clr      dioac
       mov      a,disp_ram6
       mov      temp1,a                                    
       call     out_out_data      ;写入数码管第6位的显示内容disram6
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com                        
waiting_ack_low8:
       sz       dio                ;读出ack信号
       jmp      $+2
       jmp      write_ret8
       siz      pcs_com
       jmp      waiting_ack_low8
write_ret8:
       nop
       nop
       clr      clk
       nop
       nop
       clr      clk
       clr      dio
       clr      dioac
       nop     
       nop                         ;clk和dio各发出1个脉冲
       set      clk
       nop
       nop
       set      dio
       nop
       clr      dio
       nop
       clr      clk  
;----------------------------------
       nop
       nop
       clr      dioac
       mov      a,10001010b
       mov      temp1,a
                                   ;写显示控制设置指令(command3),显示开
       call     out_out_data
       set      dioac
       nop
       nop
       set      clk
       nop
       nop
       clr      pcs_com
waiting_ack_low9:
       sz       dio                 ;读出ack信号
       jmp      $+2
       jmp      write_ret9
       siz      pcs_com
       jmp      waiting_ack_low9
write_ret9:
       nop
       nop
       clr      clk      
;-----------------------------------------
       nop                         ;stop信号----clk先从低电平拉高,接者dio也从低电平拉高
       nop
       clr     clk
       clr     dioac
       clr     dio
       nop
       nop
       set     clk
       nop
       nop
       set     dio
       nop
       nop
       clr     dio
       clr     clk
       ret
;----------------------------------
out_out_data:                      ;将temp1中的码串行输出到TM1637子程序
      mov     a,8d
      mov     temp0,a
out_out_data000a:
      clr      clk
      clr      dio
      nop
      nop
      sz       temp1.0
      set      dio
      nop
      nop
      set      clk                 ;脉冲上升沿写入数据
      rr       temp1
      sdz      temp0                     
      jmp      out_out_data000a  
      clr      clk
      set      dio
      ret

tm1637[1].pdf

313.44 KB

TM1629A[1].pdf

742.34 KB

TM1668.pdf

684.65 KB

tm1637[1].pdf

313.44 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2540

帖子

2

粉丝