老古开发网首页
导航:老古开发网首页文章索引文章分类通信网络→[MAX6951/MAX6950 LED显示驱动器与MAXQ2000微控制器的通信]
| -文章搜索 - 最新文章 - |

MAX6951/MAX6950 LED显示驱动器与MAXQ2000微控制器的通信

发布时间:2006年8月5日 点击次数:783
来源:Maxim   作者:Dallas > 应用笔记
 

       引言

       MAX6950和MAX6951分别为5位和8位共阴极LED显示驱动器,通过高速SPI 接口控制。这两款器件采用独特的复用结构,大大减少了LED驱动器与LED面板的连线。MAXQ2000是一款高性能、16位RISC微控制器,集成了SPI模块,简化了LED驱动器与微控制器的连接。本应用笔记提供了MAXQ®汇编程序范例,说明MAXQ2000 SPI模块与MAX6951/MAX6950的配合使用。

       硬件和软件需求

       为了实现本应用笔记的接口试验,需要MAX6951评估板(EV kit)、MAXQ2000评估板(包括MAX-IDE软件)、科提供最小200mA电流的+5V电源和具备一个可用串口的PC机。

       硬件设置

       MAX6951评估板跳线设置

       去掉JU2、JU3和JU4引脚1与引脚2之间的跳线,断开/CS\、DIN和SCLK信号与评估板上电平转换器的连接。 

       MAXQ2000评估板跳线和DIP开关设置

       开关SW3的1-8引脚置于off位置

       JU1:连接引脚1和引脚2

       JU2:连接引脚1和引脚2

       JU3:连接引脚1和引脚2

       JU4:开路

       JU10:开路

       JU11:接通(MAXQ2000评估板由一块JTAG接口板供电,电源为+5V。) 

       按图1所示连接两块评估板。

          

               图1. MAX6951评估板与MAXQ2000评估板的连接图

       固件说明

       可从Maxim网站下载本项目的完整固件文件,通过Maxim提供的集成开发环境和调试环境,用于MAXQ系列微控制器的MAX-IDE,进行编译。

       该文件为本项目的主循环程序,它通过调用不同的子程序演示正确写入MAX6951寄存器的数据。固件演示MAX6951的以下功能: 

       MAX6951 SPI接口初始化。 

       在16进制译码方式下,对MAX6951所有数字的P0和P1级写入并显示0、1、2、...、A、B、C、D、E、F和8个小数位(如,点亮所有LED字段)。 

       在非译码方式下,写入并显示上述字母和其它用户内建字符,如H、L、P、Q、Y等。
 
       LED亮度调节,该程序说明如何设置MAX6951亮度寄存器,测试数字亮度控制功能。 

       扫描限制循环程序。该程序用相同亮度循环显示第1位到第8位数字。

   

    注:监控进程,以确认扫描限制提高时,降低亮度。 

       闪烁控制,该程序将不同数值写入每位数据的P0级和P1级。还可采用快速闪烁方式来演示段闪烁控制功能,可同步多个LED驱动器。 

       滚动循环,该程序从左到右、从右到左滚动显示文本信息:HELLO。 

       跳动循环,该程序在LED两个边沿之间跳动显示文本信息:HELLO。 

       计时循环,这个程序说明在16进制译码方式和非译码方式下,如何设计显示毫秒级计时。 

       max2000ev_6951.asm文件

       该文件包含所有用于MAX6951评估板与MAXQ2000微控制器之间通信的功能函数。其主要函数有:
 
       max6951_init:该函数正确地设置MAXQ2000的SPI模式,实现与MAX6951的连接。使能SPI,并初始化MAX6951,在显示板上显示八个0。列表1为该函数的详细代码。

