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

📄 cs5512.c~

📁 使用cs5512做的电子秤,精度0.002kg
💻 C~
字号:
#include <config.h>

void Timer0_init(void)
{
 TCCR0  = 0x00;//停止定时器
 TCNT0  = 0x00;//初始值
 OCR0   = 0x06;//匹配值
 TIMSK |= 0x02;//中断允许
 TCCR0  = 0x0a;//CTC , 8分频
}

interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
CS5512_SCLK = ~CS5512_SCLK;
}

unsigned int AD_temp_buffer;

void delay_nop(void)
{
//  #asm("nop")
//  #asm("nop")
//  #asm("nop")
  #asm("nop")
  #asm("nop")
  #asm("nop")
  #asm("nop")
  #asm("nop")
}

void CS5512_Read(void)
{ 
    bit sdata;
    unsigned char Front4bit=0;
    unsigned int Back16bit=0;  //32位long int
    unsigned char Front4flag=0;     //前四位暂存变量
    unsigned char i;
    
    CS5512_CS=0;

while(CS5512_SDO);
  {    
   #asm("cli")   //禁全止局中断
   
   CS5512_SCLK=0;
      
for(i=0;i<4;i++)      
      {
       CS5512_SCLK=1;
       delay_nop();
       sdata=CS5512_SDO;
       Front4flag|=(sdata<<(3-i));
       CS5512_SCLK=0;
       delay_nop();
      } 
 if((Front4flag&0xff)==0)  //为真,则执行后面的转换程序
//if(!Front4Temp) 
  {               //else AD_temp_buffer=Old_AD;(上次AD转换滤波结果)        
    for(i=0;i<20;i++)
      {
       CS5512_SCLK=1;
       delay_nop();
       sdata=CS5512_SDO;
      // if(i<12) Written_char(0,i,(unsigned char)sdata);
      // else  Written_char(1,i-12,(unsigned char)sdata);  
       if(i<4) Front4bit|=sdata<<(3-i);
       else  Back16bit|=sdata<<(19-i);   
      // Data_temp|=sdata<<(19-i);
       CS5512_SCLK=0;
       delay_nop();            
      } 
      
    switch(Front4bit)
    {
      case 0:{AD_temp_buffer=Back16bit/10;break;}
      case 1:{AD_temp_buffer=(Back16bit+65536)/10;break;}
      case 2:{AD_temp_buffer=(Back16bit+131072)/10;break;}
      case 3:{AD_temp_buffer=(Back16bit+196608)/10;break;}
      case 4:{AD_temp_buffer=(Back16bit+262144)/10;break;}
      case 5:{AD_temp_buffer=(Back16bit+327680)/10;break;}
      case 6:{AD_temp_buffer=(Back16bit+393216)/10;break;}
      case 7:{AD_temp_buffer=(Back16bit+458752)/10;break;}
      default :{ }
    }         
    Display_AD(AD_temp_buffer);
  }
}   
  CS5512_CS=1;
                                       
  #asm("sei")
}

void main(void)
{ 
  Tone(200);         //开机报警
  #asm("cli") 
   
  Port_Init();       //端口初始化
  Timer0_init();     //定时器0初始化
//  Timer2_init();     //定时器2初始化
  Lcd_inint();       //lcd初始化(包含了清屏功能)
  
  #asm("sei")  
  
  CS5512_CS=0;

while(1)
  {
  CS5512_Read();
  } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -