新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-4-6
- 在线时间
- 12 小时
|
/*主函数*/
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
void max6675_init(void);
uint8_t max6675_readWriteByte(uint8_t txData); //max6675模块读写一个字节
uint16_t max6675_readRawValue(void);
float max6675_readTemperature(void);
char ss[20];
int main(void)
{
float tempValue=0;
u8 x=0;
delay_init(); //延时函数初始化
uart_init(115200); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init();
max6675_init();
while(1)
{
POINT_COLOR=BLUE;
tempValue=max6675_readTemperature();
sprintf(ss,"temp:%f",tempValue);
LCD_ShowString(30,40,200,16,16,ss);
delay_ms(200);
}
}
/*max6675.h*/
#ifndef __MAX6675_H
#define __MAX6675_H
#include "sys.h"
//IO方向设置
//PA5 SO
//PA6 CS
//PA7 SCK
#define MAX6675_SO_PORT GPIOA
#define MAX6675_SO_PIN GPIO_Pin_0
#define MAX6675_CS_PORT GPIOA
#define MAX6675_CS_PIN GPIO_Pin_11
#define MAX6675_SCK_PORT GPIOA
#define MAX6675_SCK_PIN GPIO_Pin_12
#define SCK PAout(12)
#define CS PAout(11)
#define MISO PAin(0)
void max6675_init(void);//初始化
uint8_t max6675_readWriteByte(uint8_t txData);
uint16_t max6675_readRawValue(void);
float max6675_readTemperature(void);
#endif
/*max6675.c*/
#include "max6675.h"
#include "delay.h"
void max6675_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PORTA口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PORTA0 推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_0); //输出1
}
/**
* @brief max6675模块读写一个字节的数据
* @param txData:要发送的数据
* @retval 接收到的数据
*/
uint8_t max6675_readWriteByte(uint8_t txData)
{
unsigned char temp=0;
unsigned char dat=0;
for(temp=0x80; temp!=0; temp>>=1)
{
SCK=0;
delay_us(1); //让SCK稳定
SCK=1;
delay_us(1); //让SCK稳定
if(MISO==1)
{
dat|=temp;
}
else
{
dat&=~temp;
}
}
return dat;
}
/*void SPI_delay()
{
delay_us(1);
}*/
uint16_t max6675_readRawValue(void)
{
uint16_t tmp=0;
GPIO_ResetBits(MAX6675_CS_PORT,MAX6675_CS_PIN); //enable max6675
tmp=max6675_readWriteByte(0XFF); //read MSB
tmp <<= 8;
tmp |= max6675_readWriteByte(0XFF); //read LSB;
//tmp=tmp&0x00FF;
GPIO_SetBits(MAX6675_CS_PORT,MAX6675_CS_PIN); //disable max6675
if (tmp & 4)
{
// thermocouple open
//tmp = 0x0FFF; //未检测到热电偶 4095
tmp = 4095; //未检测到热电偶 4095
//printf("thermocouple open\r\n");
}
else
{
tmp = tmp >> 3;
}
tmp=tmp&0x0FFF; //12bit
return tmp;
}
/**
* @brief max6675模块读取测得的原始数据
* @param None
* @retval 温度值(单位:℃)
*/
float max6675_readTemperature(void)
{
return (max6675_readRawValue() * 1024.0 / 4096);
}
|
|