列表1. MAX6951初始化例程
;*******************************************************************************
;* Function:  max6951_init
;*
;* Sets the correct SPI modes for talking to the MAX6951, enables SPI, and
;*
;* initializes the MAX6951 to display 8 0s.
;*
;* Input:     None.
;*
;* Output:    None.
;*
;* Destroys:  ACC, A[0] -- A[10], PSF
;*
;*******************************************************************************
MAX6951_INIT:
    ; SET SPI BAUD RATE
    MOVE    A[0], #2400H   ; SYSTEM CLOCK IS 16,000,000 HZ
    MOVE    A[1], #00F4H
    MOVE    A[2], #4240H   ; DESIRED BAUD RATE IS 1,000,000 HZ
    MOVE    A[3], #000FH
    CALL    SPI_SETBAUDRATE

    ; SET THE APPROPRIATE MODES FOR THE 6951
    MOVE    C, #SPI_IDLE_LOW  ; IDLE = LOW
    CALL    SPI_SETCLOCKPOLARITY
    MOVE    C, #SPI_ACTIVE_EDGE  ; ACTIVE = RISING EDGE
    CALL    SPI_SETCLOCKPHASE
    MOVE    C, #SPI_LENGTH_16  ; ALWAYS TRANSFER 16 BITS
    CALL    SPI_SETCHARACTERLENGTH
    MOVE    C, #SPI_MASTER_MODE ; MAXQ2000 IS THE MASTER, MAX6951 IS THE SLAVE
    CALL    SPI_SETMODE

    ; ENABLE SPI
    MOVE    C, #1
    CALL    SPI_ENABLE

    ; SHUTDOWN MAX6951 DISPLAY FIRST
    CALL    MAX6951_SHUTDOWN

    ; SET MAX6951 IN HEXADECIMAL DECODE MODE
    MOVE    ACC, #MAX6951REG_DECODE
    SLA4
    SLA4
    OR      #0FFH    ; HEXADECIMAL DECODE
    CALL    MAX6951_TRANSMIT

    ; SET DISPLAY INTENSITY = 16/16
    MOVE    ACC, #MAX6951REG_INTENSITY
    SLA4
    SLA4
    OR      #0FH    ; INTENSITY = 16/16
    CALL    MAX6951_TRANSMIT

    ; SCAN LIMIT = 7
    MOVE    ACC, #MAX6951REG_SCANLIMIT
    SLA4
    SLA4
    OR      #07H    ; SCAN LIMIT = 7
    CALL    MAX6951_TRANSMIT
    RET

max6951_transmit:该函数向Max6951发送一个寄存器地址和数据字节(16位)。
max6951_set_all_n:这些函数将一位数字寄存器的P0级和P1级设置为数字“n”。所有函数具备16进制译码和非译码模式。
max6951_e_d_s_d:该函数先使能MAX6951显示,然后延迟半秒,关断显示,再延迟100ms。
max6951_screenshot:这些函数在8位数字LED面板的八个不同位置处显示HELLO。
max6951_scroll_R_to_L:以不同顺序显示,该函数以非译码方式从右至左滚动显示HELLO。
max6951_scroll_L_to_R:以不同顺序显示,该函数以非译码方式从左至右滚动显示HELLO。
max6951_bouncing:该函数在LED的两个边沿之间跳动显示HELLO。
font_lookup:给定一个16进制数,该函数查询在标准7段LED上以非译码方式显示的相同字符。
max6951_counting:该函数用于显示毫秒计时,精确度为10毫秒。 列表2为详细代码。

列表2. MAX6951计时例程
;*******************************************************************************
;* Function:  MAX6951_counting
;*
;* This routine counts how many 10-milliseconds have elapsed and displays
;*
;* the value from 0000 to 9999 on LED digits 3-0(no way to blank leading digits).
;*
;  The routine displays the same value on LED digits 7-4(by using no decode
;*
;* mode, individual leading digits can be blanked).
;*
;* Input:     None
;*
;* Output:    None
;*
;* Destroys:  ACC, A[1] - A[4], A[9]
;*
;*******************************************************************************
MAX6951_COUNTING:
 CALL  MAX6951_SHUTDOWN
 CALL MAX6951_SET_ALL_0 ; SET ALL BITS OF DATA REGISTERS TO 0
 MOVE   ACC, #010FH ; HEXDECIMAL DECODE DIGITS 3-0, NO DEOCDE DIGITS 7-4 
 CALL MAX6951_TRANSMIT
 ; INITIALIZE THE COUNT TO 0 
 MOVE A[1], #0   ; A[1] => DIGIT 0
 MOVE A[2], #0   ; A[2] => DIGIT 1
 MOVE A[3], #0   ; A[3] => DIGIT 2
 MOVE A[4], #0   ; A[4] => DIGIT 3

