单片机12位A/D转换器TLC2543,
/*DATA INPUT 17脚 为串行数据输入端,
DATA OUT 16脚 为A/D转换结果的三态串行输出端
EOC 19脚 转换结束端,
I/O CLOCK 18脚 为I/O时钟端,
REF+为正基准电压端,
REF-为负基准电压端,
VCC为电源端,
#define uchar unsigned char
#define uint unsigned int
// 数码管0-9
unsigned char seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
sbit SDO = P1^0;
sbit SDI = P1^1;
sbit CS = P1^2;
sbit CLK = P1^3;
sbit EOC = P1^4;
sbit wei1=P2^0;
sbit wei2=P2^1;
sbit wei3=P2^2;
sbit wei4=P2^3;
void delay(uint N)
{
uint i;
for (i = 0; i < N; i++);
}
uint TLC2543_12AD(uchar voltage)
{
uchar i; // for loop
uint shuju = 0; // 输出的数据,一共十六位,前四位为0
CS = 0;
// CLK = 0 ;
// voltage<<= 4;
for(i = 0; i < 12; i++)
{
shuju <<= 1;
if(SDO == 1)
shuju |= 0x01;
// 高位溢出,溢出数据CY给输入SDI
voltage<<= 1;//0010 0000
//v 的二进制值为 101(十进制 5),执行 v <<= 1 后,v 变为 1010(十进制 10)
//对于二进制数 0000 0000 00010 0000(共13位),如果将其作为整数处理,
//其十进制值为32(计算方式:2^5 = 32)。
//由于32在 uchar 的取值范围(0-255)内,因此可以直接赋值给 uchar 类型变量,不会发生溢出或截断。
SDI =CY;
// CLK一次脉冲,传输数据
CLK = 1; delay(3);
CLK = 0; delay(3);
}
CS = 1;
return shuju;
}
void display()
{
uint value;
//输入命令字,获取数据: 将AIN2输入的5V模拟量转换为4095(2^12 - 1)的离散量 */TLC2543电压测量
value = TLC2543_12AD(0X20) * 1.221; // 5000 / 4095
///0X00是AIN0,0x10是AIN1,0x02是AIN2路。
wei1 = 0;
P0 = seg[value/1000] + 0x80; // 输出小数点
delay(500);
wei1 = 1;
wei2 = 0;
P0 = seg[value%1000/100];
delay(500);
wei2 = 1;
wei3 = 0;
P0=seg[value%100/10];
delay(500);
wei3=1;
wei4=0;
P0=seg[value%10];
delay(500);
wei4=1;
}
void main(){
while(1){
while(!EOC); // 转换结束端,EOC为1时,输出完成
display();
}
DATA OUT 16脚 为A/D转换结果的三态串行输出端
EOC 19脚 转换结束端,
I/O CLOCK 18脚 为I/O时钟端,
REF+为正基准电压端,
REF-为负基准电压端,
VCC为电源端,
GND为地。*/
TLC2543电压测量心片
DATA INPUT 序列数据输入。4位序列地址选择接下来要转换的所需模拟输入或测试电压。
序列数据首先以最大值呈现,并在I/O时钟的前四个上升沿移入。
将四个地址位读取到地址寄存器中后,I/O时钟按顺序计时剩余位。
通过网盘分享的文件:TLC2543
链接: https://pan.baidu.com/s/1Po-CCFduwslSc6r1vcKguw 提取码: rfvz
#define uchar unsigned char
#define uint unsigned int
// 数码管0-9
unsigned char seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
sbit SDO = P1^0;
sbit SDI = P1^1;
sbit CS = P1^2;
sbit CLK = P1^3;
sbit EOC = P1^4;
sbit wei1=P2^0;
sbit wei2=P2^1;
sbit wei3=P2^2;
sbit wei4=P2^3;
void delay(uint N)
{
uint i;
for (i = 0; i < N; i++);
}
uint TLC2543_12AD(uchar voltage)
{
uchar i; // for loop
uint shuju = 0; // 输出的数据,一共十六位,前四位为0
CS = 0;
// CLK = 0 ;
// voltage<<= 4;
for(i = 0; i < 12; i++)
{
shuju <<= 1;
if(SDO == 1)
shuju |= 0x01;
// 高位溢出,溢出数据CY给输入SDI
voltage<<= 1;//0010 0000
//v 的二进制值为 101(十进制 5),执行 v <<= 1 后,v 变为 1010(十进制 10)
//对于二进制数 0000 0000 00010 0000(共13位),如果将其作为整数处理,
//其十进制值为32(计算方式:2^5 = 32)。
//由于32在 uchar 的取值范围(0-255)内,因此可以直接赋值给 uchar 类型变量,不会发生溢出或截断。
SDI =CY;
// CLK一次脉冲,传输数据
CLK = 1; delay(3);
CLK = 0; delay(3);
}
CS = 1;
return shuju;
}
void display()
{
uint value;
//输入命令字,获取数据: 将AIN2输入的5V模拟量转换为4095(2^12 - 1)的离散量 */TLC2543电压测量
value = TLC2543_12AD(0X20) * 1.221; // 5000 / 4095
///0X00是AIN0,0x10是AIN1,0x02是AIN2路。
wei1 = 0;
P0 = seg[value/1000] + 0x80; // 输出小数点
delay(500);
wei1 = 1;
wei2 = 0;
P0 = seg[value%1000/100];
delay(500);
wei2 = 1;
wei3 = 0;
P0=seg[value%100/10];
delay(500);
wei3=1;
wei4=0;
P0=seg[value%10];
delay(500);
wei4=1;
}
void main(){
while(1){
while(!EOC); // 转换结束端,EOC为1时,输出完成
display();
}
}







最新发布