tm1680参考程序

上传者: 42931625 | 上传时间: 2019-12-21 21:47:04 | 文件大小: 7KB | 文件类型: c
/*********** TM1680 参考程序: 1、A1\A0 采用MCU进行控制,实际使用时,可以将A1\A0任意接高低电平,TM1680 ID改为相应指令即可; 2、该程序采用STC15W 芯片模拟IIC协议,IO口为双向IO口(无需设置输入与输出),如果MCU的IO口需要设置输入和输出,则在ACK时需要设置为输入 3、该芯片支持标准IIC协议 ************/ #include #include "intrins.h" #include /****命令宏定义****/ #define TM1680ID 0xe7 #define SYSDIS 0x80 #define SYSEN 0x81 #define LEDOFF 0x82 #define LEDON 0x83 #define BLINKOFF 0x88 #define BLINK2HZ 0x89 #define BLINK1HZ 0x8A #define BLINK0_5HZ 0x8B #define SLAVEMODE 0x90 #define RCMODE0 0x98 #define RCMODE1 0x9A #define EXTCLK0 0x9C #define EXTCLK1 0x9E #define COM8NMOS 0xA0 #define COM16NMOS 0xA4 #define COM8PMOS 0xA8 #define COM16PMOS 0xAC #define PWM01 0xB0 #define PWM02 0xB1 #define PWM03 0xB2 #define PWM04 0xB3 #define PWM05 0xB4 #define PWM06 0xB5 #define PWM07 0xB6 #define PWM08 0xB7 #define PWM09 0xB8 #define PWM10 0xB9 #define PWM11 0xBA #define PWM12 0xBB #define PWM13 0xBC #define PWM14 0xBD #define PWM15 0xBE #define PWM16 0xBF /******命令宏定义******/ /***端口定义***/ sbit SDA=P1^4; //TM1680通讯端口设置 sbit SCL=P1^5; sbit MA1=P1^6; sbit MA0=P1^7; /***按键功能设置***/ sbit KEY0=P3^2; sbit KEY1=P3^3; sbit KEY2=P3^6; /***LED指示灯定义***/ sbit RED=P3^4; sbit GREEN=P3^5; sbit WHITE=P3^7; /***显示数据***/ unsigned char TM1680perseg[8]={0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x8}; unsigned char DispA[8]={0x10,0xFE,0x92,0x92,0xFE,0x92,0x10,0x10}; /*** 函数功能:延时函数 ***/ void delayms(unsigned int n) { unsigned int i; while(n--) { for(i=0;i<550;i++); } } void delayus(unsigned char n) //256 { while (--n) { _nop_(); } } /**************************底层函数*****************************/ void TM1680start(void) { SDA=1; SCL=1; SDA=1; delayus(4); delayus(10); SDA=0; delayus(10); //起始信号,必须大于4.7us SCL=0; } void Ack(void) { SCL = 0; delayus(8); SCL = 1; delayus(8); while(SDA); SCL=0; delayus(15); } void TM1680SetAck(bit ack) { SCL=0; delayus(5); SDA = ack; //写应答信号 SCL = 1; //拉高时钟线 delayus(5); //延时 SCL = 0; //拉低时钟线 delayus(5); //延时 } void TM1680stop(void) { SDA=0; SCL=1; delayus(10); SDA=1; //停止信号,大于5us delayus(10); SCL=1; SDA=1; } void TM1680SendByte(unsigned char sbyte) { unsigned char i=0; for(i=0; i<8; i++) { SCL=0;delayus(2); if(sbyte&0x80;) { SDA=1; //高位先发 }else{ SDA=0; } delayus(3); SCL=1; delayus(5); //高电平的时间大于4us sbyte<<=1; delayus(2); } SCL=0; delayus(3); SDA=0; delayus(3); } unsigned char TM1680RecvByte(void) { unsigned char i=0, sbyte; SDA=1;delayus(6); for(i=0; i<8; i++) { SCL=0;delayus(6); if(SDA) { sbyte |= 0x01 ; //置1 }else{ sbyte &= 0xfe; //置0 } delayus(3); SCL=1; delayus(5); //高电平的时间大于4us sbyte<<=1; } SCL=0; return sbyte; } /******************************底层函数结束**************************/ /******************************功能函数**************************/ /***单字节写操作函数***/ /***写命令函数:开始--ID-ACK--命令-ACK--结束***/ void TM1680WriteCmd(unsigned char scmd) { TM1680start(); TM1680SendByte(TM1680ID); Ack(); TM1680SendByte(scmd); Ack(); TM1680stop(); } /***写一个字节数据: 开始--ID-ACK-内部地址-ACK--数据-ACK-结束 ***/ void TM1680WriteOneByte(unsigned char faddr, unsigned char sdate) { TM1680start(); TM1680SendByte(TM1680ID); //写TM1680器件地址 Ack(); TM1680SendByte(faddr); //eeprom 地址 Ack(); TM1680SendByte(sdate); //写数据 Ack(); TM1680stop(); } /*** 函数功能:页操作 ***/ void TM1680PageWrite(unsigned char faddr, unsigned char *pdate,unsigned char cnt) { unsigned char i=0; TM1680start(); TM1680SendByte(TM1680ID); //写TM1680器件地址 Ack(); TM1680SendByte(faddr); //eeprom 地址 Ack(); for(i=0; i

文件下载

评论信息

  • divano_q :
    有一定的参考价值。感谢
    2019-05-20
  • Divano_Q :
    有一定的参考价值。感谢
    2019-05-20

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明