您现在的位置:智能制造网>技术首页>

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

2007年03月28日 09:38来源:烟台勾股通信技术有限公司 >>进入该公司展台人气:831

引言

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

硬件和软件需求

为了实现本应用笔记的接口试验,需要MAX6951评估板(EV kit)、MAXQ2000评估板(包括MAX-IDE软件)、科提供zui小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,进行编译。

main.asm文件

该文件为本项目的主循环程序,它通过调用不同的子程序演示正确写入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系统开发中。

全年征稿/资讯合作 联系邮箱:1271141964@qq.com
  • 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
  • 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。


编辑精选

更多


宣传样本推荐图书

旗下子站

工控网机器人仪器仪表物联网3D打印工业软件金属加工机械包装机械印刷机械农业机械食品加工设备制药设备仓储物流环保设备造纸机械工程机械纺织机械化工设备电子加工设备水泥设备海洋水利装备矿冶设备新能源设备服装机械印染机械制鞋机械玻璃机械陶瓷设备橡塑设备船舶设备电子元器件电气设备



关于我们|本站服务|会员服务|企业建站|旗下网站|友情链接| 兴旺通| 产品分类浏览|产品sitemap

智能制造网 - 工业4.0时代智能制造领域“互联网+”服务平台

Copyright gkzhan.comAll Rights Reserved法律顾问:浙江天册律师事务所 贾熙明律师

客服热线:0571-87756395加盟热线:0571-87759904媒体合作:0571-89719789

客服部:编辑部:展会合作:市场部:

关闭