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条评论)
登录后参与讨论