?? max6675.c
字號:
//程序功能:MAX6675 的輸出數據為16 位,輸出時高位在前。D15 為無用位;
//D14~D3 對應于熱電偶模擬輸出電壓的數字量;
//D2 用于檢測熱電偶是否斷線(D2為1表明熱電偶斷線) ;
//D1為 MAX6675的 標識符;D0為三態
//溫度值= 1023.75 ×轉換后的數字量/4095 =0.25*轉換后的數字量
//程序接口:P3.2->SO; P3.0->CS; P3.3->SCK;使用IO口模擬SPI接口;
//當室溫為11C時,用熱電偶測得的顯示溫度值為24C,約為兩倍,程序有待改進;
//實驗結果:此結果為對讀取的MAX6675的輸出數值做右移一位處理的結果,也就是除以2
// 熱電偶輸出3.1mv,顯示的溫度值88.25C;
// 熱電偶輸出2.9mv,顯示的溫度值84.25C
// 測量工具為普通的萬用表;
//編寫時間:2月23日
//作者:林麗娟
#include <msp430x14x.h>
#include "lcd1602to430.h"
#define CS1 P3OUT |= BIT0;
#define CS0 P3OUT &=~BIT0;
#define SCK1 P3OUT|=BIT3;
#define SCK0 P3OUT&=~BIT3;
#define SO P3IN&BIT2
const unsigned char digit[10] = {'0','1','2','3','4','5','6','7', '8','9'};
unsigned char dis_temp [9] = {'+','0','0','0', '0', '.' ,'0','0','\0'};
unsigned char dis_K[]={"T-K-->"};
int disdata[12]={0};
unsigned char flag;
int i;
Init()
{
P3SEL&= 0x00; // 普通I/O
P3DIR |= 0x09; // P3.0,P3.3 輸出;P3.2輸入;
P3OUT |= 0x01;
}
void delay3(int z) //z=1時為2ms
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void K_test()
{
double ch;
unsigned int dt;
unsigned char temp1,temp2;
unsigned char da=0;
temp1=0;
temp2=0;
CS0;
_NOP();
SCK1;
delay3(20);
SCK0;
delay3(20); //*輸出數據D15
SCK1;
delay3(20);
for(i=0;i<4;i++)
{
SCK0 ;
if((P3IN&BIT2)==0x00)
{da=0x00;}
else
da=0x01;
delay3(10);
SCK1 ;
temp1=(temp1<<1)|da;
delay3(10);
}
da = 0;
for(i=0;i<8;i++)
{
SCK0;
if((P3IN&BIT2)==0x00)
{da=0x00;}
else
da=0x01;
delay3(2);
SCK1;
temp2=(temp2<<1)|da;
delay3(5);
}
dt=temp1*256+temp2;
dt>>=1;
SCK0;
delay3(5);
if((P3IN&BIT2)==0x00)
{flag=0;}
else
flag=1; //*讀取D2斷偶標志so=1表斷線
SCK1;
delay3(5);
SCK0;
SCK1;
SCK0; //*輸出數據D0
CS1;
delay3(10);
ch=(double)dt*0.25;
disdata[0]=(int)ch/1000;
disdata[1]=(int)ch%1000/100;
disdata[2]=(int)ch%100/10;
disdata[3]=(int)ch%10;
// disdata[4]=10;
disdata[5]=(int)(ch*100)%100/10;
disdata[6]=(int)(ch*100)%10;
delay3(500);
dis_temp[1]=digit[disdata[0]];
dis_temp[2]=digit[disdata[1]];
dis_temp[3]=digit[disdata[2]];
dis_temp[4]=digit[disdata[3]];
dis_temp[6]=digit[disdata[5]];
dis_temp[7]=digit[disdata[6]];
}
main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
InitPort();
InitLCD() ;
Init();
while(1)
{
K_test();
lcd_pos(0x44); // 設置顯示位置為第一行的第5個字符
delay(30);
i = 0;
while(i<8)
{ // 顯示字符"welcome!"
lcd_wdat(dis_temp [i]);
delay(10);
i++;
}
if(flag==1)
{
lcd_pos(0x00); // 設置顯示位置為第一行的第5個字符
lcd_wdat('r');
}
else
{
lcd_pos(0x00); // 設置顯示位置為第一行的第5個字符
for(i=0;i<6;i++)
lcd_wdat(dis_K[i]);
}
delay3(2000);}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -