中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 嵌入系统 >>电子行业新闻正文

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

时间:2008/4/28 10:54:00  作者:  来源:ic72  浏览人数:1675
 
 

      引言

      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所示连接两块评估板。

ic72新闻中心

      图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系统开发中。

ic72新闻中心

      MAXQ2000系统

 
【相关文章】
·创建出色的32位微控制器应用的四步骤
·LED显示驱动器微控制器的通信
·面向汽车电机控制应用的AVR微控制器
·盛群推出HT82A523R 8-Bit I/O Type Full Speed USB微控制器
·意法与飞思卡尔推出90纳米车用微控制器
·Atmel推出超低功耗ARM7微控制器AT91SAM7L
·ST公布全新8位微控制器平台STM8系列技术细节
·功耗测量辅助微控制器的选择
·MAXQ3120 混合信号微控制器的应用案例
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9