USB采集K型热电偶温度采集,MAX6675,TM1650驱动数码管,CH340N,USB转串口。

硬件实物与电路图:

MAX6675代码:

#include "ram.h"
 //交流QQ:2368813349
//淘宝实物购买地址:https://item.taobao.com/item.htm?spm=a1z10.1-c.w1004-2919821342.7.52dc22feSgvS9I&id=745510870986
u16 max6675(void)
{
	u16 r_data=0;
	u8 data_len;
		 
	 csm1;
	 som0;
	 P2PH=0x80; //P27上拉
	 sckm1;
	 sck=0;
		_nop_();
    _nop_(); 
	 cs=0;
	_nop_();
    _nop_();  
	for(data_len=0;data_len<16;data_len++)
	{
	    sck=1;
	   
		
		
	    r_data=r_data<<1;
	    if(so==1)   r_data=r_data|0x01;
	    sck=0;
	  	_nop_();
      _nop_();
		 _nop_();
      _nop_();
		
	}
	 cs=1;
	// if(r_data & 0x01)  r_status++;
	// else 
		   {
		    if(r_status >=1)  r_status--;		
			   else           b_status=0;
		    }
	   // if(r_status >=10)
			    {
					   r_status=10;
					   b_status=1;
					   r_data=r_data>>3;
					 }
		// else	r_data=0;
			 
	return r_data; 
}

TM1650代码:

#include "ram.h"
#include <stdio.h>
//交流QQ:2368813349
//淘宝实物购买地址:https://item.taobao.com/item.htm?spm=a1z10.1-c.w1004-2919821342.7.52dc22feSgvS9I&id=745510870986
/*code  uchar  table[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
                            0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
										
*/

  
code    u8  table[]={DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7, DATA8, DATA9};	


union   {
		
			float fx;
	    u8   r_tx[4];
}float_u32;
 
 



 
void usar_tx(void)
  {
		u8 i;
		//{"T1":12.3,"T2":15.6,"T3":-26,"T4":23}
		//{"T1":9,"T2":0,"T3":0,"T4":0}
		  sprintf((char*)str,"{\"T1\":%.2f", float_u32.fx);
	 
			P1CON &= 0XFB;
	    P1PH |= 0X0C;	 //TX输出/RX为带上拉输入
			SCON = 0X40;     //方式1,不允许接收数据
			PCON |= 0X80;    //1/4系统时钟下运行    24/4=8MHZ     1/8 *FN/ 2*(256-TH1)  //40左右
			//TL1 = 217;		
			//TH1 = 217;		 //UART 波特率24M情况下=38400;  12M下是19200
		
		  TL1 = 243;		
			TH1 = 243;		 //UART 波特率24M情况下=115200
			TR1 = 1;		 //启动Timer0
	/*	
     TI = 0;	
		 SBUF = float_u32.r_tx[3];
     while(TI==0);
		  TI = 0;	
		 SBUF =float_u32.r_tx[2];
		 while(TI==0);
		 TI = 0;	
		 SBUF = float_u32.r_tx[1];
     while(TI==0);
		 TI = 0;	
		 SBUF = float_u32.r_tx[0];
		 while(TI==0);
		 */
	/*	 
		  TI = 0;	
		 SBUF ='{';
     while(TI==0);
		 	TI = 0;	
		 SBUF ='"';
     while(TI==0);
		 
		  TI = 0;	
		 SBUF ='T';
     while(TI==0);
		   TI = 0;	
		 SBUF ='1';
     while(TI==0);
		 
		 	TI = 0;	
		 SBUF ='"';
     while(TI==0);
		 
		  TI = 0;	
			SBUF =':';
     while(TI==0);
		 
		 */ 
		 for(i=0;i<30;i++)
		 {
			 if(str[i]=='\0')  break;
			 TI = 0;	
			SBUF =str[i];
      while(TI==0);
			 
		 }
		 
		      
		 
		 
		  sprintf((char*)str,",\"T2\":0,\"T3\":0,\"T4\":0\}");
		 
		 	 for(i=0;i<30;i++)
		 {
			 if(str[i]=='\0')  break;
			 TI = 0;	
			SBUF =str[i];
      while(TI==0);
			 
		 }
		 
	 
  }
	
 void disp_change(void)
 {
	 //r_sum1++;
     float_u32.fx=r_sum*0.25;
	 
	   r_sum=(u32)float_u32.fx;
	   float_u32.fx=float_u32.fx/10;
  //  r_sum=r_sum1;
	 if(r_sum>(u32)9999)// 100度以上不显示小数点
	 {
	    r_sum=(u32)9999;
	 }
	
	   r_byte3= r_sum/1000;
	   r_byte2= r_sum/100%10;
	   r_byte1= r_sum/10%10;
	   r_byte0= r_sum%10;
	
	

  
	 	 r_byte0=table[r_byte0]; 
		 r_byte1=table[r_byte1]+DP;
		 r_byte2=table[r_byte2];
		 r_byte3=table[r_byte3];
	 
	 
	
				

 }



