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

📄 uart0.c

📁 主要用340单片机的控制的温和湿度采集和向主机发送已接受主机设置参数。
💻 C
📖 第 1 页 / 共 5 页
字号:
#include<c8051f340.h>
#include<intrins.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<absacc.h>

unsigned char xdata rbuf[500];     //接收缓冲
unsigned char xdata tbuf[500];     //发送缓冲
unsigned char xdata datatra[70];   //**********数据转换区
unsigned char xdata datatime[6];    //取历史数据的时间
unsigned char xdata id[8];
char xdata coefficient[8];
float xdata tempcoe;
float xdata tempcoe2;
float xdata humicoe;
float xdata prescoe;
float xdata COEFFMID;
char xdata windcoe;
extern xdata unsigned char VOLTAGE[2];



unsigned int idata rnum=0;           //接收缓冲区数据接收位     
unsigned int idata tnum=0;           //发送缓冲区数据发送位
unsigned int idata readnum=0;        //接收缓冲区数据读出位
unsigned int idata writenum=0;       //发送缓冲区数据写入位	
unsigned char uporload;	             //即时数还是历史数据
unsigned long length;                 //读取历史数据长度
unsigned char ordernum=0;
unsigned int idata readnum1=0;
unsigned int idata readnum2=0;  
unsigned char xdata minutelength;
unsigned int xdata errortime=0xffff;
xdata unsigned char TIMEDEC[6];//读出来的十进制时间
xdata unsigned char timede[6];//临时存放时间
xdata unsigned char TIMEBIN[4];//存入FLASH的时间数据

bit rw;                            //是否需要发数据                           
bit xorz;                          //小数还是整数标志位
bit uu=0;
bit fengxiang;

bit timefrocomputer01=0;
bit historydatadisplay=0;
xdata unsigned char iiii=0;

extern xdata unsigned char PRESSUREBIN[2];//存入FLASH的气压数据
extern xdata unsigned char timefromcomputer[7];

void ckta (void);
void uptemp();
void temp_tra();
void uphumi();
void humi_tra();
void uppres();
void pres_tra();
void upwind();
void wind_tra();
void data_tra(void);
void b1toa(unsigned char xorz,length,left,right,datanum);
void b2toa(unsigned char left,right,datanum);
void send (void);
void buffer(void);
void global(void);
void rdid(void);
void wdid(void);
void IDjudge(void);
void wenshi(void);
void rsts(void);
void baud(void);
void load(void);
void datatimepro(void);
void inthor(void);
void onehor(void);
void userld(void);
void allday(void); 
void visibility(void);
void cktm(void);
void succeedre();
void lostre();
void ordertimepro();
void coetra();
void para();
void flowerror();
void eepromerror();
void clockerror();
void temphumierror();
void preserror();
void flasherror();
void get_history_dataa();

extern void EEPROM_ByteRead(unsigned char addr,unsigned char addr1,unsigned char *array);
extern void EEPROM_ByteWrite(unsigned char addr,unsigned char addr1,unsigned char *array);
extern void AT45DB642D_MainMemoryPageRead(unsigned long PBA,unsigned char *pHeader,unsigned int len);//flash读PAGE
extern void timebintodec(unsigned char *timebin);//FLASH中的二进制表示时间转化为十进制时间
extern void S3530Aini();
/*********************************************
*时间校准请求子程序*
**********************************************/

void ckta()
{
    int i;
	for(i=0;i<7;i++)
	 {
     tbuf[writenum]=id[i];
	 writenum++;
	 }
     tbuf[writenum]=0x20;           //0
	 writenum++;
     tbuf[writenum]='0';           //0
	 writenum++;
     tbuf[writenum]='T';           //T
	 writenum++;
     tbuf[writenum]='A';           //A
	 writenum++;
     tbuf[writenum]='C';           //C
	 writenum++;
     tbuf[writenum]='K';           //K
	 writenum++;
     tbuf[writenum]='T';           //T
	 writenum++;
     tbuf[writenum]='A';           //A
	 writenum++;
     tbuf[writenum]='\r';           //CH(13)
	 writenum++;
     tbuf[writenum]='\n';           //CH(10)
	 writenum++;
	 writenum=0;
	 send();                        //数据发送
}

