📄 2543.c
字号:
/**************************************
TLC2543驱动程序
*************************************/
#include <AT89X52.H>
unsigned int read,invlevel;
float vlevel;
unsigned char seg7code[16]=
// 0 1 2 3 4 5 6 7 8 9 A b C d E F
{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
/**************************************
2543控制引脚宏定义
*************************************/
sbit CLOCK=P2^0; /*2543时钟*/
sbit D_IN=P2^1 ; /*2543输入*/
sbit D_OUT=P2^2; /*2543输出*/
sbit _CS=P2^3 ; /*2543片选*/
/**************************************
名称:delay
功能:延时模块
输入参数:n要延时的周期数
输出参数:无
*************************************/
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
;
}
}
void Led(unsigned int invlevel)
{
P2=P2&0xef;
P0=(seg7code[invlevel/1000])|0x80; //输出个位数和小数点
delay(100);
P2=P2|0xf0;
P2=P2&0xdf;
P0=seg7code[invlevel%1000/100]; //输出小数点后第一位
delay(100);
P2=P2|0xf0;
P2=P2&0xbf;
P0=seg7code[invlevel%100/10]; //输出小数点后第二位
delay(100);
P2=P2|0xf0;
P2=P2&0x7f;
P0=seg7code[invlevel%10]; //输出小数点后第三位
delay(100);
P2=P2|0xf0;
}
/**************************************
名称:read2543
功能:TLC2543驱动模块
输入参数:port通道号
输出参数:ad转换值
*************************************/
unsigned int read2543(unsigned char port)
{
unsigned int ad=0,i;
CLOCK=0;
_CS=0;
port<<=4;
for(i=0;i<12;i++)
{
if(D_OUT) ad|=0x01;
D_IN=(bit)(port&0x80);
CLOCK=1;
delay(3);
CLOCK=0;
delay(3);
port<<=1;
ad<<=1;
}
_CS=1;
ad>>=1;
return(ad);
}
void Datapro(unsigned int adv) ////////////TLC2543数据处理函数
{
unsigned int vhigh,vmid,vlow;
vhigh=(adv&0x0f00);
vhigh=(vhigh>>8);
vmid=(adv&0x00f0);
vmid=(vmid>>4);
vlow=(adv&0x000f);
vlevel=(vhigh*5000.0/4096*256+vmid*5000.0/4096*16+vlow*5000.0/4096);
}
/**************************************
名称:main
功能:主函数
输入参数:无
输出参数:无
*************************************///////////
void main()
{
while(1)
{
read=read2543(0x00);
Datapro(read);
invlevel=(int)vlevel;
Led(invlevel);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -