原创 TLC0834+LED显示

2008-10-28 17:22 5496 5 5 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2008/10/28/bc841171-b16a-4fc4-8b9f-058b1edb316d.rarTLC0834+LED显示


 


/*-------------------------------------------------------------*/
//File: TLC0834驱动程序
//Time: 20:13 
//Date: 08-8-4
//#include <intrins.h>



/*-------------------------------------------------------------*/
//防止头文件被重复调用
#ifndef __TLC0834_H__
#define __TLC0834_H__


 


/*-------------------------------------------------------------*/
//TLC0834管脚定义
sbit ADC_CLK = P2^4;
sbit ADC_CS  = P2^3;
sbit ADC_DIO = P2^5; //DI和DO可以接在一起使用 



/*-------------------------------------------------------------*/
unsigned int  Volt;   //电压换算并扩大1000倍
//unsigned char LCD[7];  //电压数据转化成液晶字符显示
unsigned char LED[4];  //电压数据转换成数码管数字
unsigned char code SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                          //0   1    2    3    4    5    6    7    8    9  


 


/*-------------------------------------------------------------*/
//函数声明
unsigned char TLC0834_Start(bit sgl, bit odd, bit sel);
//函数说明: 
// 多路器地址        通道号
//SGL/DIF ODD/EVEN SELECT_BIT   CH0   CH1   CH2   CH3
//L   L    L   +    -
//L   L    H                +     -
//L   H    L   -    +
//L   H    H                  -     +


//H   L    L       +
//H   L    H                   +
//H   H    L            +
//H   H    H                          +
//H=高电平,L=低电平,-或+=选定输入通道的端点的极性。


void Data_Conversion(void);    //电压换算并扩大1000倍
//void Volt_To_LCD(void);    //数据转化成液晶字符显示
void Volt_To_LED(void);     //数据转换成数码管显示数字


 


/*-------------------------------------------------------------*/
//TLC0834驱动函数 //支持最大时钟600kHz 250kHz--32us完成转换
unsigned char TLC0834_Start(bit sgl, bit odd, bit sel)
{
 unsigned char i;
 unsigned char temp;


 ADC_CLK = 0;
 ADC_CS  = 1;


 ADC_CS  = 0;
 ADC_DIO = 1; //发送启动位
 ADC_CLK = 1;
 //_nop_();


 ADC_CLK = 0;
 ADC_DIO = sgl; //发送sgl位
 ADC_CLK = 1;
 //_nop_();


 ADC_CLK = 0;
 ADC_DIO = odd;  //发送odd位
 ADC_CLK = 1;
 //_nop_();


 ADC_CLK = 0;
 ADC_DIO = sel; //发送sel位
 ADC_CLK = 1;
 //_nop_();
 ADC_CLK = 0;
 //_nop_();


 for(i = 8; i > 0; i--) //发送8个转换时间脉冲
 {
  ADC_CLK = 1;
  //_nop_();
  ADC_CLK = 0;
  //_nop_();
 }
 
 for(i = 8; i > 0; i--) //第12个时钟下降沿,此时数据线上已经发出LSB信号
 {
  temp >>= 1;
  if(ADC_DIO) temp |= 0x80;
  ADC_CLK = 1;
  ADC_DIO = 1;//先写1后再读,否则读出的数据不可预期
  //_nop_();
  ADC_CLK = 0; 
 }
 ADC_CS = 1;  //结束本次操作


 return (temp);
}


 



/*-------------------------------------------------------------*/
void Data_Conversion(void)
{
 unsigned char AD_Data;
 AD_Data = TLC0834_Start(1,0,0);
 Volt = 5.0 / 256 * AD_Data * 1000;
}


 


/*-------------------------------------------------------------*/
//数据转化成液晶字符显示
/*
void Volt_To_LCD(void)

 Data_Conversion();       //电压换算并扩大1000倍
 LCD[0] = Volt / 1000 + '0';  //千位
 LCD[1] = '.';     //小数点
 LCD[2] = Volt / 100 % 10 + '0'; //百位
 LCD[3] = Volt / 10 % 10 + '0';  //十位
 LCD[4] = Volt % 10 + '0';     //个位
 LCD[5] = 'V';     //字符V 
 LCD[6] = '\0';     //字符串结束标志符
}
*/


 



/*-------------------------------------------------------------*/
//数据转换成数码管显示数字
void Volt_To_LED(void)
{
 Data_Conversion();     //电压换算并扩大1000倍
 LED[0] = SEG[Volt / 1000] & 0x7f; //千位加小数点
 LED[1] = SEG[Volt / 100 % 10];  //百位
 LED[2] = SEG[Volt / 10 % 10];  //十位
 LED[3] = SEG[Volt % 10];   //个位 
}



/*-------------------------------------------------------------*/
#endif

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条