/******************************************************************************
*温度上传子程序*
*******************************************************************************/

void uptemp()
{
	int i;  
     uporload=0;
	 for(i=0;i<7;i++)
	 {
     tbuf[writenum]=id[i];
	 writenum++;
	 }
     tbuf[writenum]=0x20;           //0
	 writenum++;
     tbuf[writenum]=0x30;           //0
	 writenum++;
     tbuf[writenum]='U';           //U
	 writenum++;
     tbuf[writenum]='D';           //P
	 writenum++;
     tbuf[writenum]='T';           //D
	 writenum++;
     tbuf[writenum]='M';           //A
	 writenum++;
     tbuf[writenum]='P';           //T
	 writenum++;
     tbuf[writenum]='R';           //A
	 writenum++;
     tbuf[writenum]=0x20;           //			
	 writenum++;
     tbuf[writenum]='2';           //			
	 writenum++;
     tbuf[writenum]='0';           //			
	 writenum++;
     temp_tra();                     //调用数据转换子程序	 
     tbuf[writenum]=0x0D;           //回车
	 writenum++;
     tbuf[writenum]=0x0A;           //换行
	 writenum++;
	 writenum=0;
	 send();                        //数据发送

} 
/******************************************************************************
*温度转换子程序*
*******************************************************************************/
void temp_tra()
{

	 b1toa(1,6,0,2,0);                //年
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,4,2,6,0);                //月
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,5,0,1,1);                //日
     tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,5,4,4,1);                //时
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,2,6,2);                //分
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,0,0,3);                //秒
	 tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,7,4,4,7+57*uporload);              //温度整数部分

	 b1toa(0,4,0,0,8+57*uporload);              //温度小数部分
	 tbuf[writenum]='0';              //0
	 writenum++;
}

/******************************************************************************
*湿度上传子程序*
*******************************************************************************/

void uphumi()
{
	int i;  
     uporload=0;
	 for(i=0;i<7;i++)
	 {
     tbuf[writenum]=id[i];
	 writenum++;
	 }
     tbuf[writenum]=0x20;           //0
	 writenum++;
     tbuf[writenum]=0x30;           //0
	 writenum++;
     tbuf[writenum]='U';           //U
	 writenum++;
     tbuf[writenum]='D';           //P
	 writenum++;
     tbuf[writenum]='H';           //D
	 writenum++;
     tbuf[writenum]='U';           //A
	 writenum++;
     tbuf[writenum]='M';           //T
	 writenum++;
     tbuf[writenum]='I';           //A
	 writenum++;
     tbuf[writenum]=0x20;           //			
	 writenum++;
     tbuf[writenum]='2';           //			
	 writenum++;
     tbuf[writenum]='0';           //			
	 writenum++;
     humi_tra();                     //调用数据转换子程序	 
     tbuf[writenum]=0x0D;           //回车
	 writenum++;
     tbuf[writenum]=0x0A;           //换行
	 writenum++;
	 writenum=0;
	 send();                        //数据发送

} 
/******************************************************************************
*湿度转换子程序*
*******************************************************************************/
void humi_tra()
{
	 b1toa(1,6,0,2,0);                //年
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,4,2,6,0);                //月
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,5,0,1,1);                //日
     tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,5,4,4,1);                //时
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,2,6,2);                //分
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,0,0,3);                //秒
	 tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,7,0,0,9+57*uporload);             //湿度
}

/******************************************************************************
*气压上传子程序*
*******************************************************************************/

