網(wǎng)站建設(shè)_超速云建站重慶seo標(biāo)準(zhǔn)
一、基本概述
TM1620是一種LED(發(fā)光二極管顯示器)驅(qū)動控制專用IC,內(nèi)部集成有MCU數(shù)字接口、數(shù)據(jù)鎖存
器、LED驅(qū)動等電路。本產(chǎn)品質(zhì)量可靠、穩(wěn)定性好、抗干擾能力強。主要適用于家電設(shè)備(智能熱
水器、微波爐、洗衣機、空調(diào)、電磁爐)、機頂盒、電子稱、智能電表等數(shù)碼管或LED顯示設(shè)備。
二、基本的特性說明
-
采用CMOS工藝
顯示模式(8 段×6 位~10段×4位)
輝度調(diào)節(jié)電路(8 級占空比可調(diào))
串行接口(CLK,STB,DIN)
振蕩方式:內(nèi)置RC振蕩
內(nèi)置上電復(fù)位電路
內(nèi)置數(shù)據(jù)鎖存電路
內(nèi)置針對LED反偏漏電導(dǎo)致暗亮問題優(yōu)化電路
抗干擾能力強
封裝形式:SOP20
三、管腳定義
四、指令說明
五、應(yīng)用電路
TM1620驅(qū)動共陰數(shù)碼屏硬件電路圖(18)
1、VDD、GND之間濾波電容在PCB板布線應(yīng)盡量靠近TM1620芯片放置,加強濾波效果。
2、連接在DIN、CLK、STB通訊口上下拉三個100pF電容可以降低對通訊口的干擾。
3、因藍光數(shù)碼管的導(dǎo)通壓降壓約為3V,因此TM1620供電應(yīng)選用5V。
六、電氣參數(shù)
七、封裝形式
本項目使用的是6位8段的數(shù)碼管,即0x020。
注意:芯片顯示寄存器在上電瞬間其內(nèi)部保存的值可能是隨機不確定的,此時我們直接發(fā)送開屏命令,將有可能出現(xiàn)顯示亂碼。所以建議對顯示寄存器進行一次上電清零操作,即上電后向12位顯存地址(00H-0BH)中全部寫入數(shù)據(jù)0x00。具體操作方法是:初始化TM1620時使用(2)數(shù)據(jù)命令中的自動地址增加命令,依次給所有地址寫0x00。
八、硬件電路
TM1620的STB、CLK、DIN引腳分別連接單片機的PC0、PC1、PC2引腳。
?初始化:
初始化TM1620的3個輸出引腳:
代碼部分:
定義結(jié)構(gòu)體類型:
typedef struct
{Brightness_level_t Brightness;void (*TM1620_Init)(void); //TM1620初始化void (*Disp)(Disp_NUM_t,uint8_t,Disp_DP_Status_t); //數(shù)碼管顯示
} Display_t;
寫入字節(jié)函數(shù):
/** @name TM1620_Write_Byte* @brief TM1620寫入字節(jié)* @param dat -> 待寫入數(shù)據(jù)* @retval None
*/
static void TM1620_Write_Byte(uint8_t dat)
{uint8_t i = 0;CLR_STB;for(i=0;i<8;i++){CLR_CLK;//準(zhǔn)備數(shù)據(jù)位if((dat & BIT0) == BIT0) //BIT0為宏定義,為0x01SET_DIN;elseCLR_DIN;dat = dat >> 1; //移位,為發(fā)送下一位做準(zhǔn)備//拉高CLK,發(fā)送數(shù)據(jù) SET_CLK; __nop();}
}
TM1620初始化函數(shù):
/** @name TM1620_Init* @brief TM1620初始化* @param None* @retval None
*/
static void TM1620_Init()
{uint8_t i = 0;//設(shè)置顯示模式TM1620_Write_Byte(Disp_Mode_GRID6_SEG8); SET_STB; //設(shè)置地址自動增加模式TM1620_Write_Byte(Write_Data_Addr_Auto_Add); SET_STB;//利用循環(huán)清除顯示寄存器地址TM1620_Write_Byte(Disp_SFR_Addr_00H); //首地址for(i=0;i<Disp_SFR_Addr_Num;i++)TM1620_Write_Byte(0x00); SET_STB; //調(diào)節(jié)數(shù)碼管輝度TM1620_Write_Byte(Display.Brightness);SET_STB;
}
數(shù)碼管顯示函數(shù):
/** @name Disp* @brief 數(shù)碼管顯示* @param Disp_NUM: 數(shù)碼管編號Dat 數(shù)據(jù)0~FDisp_DP_Status 小數(shù)點顯示狀態(tài)* @retval None
*/
static void Disp(Disp_NUM_t Disp_NUM,uint8_t Dat,Disp_DP_Status_t Disp_DP_Status)
{//檢查參數(shù)范圍if(Dat > 0x0F){System.Assert_Failed();}//設(shè)置顯示模式TM1620_Write_Byte(Disp_Mode_GRID6_SEG8); SET_STB;//設(shè)置地址固定模式TM1620_Write_Byte(Write_Data_Addr_Fix); SET_STB;//寫地址(數(shù)碼管編號)TM1620_Write_Byte(Disp_NUM);//寫數(shù)據(jù),并判斷有無小數(shù)點if(Disp_DP_Status == Disp_DP_ON)TM1620_Write_Byte(Disp_Decode[Dat] + 0x80); //Disp_Decode數(shù)組存貯的是數(shù)碼管顯示“0”~“F”的譯碼。elseTM1620_Write_Byte(Disp_Decode[Dat]);SET_STB;//設(shè)置輝度TM1620_Write_Byte(Display.Brightness);SET_STB;
}
外部中斷0回調(diào)函數(shù):
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == KEY1_Pin){LED.LED_Flip(LED2);switch(Display.Brightness){case Brightness_level_1: Display.Brightness = Brightness_level_2; break;case Brightness_level_2: Display.Brightness = Brightness_level_3; break;case Brightness_level_3: Display.Brightness = Brightness_level_4; break;case Brightness_level_4: Display.Brightness = Brightness_level_5; break;case Brightness_level_5: Display.Brightness = Brightness_level_6; break;case Brightness_level_6: Display.Brightness = Brightness_level_7; break;case Brightness_level_7: Display.Brightness = Brightness_level_8; break;case Brightness_level_8: Display.Brightness = Brightness_level_1; break;default: Display.Brightness = Brightness_level_3;}}
}