完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
引言
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, PSF ;* ;******************************************************************************* MAX6951_INIT: ; SET SPI BAUD RATE MOVE A[0], #2400H; SYSTEM CLOCK IS 16,000,000 HZ MOVE A, #00F4H MOVE A, #4240H; DESIRED BAUD RATE IS 1,000,000 HZ MOVE A, #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 - A, A ;* ;**************** *************************************************************** MAX6951_COUNTING: CALL MAX6951_SHUTDOWN CALLMAX6951_SET_ALL_0; SET ALL BITS OF DATA REGISTERS TO 0 MOVE ACC, #010FH; HEXDECIMAL DECODE DIGITS 3-0, NO DEOCDE DIGITS 7-4 CALLMAX6951_TRANSMIT ; INITIALIZE THE COUNT TO 0 MOVEA, #0; A =》 DIGIT 0 MOVEA, #0; A =》 DIGIT 1 MOVEA, #0; A =》 DIGIT 2 MOVEA, #0; A =》 DIGIT 3 COUNT_LOOP: INCREASE_DIGIT3: MOVEACC, A; PROCESS DIGIT 3 SUB#9 JUMPZ, INCREASE_DIGIT2; DIGIT 3 = 9, THERE IS CARRY OVER MOVEACC, A; DIGIT 3 《 9, CONTINUE ADD#1 MOVEA, ACC CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT ; STORE IT IN A, KEEP ACC UNCHANGED OR#6300H CALLMAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 3 NEW VALUE MOVEACC, A; WRITE THE NO DECODE VALUE TO DIGIT 7 OR #6700H CALLMAX6951_TRANSMIT JUMPDISPLAY_NUMBER INCREASE_DIGIT2: OR#6300H CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 3 REGISTER FIRST MOVEA,#0; SET DIGIT 3 BACK TO 0 MOVEACC, #677EH; NO DECODE VALUE FOR FONT ‘0’ IS “7EH” CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 7 REGISTER MOVEACC, A; PROCESS DIGIT 2 SUB#9 JUMPZ, INCREASE_DIGIT1; DIGIT 2 = 9, THERE IS CARRY OVER MOVEACC, A; DIGIT 2 《 9, CONTINUE ADD#1 MOVEA, ACC CALLFONT_LOO KUP; LOOK UP THE VALUE FOR THIS FONT ; STORE IT IN A, KEEP ACC UNCHANGED OR#6200H CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 2 NEW VALUE MOVEACC, A; WRITE THE NO DECODE VALUE TO DIGIT 6 OR #6600H CALLMAX6951_TRANSMIT JUMPDISPLAY_NUMBER INCREASE_DIGIT1: OR#6200H CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 2 REGISTER FIRST MOVEA, #0; SET DIGIT 2 BACK TO 0 MOVEACC, #667EH; NO DECODE VALUE FOR FONT ‘0’ IS “7EH” CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 6 REGISTER MOVEACC, A; PROCESS DIGIT 1 SUB#9 JUMPZ, INCREASE_DIGIT0; DIGIT 1 = 9, THERE IS CARRY OVER MOVEACC, A; DIGIT 1 《 9, CONTINUE ADD#1 MOVEA, ACC CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT ; STORE IT IN A, KEEP ACC UNCHANGED OR#6100H CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 1 NEW VALUE MOVEACC, A; WRITE THE NO DECODE VALUE TO DIGIT 5 OR #6500H CALLMAX6951_TRANSMIT JUMPDISPLAY_NUMBER INCREASE_DIGIT0: OR;#6100H CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 1 REGISTER FIRST MOVEA, #0; SET DIGIT 1 BACK TO 0 MOVEACC, #657EH; NO DECODE VALUE FOR FONT ‘0’ IS “7EH” CALL MAX6951_TRANSMIT ; WIRTE 7EH TO DIGIT 5 REGISTER MOVEACC, A; PROCESS DIGIT 0 SUB#9 JUMPZ, COUNT_COMPLETE; DIGIT 0 = 9, COUNTING IS OVER MOVEACC, A&nb sp;; DIGIT 0 《 9, CONTINUE ADD#1 MOVEA, ACC CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT ; STORE IT IN A, KEEP ACC UNCHANGED OR#6000H CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 0 NEW VALUE MOVEACC, A; WRITE THE NO DECODE VALUE TO DIGIT 4 OR #6400H CALLMAX6951_TRANSMIT DISPLAY_NUMBER:; DISPLAY DIGIT 3-0 IN HEXADECIMAL DECODE MODE ; DIEPLAY DIGIT 7-4 IN NO DECODE MODE CALLMAX6951_ENABLE CALLMAX6951_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系统开发中。 |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2363 浏览 5 评论
3209 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
665浏览 1评论
904浏览 0评论
1025浏览 0评论
668浏览 0评论
498浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:19 , Processed in 1.183838 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号