工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->MAX6951/MAX6950 LED显示驱动器与MAXQ2

MAX6951/MAX6950 LED显示驱动器与MAXQ2

作者:fanxiaoxi时间:2022-12-09

摘要:本应用笔记说明MAX6951/MAX6950 LED驱动器和MAXQ2000的SPI外设通信的汇编程序设计。

引言

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机。

硬件设置

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

  2. MAXQ2000评估板跳线和DIP开关设置
    开关SW3的1-8引脚置于off位置
    JU1:连接引脚1和引脚2
    JU2:连接引脚1和引脚2
    JU3:连接引脚1和引脚2
    JU4:开路
    JU10:开路
    JU11:接通(MAXQ2000评估板由一块JTAG接口板供电,电源为+5V。)

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


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

固件说明

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

下载:完整的固件(ZIP, 18.8k)

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

  1. MAX6951 SPI接口初始化。

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

  3. 在非译码方式下,写入并显示上述字母和其它用户内建字符,如H、L、P、Q、Y等。

  4. LED亮度调节,该程序说明如何设置MAX6951亮度寄存器,测试数字亮度控制功能。

  5. 扫描限制循环程序。该程序用相同亮度循环显示第1位到第8位数字。
    注:监控进程,以确认扫描限制提高时,降低亮度。

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

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

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

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

