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