⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2543scale.c

📁 2543采集芯片及电子数码管单片机电子秤系统
💻 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 + -