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

📄 main.c

📁 mcp3221 ad转换。通过iic串口读取ad转换数值
💻 C
字号:
#include  "main.h"


/***************************************///
void delay_ms(unsigned int count)
{
	uint i,j;
	for(j=0;j<count;j++)
	{
	
		for(i=0;i<350;i++)
		;
	 }
}

void init_port(void)
{
    P0=0xFF;
	P1=0xFF;
	P2=0xFF;
	P3=0xFF;
}

/**********************************///开机准备时间
void minute(uchar a)
{
 uchar a1,a2,a3;
 TMOD=0x01;       /*定时器为模式为1*/
 TH0=(65536-50000)/256;        /*设定定时器值为50毫秒*/
 TL0=(65536-50000)%256;
 TR0=1;           /*启动定时器*/
 for(a3=0;a3<a;a3++)
  {
  	for(a2=0;a2<60;a2++)			  /*定时1分钟*/
  	{
   		for(a1=0;a1<20;a1++)		  /*定时1s*/
   		{
   		do{}while(!TF0);
   		TF0=0;
   		TH0=(65536-50000)/256;        /*重新装载*/
   		TL0=(65536-50000)%256;
   		}
   	 }	
   }
 }
/*************************************/

/***********************串口收发程序********************************/
void b9600(void)
{
  SCON = 0x50;   //串口工作方式设置字节,1个起始位,8个数据位,1个停止位组成10位帧
  PCON = 0x80;  //波特率加倍模式
  TMOD |= 0x20; //0010,  //COM2:自动重置初值的8位定时/计数器
  TH1 = 0xfa;TL1=0xfa;
  //串行口波特率发生器,=f=12M
  TR1 = 1;
  //启动T1
}


//串口发送字符程序
void SendByte(uchar SSD)
{
  TI = 0;
  RI = 0;
  SBUF = SSD;
  while (!TI){}
  ;
  TI = 0;
}

//串口接收字符程序
unsigned char RxByte(void)
{
 unsigned char a;

  while (RI == 0){}
  ; //为低是一直停止
  RI = 0;
  a = SBUF;
  return (a);
}

//向串口发送一个字符串,strlen为该字符串长度 
void SendStr(unsigned char *str, unsigned int strlen)
{
  unsigned int k = 0;
  do
  {
    SendByte(*(str + k));
    k++;
  }
  while (k < strlen);
}
/***********************************************************/


/***********得到温度值转换成十进制***********/
uchar receive_temperature(void)
{	  
	  unsigned char tempL=0,tempH=0,temperature=0;
	  uchar buffer[8]={0,0,0,0,0,0,0,0};
      receive_string(0x9B,buffer,8);//iic读取转换结果,放入buffer中 
	  delay_ms(10);
	  tempH=buffer[0];tempL=buffer[1];
	  // SendByte(buffer[0]);
	  //SendByte(buffer[1]);
	  temperature=((tempH*256)+tempL)*0.01;		 //数据处理 
	  return(temperature);
	  }
	  
	  	
/**********数值转换ANSII码*********/
 void adc_str(uint Val,uchar *Data)//对应标准ANSII码表,代码48刚好对应ANSII中的'0',其他的如是类推
{
  Data[0]=Val/10+48;//Data[3]=48+5=  '5'
  Data[1]=Val%10+48;//Data[4]=48+0  '0'
}
/*************************************************************************///

/******************************主函数**************************************/
void main()
{
	uchar temperature1,temperature2,temperature0;
	uchar set,cool,min;
	uchar Data[]={"12 "};
	uchar Work[]={"work  "};



	init_port();
   	b9600();
	//delay_ms(10);
	while(1)
	{
	  if(P0^0!=0)
	  { 
	   P1=0xee; // 循环风机启动,制冷系统关闭,风阀A打开,风阀B关闭
	  
	   min=RxByte();//得到定时运行准备时间
	   //SendByte(min);
	   minute(min);
	   b9600();
	   SendStr(Work,6);
	 
	 
	  while(P0^0!=0)
	  {	 
	     b9600();
	  	 set=RxByte();  // 得到设定温度值
	     //SendByte(set);
	     cool=RxByte();  // 得到冷源温度值
	     //SendByte(cool);
	  	 P2=0x80; //通道1选通
	     temperature1=receive_temperature();   //得到室内温度值
		 adc_str(temperature1,Data);
		 SendStr("i=",2);
	     SendStr(Data, 3);
		 P2=0x00; //通道0选通
	     temperature0=receive_temperature();   //得到室外温度值
		 adc_str(temperature0,Data);
		 SendStr("o=",2);
	     SendStr(Data, 3);
	     //SendByte(temperature0);
		 P2=0x40; //通道2选通
	     temperature2=receive_temperature();   //得到回风管温度值
		 adc_str(temperature2,Data);
		 SendStr("p=",2);
	     SendStr(Data,3);

	     //SendByte(temperature2);

	  	if(temperature1<=(set-3))			//		 检查室内温度是否达到设定温度
	    	{
	     	P1=0xed;	 //制冷系统关闭,风阀A关闭,风阀B打开
		 	//temperature1=receive_temperature();   //得到温度值
	     	//SendByte(temperature1);
			SendStr("S1/ ",4);
		 	//delay_ms(500);
			}
			else if(temperature1>=(set+3))	  // 室内温度达到(设定温度+3)度
			{
			  if(temperature0<=cool)		// 室外温度达到冷源温度
			  { 
			    P1=0xee;
			  SendStr("S2/ ",4);
			    //delay_ms(500); 
				}
			     if(temperature0>=(cool+3))	  // 室外温度达到(冷源温度+3)
			      {
				   if(temperature2>=temperature0) // 回风管温度高于室外温度
				    {
				     P1=0xe6;
					 SendStr("S3/ ",4);
					 //SendByte(3);
			         //delay_ms(500);
				    }
				    else 			  //回风管温度不高于室外温度
				   {
				    P1=0xe5;
					SendStr("S4/ ",4);
				    //SendByte(4);
					//delay_ms(500);
				   }
				  }
			  }
			
	  //delay_ms(500);
      	}
	   }
	   else P1=0xff;
	 }
}
/**********************************主函数结束*************************//////

⌨️ 快捷键说明

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