- /* --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();//传送数据,并显示
- }
- }
复制代码 |