TM1629操作源代碼-LED驅動IC
//================文件tm1629.h================================
#ifndef _TM1629_H_
#define _TM1629_H_
//#include "tm1629.h"
/*
#define P_1668DAT LATA0 //數據輸出端口
#define P_1668CLK LATA1
#define P_1668CS LATC0
*/
//數據命令設置
#define V_MDAT1 0x40 //寫數據到顯示區 自動地址增加
#define V_MDAT4 0x44 //寫數據到顯示區 固定地址
//地址命令設置
#define V_ADDR0 0xC0 //地址0
#define V_ADDR1 0xC1 //地址1
#define V_ADDR2 0xC2 //地址2
#define V_ADDR3 0xC3 //地址3
#define V_ADDR4 0xC4 //地址4
#define V_ADDR5 0xC5 //地址5
#define V_ADDR6 0xC6 //地址6
#define V_ADDR7 0xC7 //地址7
#define V_ADDR8 0xC8 //地址8
#define V_ADDR9 0xC9 //地址9
#define V_ADDR10 0xCA //地址10
#define V_ADDR11 0xCB //地址11
#define V_ADDR12 0xCC //地址12
#define V_ADDR13 0xCD //地址13
#define V_ADDR14 0xCE //地址14
#define V_ADDR15 0xCF //地址15
//顯示控制 - 亮度調節
#define V_DIS16_01 0x80 //顯示寬度1/16
#define V_DIS16_02 0x81 //顯示寬度2/16
#define V_DIS16_03 0x82 //顯示寬度4/16
#define V_DIS16_10 0x83 //顯示寬度10/16
#define V_DIS16_11 0x84 //顯示寬度11/16
#define V_DIS16_12 0x85 //顯示寬度12/16
#define V_DIS16_13 0x86 //顯示寬度13/16
#define V_DIS16_14 0x87 //顯示寬度14/16
#define V_DIS16_OFF 0x00 //顯示關
#define V_DIS16_ON 0x88 //顯示開
//---------------------------------------------
// V_DIS16_01
#define V_LED_LIGHT1 (V_DIS16_02|V_DIS16_ON) //顯示亮度設置
#define V_LED_LIGHT2 (V_DIS16_12|V_DIS16_ON) //顯示亮度設置
//-------------------------------------------
extern void TM1629_WriteCommand(uint8 Comm);
extern void TM1629_WriteDat(uint8 *InDat,uint8 DspLight);
#endif
//================文件tm1629.c==============================
#include "global.h"
#include "tm1629.h"
#define TM1629_CS_HIGH P_1629CS = 1
#define TM1629_CS_LOW P_1629CS = 0
#define TM1629_DAT_HIGH P_1629DAT = 1
#define TM1629_DAT_LOW P_1629DAT = 0
#define TM1629_CLK_HIGH P_1629CLK = 1
#define TM1629_CLK_LOW P_1629CLK = 0
//----------------------------
#define V_NOP 1//3 5
//*************************************
// 函數名稱:Nop1629
// 函數功能:延時函數
// 入口參數:延時時間
// 出口參數:無
//***************************************
void Nop1629(uint8 T_Dly)
{
while(T_Dly--);
return ;
}
//**************************************
// 函數名稱:TM1629_WriteByteData
// 函數功能:TM1668發送一字節數據
// 入口參數:要發送的數據
// 出口參數:
//***************************************
void TM1629_WriteByteData(uint8 Data)
{
uint8 i;
Nop1629(V_NOP) ;
for(i=8;i>0;i--)
{
TM1629_CLK_LOW ;
if(Data & 0x01)
{
TM1629_DAT_HIGH ;
}
else
{
TM1629_DAT_LOW ;
}
Data >>= 1 ;
Nop1629(V_NOP) ;
TM1629_CLK_HIGH ;
Nop1629(V_NOP) ;
}
}
//**************************************
// 函數名稱:TM1668_WriteCommand
// 函數功能:寫設置命令
// 入口參數:設置命令參數
// 出口參數:無
//***************************************
void TM1629_WriteCommand(uint8 Comm)
{
TM1629_CS_LOW ;
Nop1629(V_NOP) ;
TM1629_WriteByteData(Comm);
TM1629_CS_HIGH ;
}
//**************************************
// 函數名稱:TM1668_WriteAddrData
// 函數功能:向固定地址寫一個數據
// 入口參數:地址 數據
// 出口參數:無
//***************************************
void TM1629_WriteAddrData(uint8 Addr,uint8 Data)
{
TM1629_CS_LOW ;
TM1629_WriteByteData(Addr); //寫地址
TM1629_WriteByteData(Data); //寫數據SS
TM1629_CS_HIGH ;
}
//**************************************
// 函數名稱:TM1629_WriteDat
// 函數功能:TM1629 寫緩沖區數據
// 入口參數:顯示數據緩存區
// 出口參數:
// 備注:
//***************************************
void TM1629_WriteDat(uint8 *InDat,uint8 DspLight)
{
uint8 i ;
uint8 Addr ;
TM1629_WriteCommand(V_MDAT4) ; //寫數據到1629 固定地址模式
TM1629_WriteCommand(DspLight) ; //V_LED_LIGHT1 顯示對比度
//-----
Addr = V_ADDR0 ;//從第1個地址開始寫
for(i=16;i>0;i--) //刷顯數據 6
{
TM1629_WriteAddrData(Addr,*InDat) ;
Addr ++ ;
InDat ++ ;
}
//-----
}