|
首先:查找TM1637芯片的手冊(cè),看清楚它的每個(gè)管腳的用途和控制條件。
例如:
百度文庫(kù):https://wenku.baidu.com/view/defe34f3f90f76c661371a2e.html
第二:查找四聯(lián)裝數(shù)碼管的各引腳。
例如:某款四聯(lián)裝數(shù)碼管的資料圖:
第三:根據(jù)以上資料,搭建自己的硬件。也就是將這兩個(gè)硬件連接起來,再與單片機(jī)連接起來。
第四:根據(jù)硬件特性,編寫程序。
例如:
/*****************************************************************************
*版權(quán)信息:深圳天微電子有限公司
*文 件 名:TM1637-V1.0
*當(dāng)前版本:V1.0
*MCU 型號(hào):STC12C5608AD
*開發(fā)環(huán)境:Keil uVision4
*晶震頻率:11.0592MHZ
*完成日期:2013-07-19
*程序功能:數(shù)碼管驅(qū)動(dòng)和按鍵:驅(qū)動(dòng)8段6位LED共陽(yáng)數(shù)碼管顯示,當(dāng)對(duì)應(yīng)按鍵按下時(shí)顯示1~7,原理圖請(qǐng)參考TM1637規(guī)格書;
*免責(zé)聲明:1.此程序?yàn)門M1637驅(qū)動(dòng)共陽(yáng)LED數(shù)碼管和按鍵演示程序,僅作參考之用。
2.如有直接使用本例程程序造成經(jīng)濟(jì)損失的,本公司不承擔(dān)任何責(zé)任
********************************************************************************/
#include <reg52.h> //頭文件
#include "intrins.h" //包含_nop_()指令頭文件
#define nop _nop_();_nop_();_nop_();_nop_();_nop_(); //宏定義
/********************定義控制端口**********************/
sbit CLK=P2^2; //定義CLK
sbit DIO=P2^3; //定義DIO
/********************定義數(shù)據(jù)*************************/
unsigned char code CODE[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共陽(yáng)顯示數(shù)據(jù)0-F
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f*/
unsigned char code TAB[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//數(shù)碼管不顯示
/********************延時(shí)函數(shù),延時(shí)nms******************/
void delay_nms(unsigned int n)
{
unsigned int i;
while(n--)
for(i=0;i<550;i++);
}
/********************Start函數(shù)*************************/
void I2CStart()
{
DIO=1;
CLK=1;
nop;
DIO=1;
nop;
DIO=0;
nop;
CLK=0;
}
/********************Stop函數(shù)*************************/
void I2CStop()
{
CLK=0;
nop;
nop;
DIO=0;
nop;
nop;
CLK=1;
nop;
nop;
nop;
DIO=1;
nop;
CLK=0;
DIO=0;
}
/***************發(fā)送8bit數(shù)據(jù),從低位開始**************/
void I2CWritebyte(unsigned char oneByte)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(oneByte&0x01)
DIO=1;
else
DIO=0;
nop;
CLK=1;
oneByte=oneByte>>1;
}
//8位數(shù)據(jù)傳送完
CLK = 0; //判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
nop;
while(DIO==1);
nop;
CLK = 1;
nop;
}
/***************讀按鍵程序**************/
unsigned char read_key()
{
unsigned char rekey,i;
I2CStart();
I2CWritebyte(0x42); //寫讀鍵指令0x42
DIO=1;
for(i=0;i<8;i++)
{
CLK=0;
nop;
nop;
rekey=rekey>>1; //先讀低位
nop;
nop;
CLK=1;
if(DIO)
rekey=rekey|0x80;
else
rekey=rekey|0x00;
nop;
}
CLK = 0; //判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
nop;
nop;
while(DIO==1);
nop;
nop;
CLK = 1;
nop;
nop;
I2CStop();
return rekey;
}
/************顯示函數(shù),地址自加一************/
void disp0(unsigned char *p)
{
unsigned char i;
I2CStart();
I2CWritebyte(0x40); //數(shù)據(jù)命令設(shè)置:地址自動(dòng)加1,寫數(shù)據(jù)到顯示寄存器
I2CStop();
I2CStart();
I2CWritebyte(0xc0); //地址命令設(shè)置:初始地址為00H
for(i=0;i<6;i++) //發(fā)送4字節(jié)數(shù)據(jù)到顯存
{
I2CWritebyte(*p);
p++;
}
I2CStop();
I2CStart();
I2CWritebyte(0x8C); //顯示控制命令:開顯示,脈沖寬度為11/16.
I2CStop();
}
/************顯示函數(shù),固定地址寫數(shù)據(jù)************/
void disp(unsigned char add, unsigned char value)
{
I2CStart();
I2CWritebyte(0x44); //數(shù)據(jù)命令設(shè)置:固定地址,寫數(shù)據(jù)到顯示寄存器
I2CStop();
I2CStart();
I2CWritebyte(add); //地址命令設(shè)置:寫入add對(duì)應(yīng)地址
I2CWritebyte(CODE[value]); //給add地址寫數(shù)據(jù)
I2CStop();
I2CStart();
I2CWritebyte(0x8C); //顯示控制命令:開顯示,脈沖寬度為11/16.
I2CStop();
}
/************按鍵處理函數(shù),按鍵數(shù)據(jù)低位在前高位在后************/
void key_process()
{
unsigned char temp;
temp=read_key(); //讀取按鍵返回值
if(temp!=0xff)
{
disp0(TAB); //清屏
switch(temp)
{
case 0xf7 : disp(0xc0,1);break; //K1與SG1對(duì)應(yīng)按鍵按下,顯示1
case 0xf6 : disp(0xc1,2);break; //K1與SG2對(duì)應(yīng)按鍵按下,顯示2
case 0xf5 : disp(0xc2,3);break; //K1與SG3對(duì)應(yīng)按鍵按下,顯示3
case 0xf4 : disp(0xc3,4);break; //K1與SG4對(duì)應(yīng)按鍵按下,顯示4
case 0xef : disp(0xc4,5);break; //K2與SG1對(duì)應(yīng)按鍵按下,顯示5
case 0xee : disp(0xc5,6);break; //K2與SG2對(duì)應(yīng)按鍵按下,顯示6
case 0xed : disp(0xc0,7);break; //K2與SG3對(duì)應(yīng)按鍵按下,顯示7
default : break;
}
}
}
void main()
{
disp0(CODE); //上電數(shù)碼管顯示0~5
delay_nms(1);
while(1) //按鍵后顯示按鍵內(nèi)容
{
key_process();
delay_nms(100);
}
}
還是很簡(jiǎn)單的嘛。
有點(diǎn)麻煩?那么這樣也是可以的:
在某寶上找TM1637,就會(huì)有已經(jīng)連接好的模塊成品,你只需要連接上單片機(jī)即可,還提供可能完整的資料,好好學(xué)習(xí)一下,也是可以解決你的問題的。
|
|