void IIC_SENT_ACK(void )
{
		sdam1;
		sclm1;
    scl=1;
    _nop_();
    _nop_();
     scl=0;
		_nop_();
    _nop_();
}

void IIC_START(void)
{
 	sdam1;
	sclm1;
	_nop_();
   sda=1;
   _nop_();
   scl=1;
   _nop_();
   sda=0;
   _nop_();
   scl=0;
  }


 
 
void IIC_STOP(void)
{
	sdam1;
	sclm1;
 	sda=0;
   _nop_();
   scl=1;
   _nop_();
   sda=1;
   _nop_();
   scl=0;	
	
}


void IIC_WRITE(u8 Data)
{
  	unsigned char BitCounter=8;

	  do
	    {
			// temp=Data;
			 scl=0;
			 _nop_();
			 _nop_();
			 if((Data&0x80)==0x80)
					sda=1;
			 else
					sda=0;
				scl=1;
				Data=Data<<1;
				//Data=temp;
				BitCounter--;
		  }
	  while(BitCounter);
	   scl=0;
	   IIC_SENT_ACK();

	  }
 	
u8 IIC_READ(void) 
{
  
	   unsigned char temp=0;
	   unsigned char temp1=0;
	   unsigned char BitCounter=8;

	   sdam0;
	   _nop_();
		 _nop_();
	   do
	    {
		  scl=0;
      _nop_();
		  _nop_();
		  scl=1;
		  _nop_();
		  _nop_();
		  if(sda)
		     temp=temp|0x01;
		  else
		     temp=temp&0xfe;

		  if(BitCounter-1)  
		     {
			  temp1=temp<<1;
			  temp=temp1;
			  }
			  BitCounter--;
			 }
		while(BitCounter);
		return(temp);
 
}
 
  
 
void tm1650(void)
{




	 IIC_START();
	 IIC_WRITE(0x48);		 			//设置
	 IIC_WRITE(0x31);	    	 //1级亮度,显示屏显示
	 IIC_STOP();
	 disp_change();
	 IIC_START();
	 IIC_WRITE(0x68);		  	 //第一个位地址
	 IIC_WRITE(r_byte0);	   //第一位数据
		 IIC_STOP();
		 IIC_START();
	IIC_WRITE(0x6A);
	 IIC_WRITE(r_byte1); 		//第二位数据
	 IIC_STOP();
		 IIC_START();
	 IIC_WRITE(0x6C);
	 IIC_WRITE(r_byte2); 		//第三位数据
	 IIC_STOP();
	 	 IIC_START();
	 IIC_WRITE(0x6E);
	 IIC_WRITE(r_byte3);		//第四位数据
	 IIC_STOP();
	 

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这段代码是通过STM32的SPI2接口与MAX6675热电偶温度传感器进行通信,以测量K热电偶温度MAX6675是一种数字式热电偶温度传感器,通过SPI接口与STM32微控制器进行通信。 首先,在函数MAX6675_GPIO_Init中,配置了SPI2的引脚和相关参数。GPIO_InitStructure结构体用于配置GPIO引脚的模式、速度和复用功能。SPI_InitStructure结构体用于配置SPI的工作模式、数据大小、时钟极性和相位等参数。RCC_APB2PeriphClockCmd函数用于使能GPIOB的时钟。 接下来,在函数TEMP_ReadReg中,通过控制SCK和CS引脚的电平变化以及读取SO引脚的状态,逐位读取16位的温度值。具体的操作过程如下: 1. 置CS为高电平,SCK为低电平,进行一些延时。 2. 置CS为低电平,开始传输数据。 3. 循环读取16位数据: a. 左移Temp_2一位。 b. 置SCK为高电平,进行一些延时。 c. 判断SO引脚状态,如果为高电平,则将Temp_2最低位置为1,否则为0。 d. 置SCK为低电平,进行一些延时。 4. 置SCK为低电平,进行一些延时。 5. 置CS为高电平,进行一些延时。 6. 对Temp_2进行一些位操作,将其右移4位,以获得实际的温度值。 7. 返回温度值Temp_2。 需要注意的是,这段代码中的引脚操作和寄存器配置是基于特定的STM32F10x系列微控制器和MAX6675热电偶温度传感器,实际使用时需要根据具体的硬件和接口配置进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小家电电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值