|
- #include <stc8.h>
- #include <intrins.h>
- sbit CLK = P1^0; // 連接到TM1640的CLK引腳
- sbit DIO = P1^1; // 定義DIO引腳,連接到TM1640的DIO引腳
- //本地常量聲明
- unsigned char code table[]={ //標(biāo)準(zhǔn)字庫
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
- //black - H J K L N o P U t G Q r M y
- 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e};
- void TM1640_Start(void)
- {
- CLK = 1; // CLK引腳置高電平
- DIO = 1; // DIO引腳置高電平
- _nop_();_nop_();//延時2個時鐘
- DIO = 0; // DIO引腳置低電平
- CLK = 0;
- }
- void TM1640_Stop(void)
- {
- DIO = 0; // DIO引腳置低電平
- _nop_();_nop_();//延時2個時鐘
- CLK = 1; // CLK引腳置高電平
- _nop_();_nop_();//延時2個時鐘
- DIO = 1; // DIO引腳置高電平
- }
- void TM1640_Write_Byte(unsigned char data1)
- {
- unsigned char i;
- CLK = 0;
- DIO = 0;
- for(i=0; i<8; i++) // 循環(huán)8次,寫入8位數(shù)據(jù)
- {
- CLK = 0; // CLK引腳置低電平
- if(data1 & 0x01)
- DIO = 1; // 將data1的最低位寫入DIO引腳
- else
- DIO = 0;
- CLK = 1;
- data1 >>= 1; // data1右移1位,準(zhǔn)備寫入下一位
- }
- CLK = 0; // CLK引腳置低電平
- DIO = 0; // DIO引腳置低電平
- }
- void TM1640_Write_Com(unsigned char date)//發(fā)送命令字
- {
- TM1640_Start();
- TM1640_Write_Byte(date);
- TM1640_Stop();
- }
- void TM1640_Display()
- {
- unsigned char i;
- TM1640_Write_Com(0x40);//44固定地址 40連續(xù)地址
- TM1640_Start(); // 發(fā)送起始信號
- TM1640_Write_Byte(0xc0);//從第一個地址開始
- for(i=0;i<3;i++)
- TM1640_Write_Byte(table[i+1]); // 連續(xù)發(fā)3個數(shù)字。最多16個數(shù)字
- TM1640_Stop(); // 發(fā)送結(jié)束信號
- }
- void TM1640_Cls()//清屏函數(shù)
- {
- unsigned char i;
- TM1640_Write_Com(0x40);//地址自動加1模式
- TM1640_Start();
- TM1640_Write_Byte(0xc0);
- for(i=0;i<16;i++)
- TM1640_Write_Byte(0x00);
- TM1640_Stop();
- }
- void TM1640_Init()
- {
- TM1640_Cls();
- TM1640_Write_Com(0x8c);//亮度0x88~0x8F
- }
- void main()
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- P6M0 = 0x00;
- P6M1 = 0x00;
- P7M0 = 0x00;
- P7M1 = 0x00;
- TM1640_Init();
- TM1640_Display();//連續(xù)發(fā)1、2、3。
- while(1);
- }
復(fù)制代碼 |
|