void uppres()
{
	int i;  
     uporload=0;
	 for(i=0;i<7;i++)
	 {
     tbuf[writenum]=id[i];
	 writenum++;
	 }
     tbuf[writenum]=0x20;           //0
	 writenum++;
     tbuf[writenum]=0x30;           //0
	 writenum++;
     tbuf[writenum]='U';           //U
	 writenum++;
     tbuf[writenum]='D';           //P
	 writenum++;
     tbuf[writenum]='P';           //D
	 writenum++;
     tbuf[writenum]='R';           //A
	 writenum++;
     tbuf[writenum]='E';           //T
	 writenum++;
     tbuf[writenum]='S';           //A
	 writenum++;
     tbuf[writenum]=0x20;           //			
	 writenum++;
     tbuf[writenum]='2';           //			
	 writenum++;
     tbuf[writenum]='0';           //			
	 writenum++;
     pres_tra();                     //调用数据转换子程序	 
     tbuf[writenum]=0x0D;           //回车
	 writenum++;
     tbuf[writenum]=0x0A;           //换行
	 writenum++;
	 writenum=0;
	 send();                        //数据发送

} 
/******************************************************************************
*气压转换子程序*
*******************************************************************************/
void pres_tra()
{
	 b1toa(1,6,0,2,0);                //年
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,4,2,6,0);                //月
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,5,0,1,1);                //日
     tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,5,4,4,1);                //时
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,2,6,2);                //分
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,0,0,3);                //秒
	 tbuf[writenum]=0x20;             //
	 writenum++;

	 b2toa(4,4,10+57*uporload);                 //气压整数

	 b1toa(0,4,0,0,11+57*uporload);             //气压小数
	 tbuf[writenum]=0x30;           //
	 writenum++;
}

/******************************************************************************
*风速上传子程序*
*******************************************************************************/

void upwind()
{
	int i;  
     uporload=0;
	 for(i=0;i<7;i++)
	 {
     tbuf[writenum]=id[i];
	 writenum++;
	 }
     tbuf[writenum]=0x20;           //0
	 writenum++;
     tbuf[writenum]=0x30;           //0
	 writenum++;
     tbuf[writenum]='U';           //U
	 writenum++;
     tbuf[writenum]='D';           //P
	 writenum++;
     tbuf[writenum]='W';           //D
	 writenum++;
     tbuf[writenum]='I';           //A
	 writenum++;
     tbuf[writenum]='N';           //T
	 writenum++;
     tbuf[writenum]='D';           //A
	 writenum++;
     tbuf[writenum]=0x20;           //			
	 writenum++;
     tbuf[writenum]='2';           //			
	 writenum++;
     tbuf[writenum]='0';           //			
	 writenum++;
     wind_tra();                     //调用数据转换子程序
     tbuf[writenum]=0x20;           //			
	 writenum++;
     tbuf[writenum]=VOLTAGE[0]/10+0x30;    
	 writenum++;
     tbuf[writenum]='.';            //.
	 writenum++;
     tbuf[writenum]=VOLTAGE[0]%10+0x30;    
	 writenum++;
     tbuf[writenum]=VOLTAGE[1]/10+0x30;    
	 writenum++;
     tbuf[writenum]=VOLTAGE[1]%10+0x30;    
	 writenum++;	 	 
     tbuf[writenum]=0x0D;           //回车
	 writenum++;
     tbuf[writenum]=0x0A;           //换行
	 writenum++;
	 writenum=0;
	 send();                        //数据发送

} 
/******************************************************************************
*风速转换子程序*
*******************************************************************************/
void wind_tra()
{
     fengxiang=1;
	 b1toa(1,6,0,2,0);                //年
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,4,2,6,0);                //月
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,5,0,1,1);                //日
     tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,5,4,4,1);                //时
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,2,6,2);                //分
     tbuf[writenum]=':';              //:
	 writenum++;

	 b1toa(1,6,0,0,3);                //秒
	 tbuf[writenum]=0x20;             //
	 writenum++;

	 b2toa(6,2,4);                  //风向
	 tbuf[writenum]=0x30;           //
	 writenum++;

	 tbuf[writenum]=0x20;           //
	 writenum++;

	 tbuf[writenum]=0x30;           //
	 writenum++;

	 b1toa(1,6,4,4,5);             //风速整数
 //    tbuf[writenum]='.';            //.
//	 writenum++;

	 b1toa(0,4,0,0,6);            //风速小数
	 fengxiang=0;
}


/******************************************************************************
*数据转换子程序*
*******************************************************************************/

void data_tra()
{
//     unsigned char zf;
	 unsigned char i;

	 b1toa(1,6,0,2,0);                //年
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,4,2,6,0);                //月
     tbuf[writenum]='-';              //-
	 writenum++;
	  
	 b1toa(1,5,0,1,1);                //日
     tbuf[writenum]=0x20;             //
	 writenum++;

	 b1toa(1,5,4,4,1);                //时
     tbuf[writenum]=':';              //:

⌨️ 快捷键说明

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