max6950和max6951为2000位和16位共阴极led显示驱动器,通过高速spi接口控制。这些器件采用独特的多路复用方案,以最大限度地减少 led 驱动器和 led 面板之间的连接。maxq2000为高性能6951位risc微控制器,集成spi模块,提供led驱动器和微控制器之间的简单接口。本应用笔记给出了maxq®汇编语言的示例代码,演示了如何使用maxq6950 spi模块试验max《》/max《》功能。
硬件和软件要求
为了进行本应用笔记中描述的接口实验,需要max6951评估板(ev kit)、maxq2000评估板(包括max-ide软件)、+5v电源(最小容量为200ma)和一台带有可用串行端口的pc。
硬件设置
max6951评估板跳线设置
为了断开评估板上电平转换器芯片的/cs、din和sclk信号,切断连接ju1、ju2和ju2引脚3和4的走线。
maxq2000评估板跳线和dip开关设置
将开关sw3 1-8设置为关闭位置。
ju1:连接引脚 1 和 2 ju2:连接引脚 1 和 2 ju3:连接引脚 1 和 2 ju4:打开
ju10:打开
ju11:开启 (maxq2000评估板由jtag接口板供电,由+5v电源供电)
连接两个评估板,如图1所示。
图1.max6951评估板与maxq2000评估板的连接原理图
固件说明
本示例项目的完整固件文件可从maxim网站下载,并可使用maxim的集成开发和调试环境max-ide进行编译,用于maxq系列微控制器。
下载:完整固件(zip,18.8k)
主.asm 文件
此文件是此示例项目的主要演示循环。它调用不同的例程来演示向max6951寄存器正确写入数据。固件依次演示以下max6951功能:
max6951 spi接口初始化
在十六进制解码模式下,将0、1、2、...、a、b、c、d、e、f和8位小数(即点亮所有led段)写入并显示到max0上所有数字的p1平面和p6951平面。
在免解码模式下,使用自定义内置字体书写和显示上述字母和其他可识别的字母,如h,l,p,q,y等。
led 调光回路。该环路显示如何写入max6951强度寄存器以测试数字亮度控制。
扫描限位循环。此循环显示具有相同强度设置的 1 到 8 位数字。
注意:监视该过程以确保在扫描限制增加时亮度降低。
闪烁循环,此循环将不同的数字写入平面 p0 和平面 p1 的每个数字。它还使用快速闪烁模式来演示可在多个led驱动器之间同步的段闪烁控制。
滚动循环,此循环从左到右和从右到左滚动文本消息 hello。
弹跳环,此环路在两个 led 边缘之间弹跳 hello。
计数循环。最后一个循环显示了在十六进制解码模式和无解码模式下,如何设计一个显示,以计算经过的毫秒数。
max2000ev_6951.asm 文件
该文件包含使用maxq6951微控制器与max2000评估板通信的所有实用程序功能。主要功能有:
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:该函数向max16发送寄存器地址和数据字节(6951位)。
max6951_set_all_n:这些函数将数字寄存器的平面 p0 和平面 p1 都设置为数字“n”。所有函数都有十六进制解码版本,没有解码版本。
max6951_e_d_s_d:此功能使能max6951显示,然后延时半秒,关断显示,然后延时100ms。
max6951_screenshot:这些功能将 hello 置于 8 位 led 面板上的八个不同位置。
max6951_scroll_r_to_l:通过以不同的顺序显示屏幕截图,此函数在无解码模式下从右向左滚动 hello。
max6951_scroll_l_to_r:通过以不同的顺序显示屏幕截图,此功能在无解码模式下从左向右滚动hello。
max6951_bouncing:此功能在两个 led 边缘之间反弹 hello。
font_lookup:给定十六进制格式的数字值,此例程在标准 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 3count_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_numberincrease_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_numberincrease_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_numberincrease_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_transmitdisplay_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_loopcount_complete: ret maxq2000_spi.asm文件:该文件是配置和使用maxq2000的spi模块的实用程序。该文件集成在max-ide中;用户无需修改即可使用它。
divide32.asm 文件:这是 max-ide 软件中提供的 32/32 位除法例程。
maxq2000.inc、maxq2000_spi.inc和max2000ev_6951.inc文件:包括maxq2000引脚定义和max6951寄存器定义的文件。
结论
max6951/max6950 spi led驱动器是易于使用的共阴极显示驱动器,通过spi串行接口与微控制器接口。maxq系列微控制器提供了一个方便的集成spi模块,通过spi接口与led驱动器通信。此处给出的示例代码可帮助用户了解如何使用max6951 led特性。示例代码也可用于类似的基于maxq2000的应用开发。
pcb单层板、双层板、四层板、六层板、八层板、十层板、十二层板图文解释
大功率升压转换器可自动切换模式并保持轻负载效率
传统产业数字化转型升级亟待进一步提速 疫情进一步刺激企业审视自身数字化水平
富士康在天津成立新公司,拓展车用领域布局
有保障的虚拟货币投资不再只是理想 - 马来西亚发起的新募资模式ACO(合格通证发行)
使用MAX6951/MAX6950 LED显示驱动器与MAXQ2000微控制器通信
开放式FPGA实现仪器的各种特性
长虹陷“增收不增利”怪圈 电视业务不足营收五分之一
英特尔酷睿十一代+惠普战66,商务办公新利器
Infor推出下一代供应链可视化和控制功能
星速带你飞——海淘党必看的剁手攻略来啦~
英国Pickering公司推出业内首款可切换110GHz信号的 PXI/PXIe微波继电器模块
台厂南亚科技可能是台积电潜在收购对象或合作伙伴
室内LED显示屏都有哪些工厂
电缆长度会影响天线的性能吗
一种具有反向折射率分布的新型增益光纤技术
RFID技术在高端酒类防伪追溯中的应用
海外展览设计与施工
利用FPGA调试光纤的一些设计经验
2004三维力控秋季全国巡演报道之广州站