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

📄 thermometer_icc._c

📁 at9535下 同步串口spi的c语言编程 at9535下 同步串口spi的c语言编程
💻 _C
字号:
#include <IO8535V.h>
#include <MACROS.H>
#define uchar unsigned char
#define uint  unsigned int
uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//SPI INTERFACE
//sbit CE=PD^4;   置1:|0x10 ,置0:&0xef
//sbit SDI=PD^5;  置1:|0x20 ,置0:&0xdf 
//sbit SDO=PD^6;  置1:|0x40 ,置0:&0xbf
//sbit SCLK=PD^7; 置1:|0x80 ,置0:&0x7f
void DelayMs(uint i)
{uint j;
 for(;i!=0;i--)
   {for(j=2000;j!=0;j--) {;}}
}

void DelayNOP(uchar i)
{for(;i!=0;i--)  
    { NOP();}
} 

void Display(uchar *p)
{uchar i,sel=0x01;
 for(i=0;i<4;i++)
  {PORTA=sel;
   PORTC=0xff-Table[p[i]];
   DelayMs(2);
   sel=sel<<1;
  }
}

void Set_CE(uchar i)
{if(i==1) PORTB=PORTB|0x10;
 if(i==0) PORTB=PORTB&0xef;}
 
void Set_SDI(uchar i)
{if(i==1) PORTB=PORTB|0x20;
 if(i==0) PORTB=PORTB&0xdf;}
 
void Set_SCLK(uchar i)
{if(i==1) PORTB=PORTB|0x80;
 if(i==0) PORTB=PORTB&0x7f;}

void SPI_Init(void)
{Set_CE(0);//CE=0;//Disable Chip_Select
 Set_SCLK(1);//SCLK=1;//Clock Polarity(CPOL)=1
}

void SPI_Process(uchar *p1,uchar *p2)
{uchar i;
 p2[0]=p1[0]/100;
 i=p1[0]%100;
 p2[1]=i/10;
 p2[2]=i-p2[1]*10;
 p2[3]=0;
}

void SPI_Write1Byte(uchar Address,uchar Data)
{uchar i;
 Set_SDI(0);//SDI=0;
 Set_SCLK(1);//SCLK=1;//CPOL=1
 Set_CE(1);//CE=1;//Enable Chip_Select
 for(i=0;i<8;i++)             //送地址;
   {Set_SCLK(0);//SCLK=0;//时钟恢复
    if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
	else       Set_SDI(0);//SDI=0;
	Address=Address<<1;//左移
    Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
    DelayNOP(30);}
 for(i=0;i<8;i++)             //送地址;
   {Set_SCLK(0);//SCLK=0;//时钟恢复
    if(Data&0x80) Set_SDI(1);//SDI=1;//MSB first
	else       Set_SDI(0);//SDI=0;
	Data=Data<<1;//左移
    Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
    DelayNOP(30);}
  Set_CE(0);//CE=0;
} 

uchar SPI_Read1Byte(uchar Address)
{uchar i,temp;
 //SDO=1;
 Set_SCLK(1);//SCLK=1;//CPOL=1
 Set_CE(1);//CE=1;//Enable Chip_Select
 for(i=0;i<8;i++)             //送地址;
   {Set_SCLK(0);//SCLK=0;//时钟恢复
    if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
	else       Set_SDI(0);//SDI=0;
	Address=Address<<1;//左移
    Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
    DelayNOP(30);}
 for(i=0;i<8;i++)
   {Set_SCLK(0);//SCLK=0;//提供一个下降沿接收一位数据
    temp=temp<<1;
    DelayNOP(30);
	if(PINB&0x40) temp=temp|0x01;
	//if(SDO) temp=temp|0x01;//采样
	Set_SCLK(1);//SCLK=1;//时钟恢复
    DelayNOP(30);}
 Set_CE(0);//CE=0;//Disbale Chip_Select
 return(temp);
}

void main(void)
{uchar Read_Temp[2];
 uchar Temp[4];
 uchar i;
 DDRA=0xff;
 DDRC=0xff;
 DDRB=0xbf;
 PORTA=0xff;
 PORTC=0x00;
 DelayMs(2500);
 PORTC=0xff;
 SPI_Init();
 SPI_Write1Byte(0x80,0xf0);//1 1 1 1SHOT R2 R1 R0 SD,8bit sampling
                   //1 1 1 1     0  0  0  0//SD=0 indicate continuous convertion   
 while(1)
  {Read_Temp[1]=SPI_Read1Byte(0x01);//Low Byte
   Read_Temp[0]=SPI_Read1Byte(0x02);//Hign Byte
   SPI_Process(Read_Temp,Temp);
   //DelayMs(250);
   Display(Temp);
  }
}


⌨️ 快捷键说明

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