標(biāo)題:
TM1638驅(qū)動(dòng)數(shù)碼管的arduino和51單片機(jī)源程序與電路圖
[打印本頁]
作者:
475463351
時(shí)間:
2018-7-21 14:47
標(biāo)題:
TM1638驅(qū)動(dòng)數(shù)碼管的arduino和51單片機(jī)源程序與電路圖
TM1638數(shù)碼管電路原理圖如下:
0.png
(74.13 KB, 下載次數(shù): 140)
下載附件
2018-7-21 17:35 上傳
單片機(jī)源程序如下:
#include <REGX51.H>
#include <tm1638.h>
unsigned char num[8]; //各個(gè)數(shù)碼管顯示的值
int main(void)
{
unsigned char i;
init_TM1638(); //初始化TM1638
for(i=0;i<8;i++)
Write_DATA(i<<1,tab[0]); //初始化寄存器
while(1)
{
i=Read_key(); //讀按鍵值
if(i<8)
{
num[i]++;
while(Read_key()==i); //等待按鍵釋放
if(num[i]>15)
num[i]=0;
Write_DATA(i*2,tab[num[i]]);
Write_allLED(1<<i);
}
}
}
復(fù)制代碼
arduino源程序:
#define DATA_COMMAND 0X40
#define DISP_COMMAND 0x80
#define ADDR_COMMAND 0XC0
//TM1638模塊引腳定義
int DIO = 2;
int CLK = 1;
int STB = 0; //這里定義了那三個(gè)腳
//共陰數(shù)碼管顯示代碼
unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char num[8]; //各個(gè)數(shù)碼管顯示的值
void setup ()
{
pinMode(STB,OUTPUT);
pinMode(CLK,OUTPUT);
pinMode(DIO,OUTPUT); //讓三個(gè)腳都是輸出狀態(tài)
}
void loop()
{
unsigned char i;
init_TM1638(); //初始化TM1638
for(i=0;i<8;i++)
Write_DATA(i<<1,tab[0]); //初始化寄存器
while(1)
{
i=Read_key(); //讀按鍵值
if(i<8)
{
num[i]++;
while(i==Read_key()); //等待按鍵釋放
if(num[i]>15)
num[i]=0;
Write_DATA(i*2,tab[num[i]]);
Write_allLED(1<<i);
}
}
}
void TM1638_Write(unsigned char DATA) //寫數(shù)據(jù)函數(shù)
{
unsigned char i;
pinMode(DIO,OUTPUT);
for(i=0;i<8;i++)
{
digitalWrite(CLK,LOW);
if(DATA&0X01)
digitalWrite(DIO,HIGH);
else
digitalWrite(DIO,LOW);
DATA>>=1;
digitalWrite(CLK,HIGH);
}
}
unsigned char TM1638_Read(void) //讀數(shù)據(jù)函數(shù)
{
unsigned char i;
unsigned char temp=0;;
pinMode(DIO,INPUT);//設(shè)置為輸入
for(i=0;i<8;i++)
{
temp>>=1;
digitalWrite(CLK,LOW);
if(digitalRead(DIO)==HIGH)
temp|=0x80;
digitalWrite(CLK,HIGH);
}
return temp;
}
void Write_COM(unsigned char cmd) //發(fā)送命令字
{
digitalWrite(STB,LOW);
TM1638_Write(cmd);
digitalWrite(STB,HIGH);
}
unsigned char Read_key(void)
{
unsigned char c[4],i,key_value=0;
digitalWrite(STB,LOW);
TM1638_Write(0x42); //讀鍵掃數(shù)據(jù) 命令
for(i=0;i<4;i++)
{
c[i]=TM1638_Read();
}
digitalWrite(STB,HIGH); //4個(gè)字節(jié)數(shù)據(jù)合成一個(gè)字節(jié)
for(i=0;i<4;i++)
{
key_value|=c[i]<<i;
}
for(i=0;i<8;i++)
{
if((0x01<<i)==key_value)
break;
}
return i;
}
void Write_DATA(unsigned char add,unsigned char DATA) //指定地址寫入數(shù)據(jù)
{
Write_COM(0x44);
digitalWrite(STB,LOW);
TM1638_Write(0xc0|add);
TM1638_Write(DATA);
digitalWrite(STB,HIGH);
}
void Write_allLED(unsigned char LED_flag) //控制全部LED函數(shù),LED_flag表示各個(gè)LED狀態(tài)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(LED_flag&(1<<i))
Write_DATA(2*i+1,1);
else
Write_DATA(2*i+1,0);
}
}
//TM1638初始化函數(shù)
void init_TM1638(void)
{
unsigned char i;
Write_COM(0x8b); //亮度 (0x88-0x8f)8級(jí)亮度可調(diào)
Write_COM(0x40); //采用地址自動(dòng)加1
digitalWrite(STB,LOW); //
TM1638_Write(0xc0); //設(shè)置起始地址
for(i=0;i<16;i++) //傳送16個(gè)字節(jié)的數(shù)據(jù)
TM1638_Write(0x00);
digitalWrite(STB,HIGH);
}
復(fù)制代碼
所有資料51hei提供下載:
TM1638 按鍵數(shù)碼管LED顯示模塊(8位數(shù)碼管LED按鍵) 顯示模塊.zip
(961.32 KB, 下載次數(shù): 199)
2018-7-21 14:47 上傳
點(diǎn)擊文件名下載附件
TM1638驅(qū)動(dòng)程序51
下載積分: 黑幣 -5
作者:
zheng113001
時(shí)間:
2019-7-26 17:16
謝謝分享
作者:
zheng113001
時(shí)間:
2019-7-26 17:17
謝謝分享。。
作者:
H818488842839
時(shí)間:
2019-7-27 09:43
按鍵不行啊
作者:
zxy2266
時(shí)間:
2019-7-30 12:20
我買模塊好久了,正需要這程序
作者:
Ω囿圉Ω
時(shí)間:
2019-7-31 17:24
學(xué)習(xí)一下,謝謝分享。
作者:
lxr12
時(shí)間:
2019-8-21 19:31
天微的驅(qū)動(dòng)芯片用的人比較多
作者:
stlong
時(shí)間:
2019-9-19 08:43
感謝樓主的貢獻(xiàn)!
作者:
chenwbs
時(shí)間:
2020-1-20 16:05
非常感謝分享~~~~~~~~~~~~~~
作者:
xjlfh
時(shí)間:
2024-4-15 17:07
謝謝分享,實(shí)測(cè)可用。
作者:
zxy2266
時(shí)間:
2025-6-9 16:31
發(fā)表于 2019-7-30 12:20
我買模塊好久了,正需要這程序
哈哈 好多年了 ,還沒搞明白
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1