max2000ev_6951.asm文件
该文件包含所有用于MAX6951评估板与MAXQ2000微控制器之间通信的功能函数。其主要函数有:

  1. 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 HZMOVE    A[1], #00F4HMOVE    A[2], #4240H			
    ; DESIRED BAUD RATE IS 1,000,000 HZ MOVE    A[3], #000FHCALL    SPI_SETBAUDRATE
    ; SET THE APPROPRIATE MODES FOR THE 6951MOVE    C, #SPI_IDLE_LOW		
    ; IDLE = LOWCALL    SPI_SETCLOCKPOLARITYMOVE    C, #SPI_ACTIVE_EDGE		
    ; ACTIVE = RISING EDGECALL    SPI_SETCLOCKPHASEMOVE    C, #SPI_LENGTH_16		
    ; ALWAYS TRANSFER 16 BITSCALL    SPI_SETCHARACTERLENGTHMOVE    C, #SPI_MASTER_MODE	
    ; MAXQ2000 IS THE MASTER, MAX6951 IS THE SLAVECALL    SPI_SETMODE
    ; ENABLE SPIMOVE    C, #1CALL    SPI_ENABLE
    ; SHUTDOWN MAX6951 DISPLAY FIRSTCALL    MAX6951_SHUTDOWN
    ; SET MAX6951 IN HEXADECIMAL DECODE MODEMOVE    
    ACC, #MAX6951REG_DECODESLA4SLA4OR      #0FFH				
    ; HEXADECIMAL DECODECALL    MAX6951_TRANSMIT
    ; SET DISPLAY INTENSITY = 16/16MOVE    
    ACC, #MAX6951REG_INTENSITYSLA4SLA4OR      #0FH				
    ; INTENSITY = 16/16CALL    MAX6951_TRANSMIT
    ; SCAN LIMIT = 7MOVE    
    ACC, #MAX6951REG_SCANLIMITSLA4SLA4OR      #07H				
    ; SCAN LIMIT = 7 CALL    MAX6951_TRANSMITRET
  2. max6951_transmit:该函数向Max6951发送一个寄存器地址和数据字节(16位)。

  3. max6951_set_all_n:这些函数将一位数字寄存器的P0级和P1级设置为数字“n”。所有函数具备16进制译码和非译码模式。

  4. max6951_e_d_s_d:该函数先使能MAX6951显示,然后延迟半秒,关断显示,再延迟100ms。

  5. max6951_screenshot:这些函数在8位数字LED面板的八个不同位置处显示HELLO。

  6. max6951_scroll_R_to_L:以不同顺序显示,该函数以非译码方式从右至左滚动显示HELLO。

  7. max6951_scroll_L_to_R:以不同顺序显示,该函数以非译码方式从左至右滚动显示HELLO。

  8. max6951_bouncing:该函数在LED的两个边沿之间跳动显示HELLO。

  9. font_lookup:给定一个16进制数,该函数查询在标准7段LED上以非译码方式显示的相同字符。

  10. 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_SHUTDOWNCALL	MAX6951_SET_ALL_0	
    ; SET ALL BITS OF DATA REGISTERS TO 0MOVE   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 0MOVE	A[2], #0			
    ; A[2] => DIGIT 1MOVE	A[3], #0			
    ; A[3] => DIGIT 2MOVE	A[4], #0			
    ; A[4] => DIGIT 3COUNT_LOOP:	INCREASE_DIGIT3:MOVE	ACC, A[4]			
    ; PROCESS DIGIT 3  	SUB	#9JUMP	Z, INCREASE_DIGIT2		
    ; DIGIT 3 = 9, THERE IS CARRY OVERMOVE	ACC, A[4]			
    ; DIGIT 3 < 9, CONTINUEADD	#1MOVE	A[4], ACCCALL	FONT_LOOKUP			
    ; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED OR	#6300HCALL	MAX6951_TRANSMIT 		
    ; NO CARRY OVER, WRITE DIGIT 3 NEW VALUEMOVE	ACC, A[9]			
    ; WRITE THE NO DECODE VALUE TO DIGIT 7 OR     
    #6700HCALL	MAX6951_TRANSMITJUMP	DISPLAY_NUMBERINCREASE_DIGIT2:OR	
    #6300HCALL	MAX6951_TRANSMIT		
    ; WRITE 0 TO DIGIT 3 REGISTER FIRSTMOVE	A[4], #0			
    ; SET DIGIT 3 BACK TO 0MOVE	ACC, #677EH			
    ; NO DECODE VALUE FOR FONT '0' IS "7EH"CALL 	MAX6951_TRANSMIT 		
    ; WRITE 7EH TO DIGIT 7 REGISTERMOVE	ACC, A[3]			
    ; PROCESS DIGIT 2SUB	#9JUMP	Z, INCREASE_DIGIT1		
    ; DIGIT 2 = 9, THERE IS CARRY OVERMOVE	ACC, A[3]			
    ; DIGIT 2 < 9, CONTINUEADD	#1MOVE	A[3], ACCCALL	FONT_LOOKUP			
    ; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED OR	#6200HCALL	MAX6951_TRANSMIT		
    ; NO CARRY OVER, WRITE DIGIT 2 NEW VALUEMOVE	ACC, A[9]			
    ; WRITE THE NO DECODE VALUE TO DIGIT 6 OR     
    #6600HCALL	MAX6951_TRANSMITJUMP	DISPLAY_NUMBERINCREASE_DIGIT1:OR	
    #6200HCALL	MAX6951_TRANSMIT		
    ; WRITE 0 TO DIGIT 2 REGISTER FIRSTMOVE	A[3], #0			
    ; SET DIGIT 2 BACK TO 0MOVE	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 1SUB	#9JUMP	Z, INCREASE_DIGIT0		
    ; DIGIT 1 = 9, THERE IS CARRY OVERMOVE	ACC, A[2]			
    ; DIGIT 1 < 9, CONTINUEADD	#1MOVE	A[2], ACCCALL	FONT_LOOKUP			
    ; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED OR	#6100HCALL	MAX6951_TRANSMIT		
    ; NO CARRY OVER, WRITE DIGIT 1 NEW VALUEMOVE	ACC, A[9]			
    ; WRITE THE NO DECODE VALUE TO DIGIT 5 OR     
    #6500HCALL	MAX6951_TRANSMITJUMP	DISPLAY_NUMBERINCREASE_DIGIT0:OR	
    #6100HCALL	MAX6951_TRANSMIT		
    ; WRITE 0 TO DIGIT 1 REGISTER FIRSTMOVE	A[2], #0			
    ; SET DIGIT 1 BACK TO 0MOVE	ACC, #657EH			
    ; NO DECODE VALUE FOR FONT '0' IS "7EH"CALL 	MAX6951_TRANSMIT 		
    ; WIRTE 7EH TO DIGIT 5 REGISTERMOVE	ACC, A[1]			
    ; PROCESS DIGIT 0SUB	#9JUMP	Z, COUNT_COMPLETE		
    ; DIGIT 0 = 9, COUNTING IS OVERMOVE	ACC, A[1]			
    ; DIGIT 0 < 9, CONTINUEADD	#1MOVE	A[1], ACCCALL	FONT_LOOKUP			
    ; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED OR	#6000HCALL	MAX6951_TRANSMIT		
    ; NO CARRY OVER, WRITE DIGIT 0 NEW VALUEMOVE	ACC, A[9]			
    ; WRITE THE NO DECODE VALUE TO DIGIT 4 OR     #6400HCALL	MAX6951_TRANSMITDISPLAY_NUMBER:		
    ; DISPLAY DIGIT 3-0 IN HEXADECIMAL DECODE MODE
    ; DIEPLAY DIGIT 7-4 IN NO DECODE MODECALL	
    MAX6951_ENABLECALL	MAX6951_10MS_DELAYJUMP 	COUNT_LOOPCOUNT_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系统开发中。



关键词: 微控制器

评论

技术专区