- /* --EL------------------------------ ------------*/
- /* -----------------通用--------------------*/
- /*------------------------------------------------*/
- //CE-片選 DAI-數據輸入 DAO-數據輸出 CLK-時鐘 STB—鎖存 CLR-復位 addr-地址//
- #include "EL_Allhead.H"
- #include "EL_TM1638.H"
- unsigned char idata TM1638_CacheTab[16];//顯示緩存
- unsigned char code TM1638_SEGTab[]={0x5f,0x0c,0x9b,0x9e,0xcc,0xd6,0xd7,0x1c,0xdf,0xde}; //數碼管0-9
- void TM1638_SPI(unsigned char dat) //TM1638
- {
- unsigned char i;
- TM1638_CE =0; //給有效的片選信號(片選信號是低電平有效)
- for(i=0;i<8;i++)//開始傳送8位數據,每循環一次傳送一位數據
- {
- TM1638_CLK =0;
- Delay1us(1);
- dat>>=1;//移位數據,低位在前!
- TM1638_DAI=CY;
- TM1638_CLK =1;
- Delay1us(1);
- }
- }
- void TM1638_DispData()//傳送數據,并顯示
- {
- static unsigned char i;
- TM1638_CE = 1;TM1638_CLK = 1;TM1638_DAI = 1;
- TM1638_SPI(0x40);//寫數據到顯示寄存器,采用地址自動加一
- TM1638_CE = 1;
- TM1638_SPI(0xc0);//顯示寄存器的00H單元開始
- for(i=0;i<16;i++)
- TM1638_SPI(TM1638_CacheTab[i]);//給顯示寄存器送數據,
- TM1638_CE = 1;
- TM1638_SPI(0x8b);//顯示控制參數,點亮數碼屏幕,亮度可以通過改變低三位調節
- TM1638_CE = 1;
- }
- void TM1638_ClrData()//清除數據/
- {
- unsigned char i;
- TM1638_CacheTab[0]=0x01; //關機指示燈
- for(i=1;i++;i<16)
- TM1638_CacheTab[i]=0;
- }
- /***陳列數據處理函數**傳入 數據,位置(0-9)10顯示***/
- void TM1638_CfgData(unsigned char _Num,unsigned char _WeiData) //陳列數據/
- {
- unsigned char i=0, j=0;
- if(_Num>1)_WeiData=TM1638_SEGTab[_WeiData]; //數碼管0-9 轉換
- if(_Num<8) //1-8位
- {
- for (i = 0; i < 16; i =i+2)
- {
- if ((_WeiData & 0x01) == 0x01)
- TM1638_CacheTab[i]|=(0x01<<_Num); //1
- else
- TM1638_CacheTab[i]&=~(0x01<<_Num); //0
- _WeiData =(_WeiData>>1);
- }
- }
- else if(_Num<10) //9-10位
- {
- _Num = _Num - 8;
- for (i=1;i<16;i=i+2)
- {
- if (_WeiData&0x01==0x01)
- TM1638_CacheTab[i]|=(0x01<<_Num); //1
- else
- TM1638_CacheTab[i]&=~(0x01<<_Num); //0
- _WeiData =(_WeiData >> 1);
- }
- }
- else
- {
- TM1638_DispData();//傳送數據,并顯示
- }
- }
復制代碼 |