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

📄 yuanshi_xiaofang.c

📁 some thing about how to use max6675.
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define AddWr 0xa0 					//器件地址选择及写标志
#define AddRd 0xa1 					//器件地址选择及读标志

/*有关全局变量*/
sbit Sda= P2^0; 						//串行数据
sbit Scl= P2^1; 						//串行时钟
//sbit WP= P0^2; 						//硬件写保护


void mDelay(uchar j)
{
uint i;
for(;j>0;j--)
{
   for(i=0;i<125;i--)
   {;}
}
}

/*起始条件*/
void Start(void)
{
   Sda=1;
   Scl=1;
   _nop_();_nop_();_nop_();_nop_();
   Sda=0;
   _nop_();_nop_();_nop_();_nop_();
}

/*停止条件*/
void Stop(void)
{
   Sda=0;
   Scl=1;
   _nop_();_nop_();_nop_();_nop_();
   Sda=1;
   _nop_();_nop_();_nop_();_nop_();
}

/*应答位*/
void Ack(void)
{
  Sda=0;
  _nop_();_nop_();_nop_();_nop_();
  Scl=1;
  _nop_();_nop_();_nop_();_nop_();
  Scl=0;
}

/*反向应答位*/
void NoAck(void)
{
  Sda=1;
  _nop_();_nop_();_nop_();_nop_();
  Scl=1;
  _nop_();_nop_();_nop_();_nop_();
   Scl=0;
}

/*发送数据子程序,Data为要求发送的数据*/
void Send(uchar Data)
{
  uchar BitCounter=8; 				//位数控制
  uchar temp; 						//中间变量控制
  do
  {
    temp=Data;
    Scl=0;
    _nop_();_nop_();_nop_();_nop_();
    if((temp&0x80)==0x80)			//如果最高位是1
    {Sda=1;}
    else
    {Sda=0;}
    Scl=1;
    temp=Data<<1; 					//RLC
    Data=temp;
    BitCounter--;
   }while(BitCounter);
    Scl=0;
}

/*读一个字节的数据,并返回该字节值*/
uchar Read(void)
{
   uchar temp=0;
   uchar temp1=0;
   uchar BitCounter=8;
   Sda=1;
  do{
   Scl=0;
   _nop_();_nop_();_nop_();_nop_();
   Scl=1;
   _nop_();_nop_();_nop_();_nop_();
   if(Sda) 						//如果Sda=1
    {temp=temp|0x01;} 				//temp的最低位置1
   else
    {temp=temp&0xfe; }				//否则temp的最低位清0
   if(BitCounter-1)
    {
      temp1=temp<<1;
      temp=temp1;
    }
   BitCounter--;
  }while(BitCounter);
  return(temp);
}

void WrToROM(uchar Data[],uchar AddressG,uchar AddressD,uchar Num)
{
   uchar i;
   uchar *PData;
   PData=Data;
   for(i=0;i<Num;i++)
    {
       Start(); 					//发送启动信号
       Send(0xa0); 				//发送SLA+W
       Ack();
       Send(AddressG); 			//发送高位地址
       Ack();
       Send(AddressD+i);			//发送低位地址
       Ack();
       Send(*(PData+i));
//	   send(Data[i]);
       Ack();
       Stop();
       mDelay(80);
}
}

void RdFromROM(uchar Data[],uchar AddressG,uchar AddressD,uchar Num)
{
  uchar i;
   uchar *PData;
   PData=Data;
   for(i=0;i<Num;i++)
   {
     Start();
     Send(0xa0);
     Ack();
     Send(AddressG);			 	//发送高位地址
     Ack();
     Send(AddressD+i);			//发送低位地址
     Ack();
     Start();
     Send(0xa1);
     Ack();
     *(PData+i)=Read();
     Scl=0;
     NoAck();
     Stop();
}
}


void main()
{	
uchar Number[4]={1,2,3,4};
while(1){
//WP=0;
WrToROM(Number,0,25,4); 				//将初始化后的数值写入EEPROM
mDelay(20);
Number[0]=0;
Number[1]=0;
Number[2]=0;
Number[3]=0; 					//将数组中的值清掉,以验证读出的数是否正确
RdFromROM(Number,0,25,4);
}
}

⌨️ 快捷键说明

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