|
TM1638數(shù)碼管電路原理圖如下:
0.png (74.13 KB, 下載次數(shù): 140)
下載附件
2018-7-21 17:35 上傳
單片機源程序如下:
- #include <REGX51.H>
- #include <tm1638.h>
- unsigned char num[8]; //各個數(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; //這里定義了那三個腳
- //共陰數(shù)碼管顯示代碼
- unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
- 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
- unsigned char num[8]; //各個數(shù)碼管顯示的值
- void setup ()
- {
- pinMode(STB,OUTPUT);
- pinMode(CLK,OUTPUT);
- pinMode(DIO,OUTPUT); //讓三個腳都是輸出狀態(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個字節(jié)數(shù)據(jù)合成一個字節(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表示各個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級亮度可調(diào)
- Write_COM(0x40); //采用地址自動加1
- digitalWrite(STB,LOW); //
- TM1638_Write(0xc0); //設(shè)置起始地址
- for(i=0;i<16;i++) //傳送16個字節(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 上傳
點擊文件名下載附件
TM1638驅(qū)動程序51 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|