[Atmel] 用AtmelStudio6.2跑mega16例程(69)MAX6955驱动LED

[复制链接]
860|0
 楼主| ddllxxrr 发表于 2014-12-11 22:56 | 显示全部楼层 |阅读模式
MAX6955也是一种紧凑型的显示驱动器,IIC接口,可驱动多达16位7段、8位14段、8位16段或128个分立的LED.本程使MAX6955工作于全解码模式,因此只需要向MAX6955输出待显示字符ASCII码即可,不需要编写并发送各字符的段码。

Proteus仿真结果:


Studio6.2编译通过的截图:


程序清单:
  1. /*
  2. * GccApplication32.c
  3. *
  4. * Created: 2014-12-11 22:11:01
  5. *  Author: Administrator
  6. */

  7. #define F_CPU 4000000UL
  8. #include <avr/io.h>
  9. #include <util/twi.h>
  10. #include <util/delay.h>
  11. #include <string.h>
  12. #include <stdint.h>

  13. #define MAX6955R 0b11000001
  14. #define MAX6955W 0B11000000

  15. #define Wait() while((TWCR & _BV(TWINT))==0)
  16. #define START() {TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);Wait();}
  17. #define STOP() (TWCR = _BV(TWINT)| _BV(TWSTO) | _BV(TWEN) )
  18. #define WriteByte(x) {TWDR=(x);TWCR = _BV(TWINT)|_BV(TWEN);Wait();}
  19. #define ACK() (TWCR |= _BV(TWEA))
  20. #define NACK() (TWCR &= ~_BV(TWEA))       

  21. char  SEG_LED_String[] = "01234567890";

  22. uint8_t MAX6955_Write(uint8_t addr,uint8_t dat)
  23. {
  24.       START();
  25.           if(TW_STATUS != TW_START) return 0;
  26.           WriteByte(MAX6955W);
  27.           if(TW_STATUS != TW_MT_SLA_ACK) return 0;
  28.           WriteByte(addr);
  29.           if(TW_STATUS != TW_MT_DATA_ACK) return 0;
  30.           WriteByte(dat);
  31.           if(TW_STATUS != TW_MT_DATA_ACK) return 0;
  32.           STOP();
  33.           _delay_ms(20);
  34.           return 1;
  35. }

  36. void MAX6955_INIT()
  37. {
  38.    MAX6955_Write(0x01,0xFF);
  39.    MAX6955_Write(0x02,0x03);
  40.    MAX6955_Write(0x03,0x07);
  41.    MAX6955_Write(0x04,0x01);
  42.    
  43.    MAX6955_Write(0x06,0x00);
  44.    MAX6955_Write(0x0c,0x00);
  45.    
  46.    MAX6955_Write(0x07,0x01);
  47.    _delay_ms(1000);
  48.    MAX6955_Write(0x07,0x00);       
  49. }

  50.        
  51. int main(void)
  52. {
  53.     uint8_t i,j,Len = strlen(SEG_LED_String);
  54.         DDRD = 0xFF; PORTD = 0x00;
  55.         MAX6955_INIT();
  56.         while(1)
  57.     {
  58.         //TODO:: Please write your application code
  59.                 for(i = 0;i<Len;i+=8)
  60.                 {
  61.                    for(j = 0; j< 8;j++)
  62.                    MAX6955_Write(0x20 | j,(uint8_t)SEG_LED_String[i+j]);
  63.                    for(;j<8;j++)
  64.                    MAX6955_Write(0x20 | j,(uint8_t)(' '));
  65.                    _delay_ms(2000);
  66.                 }
  67.     }
  68. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7001

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部