📄 2543scale.c
字号:
#include<reg51.h>
#include<stdio.h>
#include<absacc.h>
#include <intrins.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
sbit CS=P1^0;
sbit DAT=P1^1;
sbit CLK=P1^2;
sbit SCAN1=P1^3;
sbit SCAN2=P1^4; //_CS复用
sbit D_IN=P1^5; //2543USE
sbit D_OUT=P1^6; //2543USE
sbit CLOCK=P1^7; //2543USE
uchar disq,disb,diss,disg;
//=======================
void delay(uchar ntime)
{
uchar i;
uint j;
for (i=0;i<ntime;i++)
{
for (j=0;j<0x390;j++){;}
}
}
//====十六进制转BCD码========
void hex_bcd(uint n)
{
uint dish;
//----千------
disq=n/1000;
//----百------
dish=n%1000;
disb=dish/100;
//-----十------
dish=dish%100;
diss=dish/10;
//---个------
disg=dish%10;
}
//=====================================
// TLC2543驱动程序
//=====================================
//#define _CS p14 //*2543时钟*/
//#define D_IN p15 //*2543输入*/
//#define D_OUT p16 //*2543输出*/
//#define CLOCK p17 //*2543片选*/
//=====================================
// 名称:delay1 功能:延时模块
// 输入参数:n要延时的周期数
// ====================================
/*void delay1(uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
_nop_();
}
}*/
//=====================================
// 名称:read2543
// 功能:TLC2543驱动模块
// 输入参数:port通道号
// 输出参数:ad转换值
// ===================================
uint read2543(uchar port)
{
uint ad=0;
uchar i;
CLOCK=0;
SCAN2=0;
port<<=4;
for(i=0;i<12;i++) //12位数据
{
if(D_OUT) ad|=0x01;
D_IN=(bit)(port&0x80);
CLOCK=1;
// ;
CLOCK=0;
// ;
port<<=1;
ad<<=1;
}
SCAN2=1;
ad>>=1;
return(ad);
}
/*//========标度转换======
uint demarcate(uint x)
{
signed int err=0;
uint adx,ady;
// bit adfj;
adx=820;
if(x<820) x=820;
ady=0;
while(adx!=x)
{
if(err>=0)
{
ady++;
err-=3277;
}
else
{
adx++;
ady++;
err+=1732;
}
}
return(ady);
}*/
//========标度转换======
uint demarcate(uint x)
{
signed int err=0;
uint adx,ady;
bit adfj;
if(x>2048)
{
adx=2048;
ady=2500;
//ady=2490;
adfj=1;
}
else
{
adx=0;
ady=0;
adfj=0;
}
while(adx!=x)
{
if(err>=0)
{
ady++;
if (adfj==1) err-=4096;
else err-=2048;
}
else
{
adx++;
ady++;
if(adfj==1) err+=904;
else err+=452;
}
}
return(ady);
}
/* while(ady<=x)
{
if(err>=0)
{
err-=905;
adx++;
ady++;
}
else
{
err+=4095;
adx++;
}
}
return(adx);
}*/
//==========显示模块=========
//DAT P1.1; LOAD P1.0 ; CLK P1.2
//=======地址:add====数据:dat========//
void cxdisp(uchar dat,uchar add)
{
uchar ADS,i,j;
uint a[10];
a[0]=0x29;
a[1]=0x14;
a[2]=0x01;
a[3]=0x03;
a[4]=0x00;
a[5]=0x0F;
CS=1;
CS=0;
CLK=0;
i=0;
while(i<12)
{
if(i<3){ADS=0x04;}
else {ADS=a[0];}
for(j=3;j>=1;j--)
{
if (ADS&0x80) {DAT=1;}
else{DAT=0;}
ADS=ADS<<1;
//------------
CLK=0;
CLK=1;
}
i=i+8;
}
CS=1;
;
CS=0;
;
CS=1;
}
//=====================================
void main()
{
// uint j;
// float ad3=0,ad2=0;
uint dad;
uint newad=0;
//int absad;
delay(20);
hex_bcd(newad);
cxdisp(disg,0x01);
cxdisp(diss,0x02);
cxdisp(disb,0x03);
cxdisp(disq,0x04);
cxdisp(0,0x05);
cxdisp(0,0x06);
while(1)
{
delay(20);
//{
// for(j=1;j<=1000;j++)
// {
newad= read2543(0);
// ad3+=newad;
// ad3=ad3/2;
dad=demarcate(newad);
hex_bcd(dad);
// ad2=5.00*newad/4096.00;
// ad2=ad2*1000;
// if(ad2<995)ad2=995;
// ad2=1.25*(ad2-995);
// ad3+=ad2;
// }
// ad3=ad3/1000;
// if(ad3<10)ad3=0;
// hex_bcd(ad3);
cxdisp(disg,0x01);
cxdisp(diss,0x02);
cxdisp(disb,0x03);
cxdisp(disq,0x04);
cxdisp(0,0x05);
cxdisp(0,0x06);
/* delay(20);
delay(50);
ad11=read2543(11);
hex_bcd(ad3);
cxdisp(disg,0x01);
cxdisp(diss,0x02);
cxdisp(disb,0x03);
cxdisp(disq,0x04);
cxdisp(0,0x05);
delay(50);
ad12=read2543(12);
hex_bcd(ad12);
cxdisp(disg,0x01);
cxdisp(diss,0x02);
cxdisp(disb,0x03);
cxdisp(disq,0x04);
cxdisp(0,0x05);
delay(50);
ad13=read2543(13);
hex_bcd(ad13);
cxdisp(disg,0x01);
cxdisp(diss,0x02);
cxdisp(disb,0x03);
cxdisp(disq,0x04);
cxdisp(0,0x05);*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -