/* TM1620是一款数码管驱动集成IC,8段6位,以下是个人编程完成的驱动,供大家参考 */ #define ModeDisTM1620 0x02 //设置显示模式,6位8段--上电默认是7段8段 #define AddrAutoAdd 0x40//写显示,自动累加地址 #define AddrFixed 0x44//写显示,固定地址 #define Addr00H 0xC0//地址00H #define Addr01H 0xC1//地址01H #define Addr02H 0xC2//地址02H #define Addr03H 0xC3//地址03H #define Addr04H 0xC4//地址04H #define Addr05H 0xC5//地址05H #define Addr06H 0xC6//地址06H #define Addr07H 0xC7//地址07H #define Addr08H 0xC8//地址08H #define Addr09H 0xC9//地址09H #define Addr0AH 0xCA//地址0AH #define Addr0BH 0xCB//地址0BH #define OpenDisTM1620 0x88//开显示 #define CloseDisTM1620 0x80//关显示 #define Set1_16TM1620 0X00//设置脉冲宽度为 1/16 #define Set2_16TM1620 0X01//设置脉冲宽度为 2/16 #define Set4_16TM1620 0X02//设置脉冲宽度为 4/16 #define Set10_16TM1620 0X03//设置脉冲宽度为 10/16 #define Set11_16TM1620 0X04//设置脉冲宽度为 11/16 #define Set12_16TM1620 0X05//设置脉冲宽度为 12/16 #define Set13_16TM1620 0X06//设置脉冲宽度为 13/16 #define Set14_16TM1620 0X07//设置脉冲宽度为 14/16 uint8 LCDBuf[6]={0,0,0,0,0,0}; //************************************* // 函数名称:Tm1620Dis // 函数功能:驱动显示数据 // 入口参数:要操作的数据 // 出口参数:无 // 技术简要:20MS操作一次 //***************************************/ void Tm1620Dis(void) { STB_TM1620_CLR; Tm1620SentData(ModeDisTM1620); //设置显示模式,6位8段--上电默认是7段8段 STB_TM1620_SET; Nop(2); STB_TM1620_CLR; Tm1620SentData(AddrAutoAdd); //写显示,自动累加地址 STB_TM1620_SET; Nop(2); STB_TM1620_CLR; Tm1620SentData(Addr00H); //指向地址0 Tm1620SentData(LCDBuf[0]); //向地址0 先数据LCDBuf[0] Tm1620SentData(0x00); ///让地址递增1 Tm1620SentData(LCDBuf[1]); //向地址2 先数据LCDBuf[1] Tm1620SentData(0x00); Tm1620SentData(LCDBuf[2]); //向地址4 先数据LCDBuf[2] Tm1620SentData(0x00); Tm1620SentData(LCDBuf[3]); //向地址6 先数据LCDBuf[3] Tm1620SentData(0x00); Tm1620SentData(LCDBuf[4]); //向地址8 先数据LCDBuf[4] Tm1620SentData(0x00); Tm1620SentData(LCDBuf[5]); //向地址A 先数据LCDBuf[5] STB_TM1620_SET; Nop(2); STB_TM1620_CLR; Tm1620SentData(OpenDisTM1620|Set14_16TM1620); //开显示 脉宽 14/16 STB_TM1620_SET; } //************************************* // 函数名称:Tm1620SentData // 函数功能:向TM1620发数据 8位数据-1个字节的数据 // 入口参数:要操作的数据 // 出口参数:无 // 技术简要:上升沿操作一位 从低位开始操作数据 //***************************************/ void Tm1620SentData(uint8 TM1620Data) { uint8 i; for(i=0;i<8;i++) { CLK_TM1620_CLR; if(TM1620Data & (1 << i)) {DIO_TM1620_SET;} else {DIO_TM1620_CLR;} CLK_TM1620_SET; //上升沿操作 } }
TM1620 LED 驱动控制 程序,布布扣,bubuko.com
原文:http://blog.csdn.net/chuangwu2009/article/details/20994541