COUNT_LOOP: 
INCREASE_DIGIT3:
 MOVE ACC, A[4]   ; PROCESS DIGIT 3   
 SUB #9
 JUMP Z, INCREASE_DIGIT2  ; DIGIT 3 = 9, THERE IS CARRY OVER
 MOVE ACC, A[4]   ; DIGIT 3 < 9, CONTINUE
 ADD #1
 MOVE A[4], ACC
 CALL FONT_LOOKUP   ; LOOK UP THE VALUE FOR THIS FONT
      ; STORE IT IN A[9], KEEP ACC UNCHANGED
 OR #6300H
 CALL MAX6951_TRANSMIT   ; NO CARRY OVER, WRITE DIGIT 3 NEW VALUE
 MOVE ACC, A[9]   ; WRITE THE NO DECODE VALUE TO DIGIT 7
 OR     #6700H
 CALL MAX6951_TRANSMIT
 JUMP DISPLAY_NUMBER

INCREASE_DIGIT2:
 OR #6300H
 CALL MAX6951_TRANSMIT  ; WRITE 0 TO DIGIT 3 REGISTER FIRST
 MOVE A[4], #0   ; SET DIGIT 3 BACK TO 0
 MOVE ACC, #677EH   ; NO DECODE VALUE FOR FONT ''0'' IS "7EH"
 CALL  MAX6951_TRANSMIT   ; WRITE 7EH TO DIGIT 7 REGISTER

 MOVE ACC, A[3]   ; PROCESS DIGIT 2
 SUB #9
 JUMP Z, INCREASE_DIGIT1  ; DIGIT 2 = 9, THERE IS CARRY OVER
 MOVE ACC, A[3]   ; DIGIT 2 < 9, CONTINUE
 ADD #1
 MOVE A[3], ACC
 CALL FONT_LOOKUP   ; LOOK UP THE VALUE FOR THIS FONT
      ; STORE IT IN A[9], KEEP ACC UNCHANGED
 OR #6200H
 CALL MAX6951_TRANSMIT  ; NO CARRY OVER, WRITE DIGIT 2 NEW VALUE
 MOVE ACC, A[9]   ; WRITE THE NO DECODE VALUE TO DIGIT 6
 OR     #6600H
 CALL MAX6951_TRANSMIT
 JUMP DISPLAY_NUMBER

INCREASE_DIGIT1:
 OR #6200H
 CALL MAX6951_TRANSMIT  ; WRITE 0 TO DIGIT 2 REGISTER FIRST
 MOVE A[3], #0   ; SET DIGIT 2 BACK TO 0
 MOVE ACC, #667EH   ; NO DECODE VALUE FOR FONT ''0'' IS "7EH"
 CALL  MAX6951_TRANSMIT   ; WRITE 7EH TO DIGIT 6 REGISTER

 MOVE ACC, A[2]   ; PROCESS DIGIT 1
 SUB #9
 JUMP Z, INCREASE_DIGIT0  ; DIGIT 1 = 9, THERE IS CARRY OVER
 MOVE ACC, A[2]   ; DIGIT 1 < 9, CONTINUE
 ADD #1
 MOVE A[2], ACC
 CALL FONT_LOOKUP   ; LOOK UP THE VALUE FOR THIS FONT
      ; STORE IT IN A[9], KEEP ACC UNCHANGED
 OR #6100H
 CALL MAX6951_TRANSMIT  ; NO CARRY OVER, WRITE DIGIT 1 NEW VALUE
 MOVE ACC, A[9]   ; WRITE THE NO DECODE VALUE TO DIGIT 5
 OR     #6500H
 CALL MAX6951_TRANSMIT
 JUMP DISPLAY_NUMBER

