[Atmel] 用AtmelStudio6.2跑mega16例程(68)IIC驱动MAX6953

[复制链接]
1030|0
 楼主| ddllxxrr 发表于 2014-12-9 23:33 | 显示全部楼层 |阅读模式
MAX6953是紧凑的行共阴显示驱动器,通过IIC的串行接口将微控制器连接到5X7LED点阵屏。MAX6953可驱动多达4位单色或2位双色的5x7点阵屏,6953包含104个ASCII字符字模、复用扫描电路、行列驱动器以及用于存储每一们字符和24个用户自定义字符字模数据的静态RAM.LED的段电流由内部逐位数字亮度控制电跑设定。

本例运行时,4块点阵屏将流动显示一组信息串,字符由MAX6953提供。

Proteus运行截图:

Atmel Studio6.20编译通过截图:

程序清单:

  1. /*
  2. * GccApplication31.c
  3. *
  4. * Created: 2014-12-9 22:46:45
  5. *  Author: Administrator
  6. */

  7. #define F_CPU 4000000UL

  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10. #include <util/twi.h>
  11. #include <util/delay.h>
  12. #include <string.h>
  13. #include <stdint.h>

  14. #define MAX6953R 0B10100001  //READ
  15. #define MAX6953W 0B10100000  //WRITE

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

  22. char LED_String[] = "LEDSHOW: ddllxxrr ========0123456";

  23. uint8_t MAX6953_Write(uint8_t addr,uint8_t dat)
  24. {
  25.     START();
  26.         if(TW_STATUS != TW_START) return 0;
  27.         WriteByte(MAX6953W);
  28.         if(TW_STATUS != TW_MT_SLA_ACK) return 0;
  29.         WriteByte(addr);
  30.         if(TW_STATUS != TW_MT_DATA_ACK) return 0;
  31.         WriteByte(dat);
  32.         if(TW_STATUS != TW_MT_DATA_ACK)return 0;
  33.         STOP();
  34.         _delay_ms(2);
  35.         return 1;
  36.        
  37. }
  38.                
  39. void MAX6953_INIT()
  40. {
  41.         MAX6953_Write(0x01,0xFF);
  42.         MAX6953_Write(0x02,0xFF);
  43.         MAX6953_Write(0x03,0x03);
  44.         MAX6953_Write(0x04,0x01);
  45.         MAX6953_Write(0x07,0x00);
  46.        
  47. }

  48. int main(void)
  49. {
  50.     uint8_t i,j;
  51.         DDRD = 0x00;PORTD = 0xFF;
  52.         MCUCR = 0x02;
  53.         GICR = 0x40;
  54.         SREG = 0x80;
  55.         MAX6953_INIT();
  56.        
  57.         while(1)
  58.     {
  59.         //TODO:: Please write your application code
  60.                 for(i=0;i<=strlen(LED_String) - 4;i++)
  61.                 {
  62.                         for(j=0;j<4;j++)
  63.                         MAX6953_Write(0x20 | j,(uint8_t)LED_String[i+j]);
  64.                         _delay_ms(300);
  65.         }
  66.                 _delay_ms(2000);
  67.         }
  68. }

  69. ISR(INT0_vect)
  70. {
  71.         static uint8_t Shut_Down_6955 = 0x01;
  72.         Shut_Down_6955 ^=0x01;
  73.         MAX6953_Write(0x04,0x00 | Shut_Down_6955);
  74. }

本帖子中包含更多资源

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

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

本版积分规则

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

2404

主题

7001

帖子

68

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