功能描述:I2C總線接口,只需要4根線就可以驅(qū)動(dòng)4位數(shù)碼管顯示和3個(gè)按鍵的
掃描,可做面板使用,正面只有數(shù)碼管和按鍵,其他元件都在背面,可連接各
種單片機(jī)實(shí)現(xiàn)控制,簡(jiǎn)單方便,另外可配本店其他繼電器板子實(shí)現(xiàn)功能。
【簡(jiǎn)要說(shuō)明】
一、 尺寸:長(zhǎng)42mmX寬36mmX高10mm
二、 主要芯片:共陰數(shù)碼管,TM1650(專用數(shù)碼管驅(qū)動(dòng)芯片)
三、 供電電壓:直流5V 電流小于50MA
四、特點(diǎn):
1、內(nèi)部有專用數(shù)碼管驅(qū)動(dòng)電路。
2、四位一體數(shù)碼管顯示。
3、使用壽命:≥5萬(wàn)小時(shí)
4、排線長(zhǎng)度:30cm (送)
5、驅(qū)動(dòng)方式:I2C協(xié)議
6、電器絕緣電阻100M
7、工作溫度-40度至 +70度
8、工作濕度 40% ~ 80%RH
9、板子功耗小于0.1W
功能特點(diǎn):
1、只用四根線就可以方便連接
2、只占用單片機(jī)兩個(gè)IO口,大大減少了單片機(jī)IO口
3、八級(jí)灰度可以調(diào)節(jié),可以通過(guò)寫寄存器的值來(lái)調(diào)節(jié)
4、無(wú)需單片機(jī)主程序動(dòng)態(tài)去掃描,大大節(jié)省了單片機(jī)CPU占用率
5、方便與各種單片機(jī)控制板連接,用于顯示和參數(shù)設(shè)置調(diào)節(jié)
6、接口采用白色優(yōu)質(zhì)插頭,插拔方便,接線方便
7、用途廣泛,可用于單片機(jī)控制板需要拓展顯示的電路板等等
8、四個(gè)固定孔3mm方便客戶安裝設(shè)備面板
用途:
用于計(jì)數(shù)器、延時(shí)器、頻率計(jì)、秒表、電壓電流顯示等等,也可配套我們繼電器控制板用來(lái)顯示時(shí)間和參數(shù)調(diào)節(jié)
使用說(shuō)明:
【標(biāo)注說(shuō)明】
【接線說(shuō)明】
【原理圖】
【PCB圖】
【元件清單】
【參考例程】
程序中晶振位6M,數(shù)碼管3個(gè)按鍵,按第一個(gè)進(jìn)入設(shè)置模式,此時(shí)后面的數(shù)碼管開始閃爍,
按后2個(gè)按鍵可以調(diào)節(jié)時(shí)間,再次按設(shè)置鍵回到時(shí)間顯示狀態(tài)
觸發(fā)后開始延時(shí),繼電器吸和,延時(shí)結(jié)束后繼電器斷開
***************************************/
#include"STC15F104E.h"
#include"TM1650.h"
#include"eeprom.h"
#define uchar unsigned char
#define uint unsigned int
uchar CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9顯示代碼
sbit OUT = P3^2;
sbit IN = P3^5;
uint time1,time2;
uchar count;
uchar disbuf[4] = {0,0,0,0};
uchar update_dis;
uchar key_timeto;
uchar mode;
uchar t,t1;
uint time;
static uchar stat;
uchar Start_Delay;
void init_timer(void) //定時(shí)器初始化
{
TMOD = 0x01; //定時(shí)器模式
TH0 = (65535-1000)/256;//定時(shí)器賦初值
TL0 = (65535-1000)%256;
ET0 = 1; //開定時(shí)器中斷
TR0 = 1; //開定時(shí)器
EA = 1; //開總中斷
}
void main(void) //
{
uchar key,key_ok;
Init_Tm1650();//初始化數(shù)碼管
TM1650_Set(0x68,CODE[0]);//初始化后要把顯存先寫數(shù)據(jù)就能顯示
TM1650_Set(0x6A,CODE[0]);
TM1650_Set(0x6C,CODE[0]);
TM1650_Set(0x6E,CODE[0]);
time1 = (IapReadByte(0)<<8)+IapReadByte(1);//讀eeproM中數(shù)據(jù),初始化時(shí)間初值
if(time1 >= 999)//如果時(shí)間值大于999則是第一次上電
{
time1 = 200;//則為默認(rèn)值
}
init_timer();//定時(shí)器初始化
time = time1;//初始化時(shí)間
while(1)
{
if(key_timeto)//如果按鍵掃描時(shí)間到,此變量在定時(shí)器中會(huì)被每隔60ms置1一次
{
key_timeto = 0; //清0
key = Scan_Key();//讀按鍵
//第一個(gè)按鍵按下
if(key == 0x47) //此鍵值和數(shù)據(jù)手冊(cè)上對(duì)應(yīng)
{
if(key_ok==0) //按鍵按下
{
key_ok = 1;
mode = (mode+1)%2;//切換模式
}
}
//第二個(gè)按鍵按下
else if(key == 0x4d)
{
if(mode == 1)//模式1為設(shè)置模式
{
if(time1<999)
time1 = (time1+1);//按此鍵加時(shí)間
}
else if(mode ==2)
{
time2 = (time2+1);
}
IapEraseSector(0);//保持改變后的時(shí)間值
IapProgramByte(0,(time1>>8));
IapProgramByte(1,(uchar)time1);
}
//第三個(gè)按鍵按下
else if(key == 0x56)
{
if(mode == 1)//模式1
{
if(time1>0)
{
time1--;//減時(shí)間
}
}
else if(mode ==2)
{
if(time2>0)
{
time2--;
}
}
IapEraseSector(0); //保存時(shí)間
IapProgramByte(0,(time1>>8));
IapProgramByte(1,(uchar)time1);
}
else
{
key_ok = 0;
}
}
if(update_dis) //30ms到,更新顯示
{
update_dis = 0;
if(stat ==0)
{
if(mode == 1)//如果是模式1
{
t1++;
if(t1<=4) //則后三位閃爍顯示
{
TM1650_Set(0x68,0x77); //顯示
TM1650_Set(0x6A,CODE[time1/100]);
TM1650_Set(0x6C,CODE[time1/10%10]|0x80);
TM1650_Set(0x6E,CODE[time1%10]);
}
else //
{
if(t1>8)
t1 = 0; //不顯示
TM1650_Set(0x68,0x77);
TM1650_Set(0x6A,0);
TM1650_Set(0x6C,0);
TM1650_Set(0x6E,0);
}
}
else if(mode == 0)
{
TM1650_Set(0x68,0x77);
TM1650_Set(0x6A,CODE[time/100]);
TM1650_Set(0x6C,CODE[time/10%10]|0x80);
TM1650_Set(0x6E,CODE[time%10]);
}
}
else if(stat == 1)//最后倒計(jì)時(shí)完后顯示的內(nèi)容
{
TM1650_Set(0x68,0x40);
TM1650_Set(0x6A,0x40);
TM1650_Set(0x6C,0x40);
TM1650_Set(0x6E,0x40);
}
}
}
}
void timer() interrupt 1//定時(shí)器中斷
{
static uchar key,L_key;
static uint cnt,cnt1,cnt2;
TH0 = (65535-1000)/256;//6M晶振,2ms進(jìn)一次中斷
TL0 = (65535-1000)%256;
L_key = key; //保持此次狀態(tài)
key = IN; //讀取輸入狀態(tài)
if((key == 0)&&(L_key == 1))//如果是輸入有觸發(fā)
{
cnt = cnt1 = 0;
if(++count>=1)
{
count = 2;
OUT = 0; //開繼電器
Start_Delay = 1;//開始計(jì)時(shí)
time = time1;
stat = 0;
}
}
if(++cnt2>=30) //更新按鍵掃描和顯示標(biāo)記位
{
cnt2 = 0;
update_dis = 1;
key_timeto = 1;
}
if(Start_Delay)//如果開始延時(shí)
{
if(++cnt1>=50) //0.1s到
{
cnt1 = 0;
if(stat==0)
{
if(time == 0)//如果時(shí)間為0了
{
OUT = 1;//關(guān)繼電器
stat = 1;
Start_Delay = 0; //停止延時(shí)
}
if(time>0) //時(shí)間大于0就減1
{
time--;
}
}
else if(stat== 1)
{
}
}
}
}
【圖片展示】