INCREASE_DIGIT0:
 OR #6100H
 CALL MAX6951_TRANSMIT  ; WRITE 0 TO DIGIT 1 REGISTER FIRST
 MOVE A[2], #0   ; SET DIGIT 1 BACK TO 0
 MOVE ACC, #657EH   ; NO DECODE VALUE FOR FONT ''0'' IS "7EH"
 CALL  MAX6951_TRANSMIT   ; WIRTE 7EH TO DIGIT 5 REGISTER
 
 MOVE ACC, A[1]   ; PROCESS DIGIT 0
 SUB #9
 JUMP Z, COUNT_COMPLETE  ; DIGIT 0 = 9, COUNTING IS OVER
 MOVE ACC, A[1]   ; DIGIT 0 < 9, CONTINUE
 ADD #1
 MOVE A[1], ACC
 CALL FONT_LOOKUP   ; LOOK UP THE VALUE FOR THIS FONT
      ; STORE IT IN A[9], KEEP ACC UNCHANGED
 OR #6000H
 CALL MAX6951_TRANSMIT  ; NO CARRY OVER, WRITE DIGIT 0 NEW VALUE
 MOVE ACC, A[9]   ; WRITE THE NO DECODE VALUE TO DIGIT 4
 OR     #6400H
 CALL MAX6951_TRANSMIT

DISPLAY_NUMBER:  ; DISPLAY DIGIT 3-0 IN HEXADECIMAL DECODE MODE
    ; DIEPLAY DIGIT 7-4 IN NO DECODE MODE
 CALL MAX6951_ENABLE
 CALL MAX6951_10MS_DELAY
 JUMP  COUNT_LOOP

COUNT_COMPLETE:
 RET

maxq2000_spi.asm文件:该文件用于配置、使用MAXQ2000 SPI模块。集成在MAX-IDE,用户无需修改即可使用。

divide32.asm文件:这是MAX-IDE软件提供的32位除法程序。

maxq2000.inc、maxq2000_spi.inc和max2000ev_6951.inc文件:这些是MAXQ2000引脚定义和MAX6951寄存器定义的嵌套文件。

       结论

       MAX6951/MAX6950 SPI LED驱动器简单易用的共阴极显示器驱动器,通过SPI串行接口连接微控制器。MAXQ系列微控制器集成了SPI模块,可通过SPI接口与LED驱动器通信。这里介绍的例程有助于用户理解MAX6951的LED驱动功能。也可将该例程应用到类似的MAXQ2000系统开发中。


欢迎进入老古论坛进行讨论
[通信网络] 相关文章:
TD-SCDMA下行链路算法研究
简介:
一、引言   TD-SCDMA[1]是第三代移动通信标准中极具竞争力的标准之一,它具有低发射功率、高系统容量、频谱利用率高等特点。联合检测作为TD-SCDMA关键技术之一,同时考虑多个用户的信息以及相应的信道冲激响应(CIR)进行数据检测,能够消除位于同一小区并在同一时间同频率发送的信号的多用户干扰(MAI)和码间干扰(ISI)。但由于联合检测运算复杂度比较大,一般用于上行链路[2]。文献[3]首次将联合检测技术用于下行链路,并提出了专门针对下行链路的算法。对于下行链路,已有算法中需要进行Cholesky分解以及......

集成CMOS对称式收/发开关的设计
在MAXQ3120上实现CODEC应用
大唐移动成立TD-SCDMA终端软件Arena社区
LG电讯未能如期提供服务3G移动执照被撤销
网通发行100亿融资券补充运营资金备战3G
基于PXA255和嵌入式QT的IP视频电话设计
配置无线局域网:WLAN配置攻略图解
虚拟网解决方案:当前各种VPN的实现
倪光南力挺中国版3G 呼吁对TD标准保持耐心
 
下一个:[行业观察]中国西部半导体公司以差异化求发展
简介:
  毋庸置疑,由于经济发展水平的差异,当谈及中国的半导体行业链时,北京、上海、深圳是我们更多关注的城市,也是发展相对较快的地区。这种情况在《电子工程专辑》于今年年初进行的调查活动中也充分反映出来:参加调查的公司以东部地区公司为主力,西部公司的参与明显偏弱。这种结果促使我想更深层次地了解西部半导体行业的发展情况。6月,带着这个目的,我访问了西安、成都的集成电路基地和15家公司。   “资源互补、错位竞争是西安在半导体领域的定位,”西安市集成电路产业发展中心主任、陕西省集成电路行业协会秘书长蔺建文表示,“设计业、装备制造、封装、分立器件以及硅材料和晶圆厂是我们依次重点发展的产业。” ......
 

上一个:[嵌入式系统]基于μClinux的SoPC应用系统设计

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:否 执行时间:16毫秒