隨著社會的不斷發展,人們對健康問題也是愈發的重視。而煙民也從傳統煙民轉變為電子煙民。年輕人作為電子煙民的主力軍,追求時尚與炫酷成為電子煙的基本標準。
電子煙需要顯示電量,以及追求時尚的一些燈光效果,同時可拓展語音播報功能,電量提示和音樂播放,是追求靚麗的方式之一,市面上的電子煙,需要通過MUC+電量檢測芯片+LED呼吸燈驅動芯片+功放芯片 等多個元器件組成,在電子煙有限的空間里,增加了許多面積。
深圳唯創知音研發的WT588F02KD-24SS,支持電量顯示、電池電量檢測、LED燈光效果、語音功能、等,有豐富的IO口資源開發產品;
應用框架圖
WT588F02KD-24SS,功能特點
1、可以支持4位數碼管調節亮度(可以擴展10個) ;
2、可以支持32個發光二極管LED單獨調光;
3、帶按鍵喚醒,主動掃描功能和帶按鍵返回;
4、內置亮度調節的電路---占空比8級可調,使用1K的頻率;
5、可控制數碼管顯示不同字符,也可對單段數碼管進行調節;
7、客戶也可以通過配套下載器在線更換芯片內部語音內容;
WT588F02KD-24SS
1、可以實時顯示電池電量,并可做實時電量語音播報;
2、充電時可做呼吸燈效果,充電結束后也做聲音提示和燈光效果提示;
3、可做炫酷彩燈效果(流水燈、呼吸燈);
WT588F02KD-24SS芯片相當于一顆74HC573鎖存芯片、一顆PCF8591 AD芯片和一顆語音播報芯片,從根本上節約了成本;而WT588F02KD-24SS支持UART協議調節LED顯示狀態、控制語音播報等開發步驟,極大的縮短了開發周期。
Uart串口通訊程序(參考程序)
#include "reg51.h"
#include "intrins.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define FOSC 11059200L //系統頻率 STC15
#define BAUD 9600 //串口波特率
sfr AUXR = 0x8e; //輔助寄存器
sfr T2H = 0xd6; //定時器2高8位
sfr T2L = 0xd7; //定時器2低8位
bit busy;
uchar rxcnt,rxbuf[64],txbuf[64],sum,song_num,cnt;
void SendData(uchar dat);
void Sendhex(uchar *s,uchar cnt);
void play_single_song(uchar song_num );
void Disp_tube(void );
void Disp_waterfall_light(void );
uint Key_Get_Value(void );
void Delay1000ms();
void main()
{
uchar i,j;
T2L = (65536 - (FOSC/4/BAUD)); //設置波特率重裝值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2為1T模式,并啟動定時器2
AUXR |= 0x01; //選擇定時器2為串口1的波特率發生器
ES = 1; //使能串口1中斷
EA = 1;
SendString("wt\r\nUart Test!\r\n");
while(1)
{
for(i=0;j<0xdf;i++)
{
play_single_song(i) ;//播放第i首
Delay1000ms();//依語音播放時間長短留相應的播放間距
Delay1000ms();
}
}
}
/*----------------------------UART中斷服務程序-----------------------------*/
void Uart() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
rxbuf[rxcnt++] = SBUF; //
rxcnt&=0x3f;
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙標志
}
}
/*----------------------------播放單首數據----------------------------*/
void play_single_song(uchar song_num )
{
sum=0;
txbuf[0]=0x7E;
txbuf[1]=0x04;
txbuf[2]=0xa0;
txbuf[3]=song_num;
for(j=1;j<4;j++)sum+=txbuf[j];//從第二位開始計算累加和
txbuf[4]=sum;
txbuf[5]=0xfe;
Sendhex(txbuf,6);
}
/*----------------------------數碼管顯示“1234”數據--------------------------------------*/
/*-------------------7E 0A B0 40 C0 C0 B5 D5 C9 8F 5C FE------------------------- ----*/
/*-----“0-F”的顯示碼分別為"0xFC 0xC0 0xB5 0xD5 0xC9 0x5D 0x7D 0xC4-----*/
/*-----0xEF0xFD 0xDD 0x7B 0x3E 0xF3 0x3F 0x2F "-----------------------------*/
void Disp_tube(void )
{
sum=0;
txbuf[0]=0x7E;
txbuf[1]=0x0A;
txbuf[2]=0xB0;
txbuf[3]=0x40; //地址自動遞增模式
txbuf[4]=0xC0; //第一位數碼管地址為0XC0
txbuf[5]=0xC0; //第一位數碼管顯示“1”
txbuf[6]=0xB5; //第二位數碼管顯示“2”
txbuf[7]=0xD5; //第三位數碼管顯示“3”
txbuf[8]=0xC9; //第四位數碼管顯示“4”
txbuf[9]=0x8F; //顯示亮度為“0x8F”
for(j=1;j<10;j++)sum+=txbuf[j];//從第二位開始計算累加和
txbuf[10]=sum;
txbuf[11]=0xfe;
Sendhex(txbuf,12);
}
/*-----------------------顯示流水燈,從第一位數碼開始逐一點亮--------------------------------------*/
/*--------------設置某段YY亮度X"7E 04 CX YY Sum FE "--------------------------------*/
void Disp_waterfall_light(void )
{
uchari;
for(i=0;i<0x20;i++)
{
sum=0;
txbuf[0]=0x7E;
txbuf[1]=0x04;
txbuf[2]=0xC4;//設置亮度為0XC4
txbuf[3]=i; //要顯示的段(0-31)
for(j=1;j<4;j++)sum+=txbuf[j];//從第二位開始計算累加和
txbuf[4]=sum;
txbuf[5]=0xfe;
Sendhex(txbuf,6);// 發送串口數據
Delay500ms();//延時500ms,再亮下一段
}
}
/*-----------------------串口接收顯示按鍵值-----------------------------------------------------------------*/
/*--------------串口中斷接收一幀數據后取出按鍵值(接收長度rxcnt)----------------------*/
/*--------------例如收到按鍵上傳數據幀“7E 06 B0 42 00 20 18 FE ”---------------------------*/
uint Key_Get_Value(void )
{
uchar i;
if((rxbuf[0]==0x7E)&&(rxbuf[3]==0x42)&&(rxbuf[7]==0xFE)) //判定幀頭,幀尾,命令碼是否為0x7E 0xFE0x42
{
sum=0;
for(i=1;i<6;i++)sum+=rxbuf[i];
if(sum==rxbuf[6]) //校對累加和是否一致
{
rxflag=1;//成功接收到按鍵,標志位置1
return (256*rxbuf[4]+rxbuf[5]) ;//返回按鍵值0x0020(00 20)
}
else return 0XFF; //返回錯誤碼0XFF
}
for(i=0;i<8;i++)rxbuf[i]=0;//清零接收緩沖區
}
/*----------------------------軟件延時1000MS----------------------------*/
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/*----------------------------發送串口數據----------------------------*/
void SendData(uchar dat)
{
while (busy); //等待前面的數據發送完成
busy = 1;
SBUF = dat; //寫數據到UART數據寄存器
}
/*----------------------------發送字符串----------------------------*/
void Sendhex(uchar *s,uchar cnt)
{
unsigned char i;
for(i=0;i};cnt++)senddata(*s++);
//===========end==================================
審核編輯:湯梓紅
-
led
+關注
關注
242文章
23321瀏覽量
661887 -
語音芯片
+關注
關注
12文章
1769瀏覽量
36618 -
電子煙
+關注
關注
20文章
227瀏覽量
29013
發布評論請先 登錄
相關推薦
評論