- #include <STC15.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- #define TM1640MEDO_ADD 0x44 //地址模式的設置0x40自動加一模式 0x44固定地址模式
- #define TM1640MEDO_DISPLAY 0x88 //設置亮度小:0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8f最大0x80關閉
- #define TM1640MEDO_DISPLAY_OFF 0x80 //宏定義 關亮度設置
- #define Delay(us){_nop_();_nop_();_nop_();_nop_();}
- sbit DIN = P3^7; //TM1640數據線
- sbit SCLK = P3^6; //TM1640時鐘線
- uchar buff[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //數字0~F
- // 0 1 2 3 4 5 6 7 8 9 A b C d E F -
- //**************************************************************************************************
- //功能:延時1毫秒
- //***************************************************************************************************
- void Delay_xms(uint x)
- {
- uint i,j;
- for(i=0;i<x;i++)
- for(j=0;j<112;j++);
- }
- //功能:12us延時
- void Delay_us(uint t)
- {
- for(;t>0;t--)
- {
- _nop_();
- }
- }
- //啟始
- void TM1640_start()
- {
- DIN=1;
- SCLK=1;
- Delay_us(1);
- DIN=0;
- Delay_us(1);
- SCLK=0;
- Delay_us(1);
- }
- //結束
- void TM1640_stop()
- {
- DIN=0;
- SCLK=1;
- Delay_us(1);
- DIN=1;
- Delay_us(1);
- }
- //寫數據
- void TM1640_write(uchar date)
- {
- uchar i;
- uchar aa;
- aa=date;
- DIN=0;
- SCLK=0;
- for(i=0;i<8;i++)
- {
- SCLK=0;
- Delay_us(1);
- if(aa&0x01)
- {
- DIN=1;
- Delay_us(1);
- }
- else
- {
- DIN=0;
- Delay_us(1);
- }
- SCLK=1;
- Delay_us(1);
- aa=aa>>1;
- }
- DIN=0;
- SCLK=0;
- }
- //TM1640初始化
- void TM1640_Init(void)
- {
- TM1640_start();
- TM1640_write( TM1640MEDO_ADD ); //設置工作模式
- TM1640_stop();
- TM1640_start();
- TM1640_write( TM1640MEDO_DISPLAY );//設置顯示亮度
- TM1640_stop();
- }
- //固定地址模式的顯示輸出函數
- void TM1640_display(uchar address,uchar date)
- {
- TM1640_start();
- TM1640_write( 0xc0 + address ); //傳顯示數據對應的地址,0-15位數碼管
- // TM1640_write( buff[date] + 0x80 ); //傳1BYTE顯示數據,對應顯示buff[]數組內容,顯示小數點
- TM1640_write( buff[date] ); //傳1BYTE顯示數據,對應顯示buff[]數組內容,不顯示小數點
- TM1640_stop();
- }
- void main()
- {
- uchar i,j,k;
- TM1640_Init();
-
- while(1)
- {
- //16位同時依次顯示各段
- j=1;
- for(i=0; i<8; i++)
- {
- for(k=0; k<16; k++)
- {
- TM1640_start();
- TM1640_write( 0xc0 + k );
- TM1640_write(j);
- TM1640_stop();
- }
- Delay_xms(3000);
- j = j<<1;
- }
-
- //16位同時依次顯示:0~F
- for(i=0; i<16; i++)
- {
- for(j=0; j<16; j++)
- {
- TM1640_display( j, i );
- }
- Delay_xms(5000);
- }
-
- //從0~F,各位同時顯示數字
- for(i=0; i<16; i++)
- {
- TM1640_display(i,i);
- }
- Delay_xms(50000);
- }
- }
復制代碼
|