采用avr系列ATMEGA8A單片機,數碼管采用74hc595靜態驅動,讀取MAX6675芯片并進行溫度轉換。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (160.43 KB, 下載次數: 84)
下載附件
2021-12-9 17:23 上傳
51hei圖片_20211209110415.png (57.21 KB, 下載次數: 75)
下載附件
系統圖
2021-12-9 11:06 上傳
冷結補償鉀熱電偶數字轉換器(0℃至+1024℃)
MAX6675執行冷結補償,并將K型熱電偶的信號數字化。數據以12位分辨率、SPI兼容、只讀格式輸出。該轉換器可將溫度解析為0.25°C,讀數最高可達+1024°C,熱電偶精度在0°C至+700°C范圍內為8 LSb。max 6675采用小型8引腳SO4封裝。應用●工業●家電●暖通空調
特點●K型熱電偶輸出的直接數字轉換●冷結補償●簡單的SPI兼容串行接口● 12位,0.25°C分辨率●開放式熱電偶檢測
20201009004642337.png (126.1 KB, 下載次數: 82)
下載附件
2021-12-9 11:13 上傳
簡單來說,讀16個二進制,只有中間3到14是有效的,取出來,然后乘以分辨率0.25就是多少攝氏度。
51hei圖片_20211209110356.png (6 KB, 下載次數: 75)
下載附件
讀取MAX6675時序圖
2021-12-9 11:06 上傳
單片機源程序如下:
- #include<mega8.h>
- #include <math.h>
- #include <delay.h>
- #define Date16 PORTD.5
- #define CLK PORTD.7
- #define RCLK PORTD.6
- #define DateIN PINB.0
- #define MCLK PORTB.1
- #define CS PORTB.2
- const unsigned char Dis_Code[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0XB6, 0xBE, 0xE0, 0XFE, 0xF6};
- unsigned char Blk_Flg,Blk_Bit;
- unsigned char Disp_Timer, Dis_Buffer[8];
- unsigned int wendu,T_Timer;
- unsigned int Read6675(void)
- {
- unsigned int date6675=0;
- unsigned char i;
- CS=0;
- delay_us(15);
- MCLK=0;
- delay_us(15);
- for(i=0;i<16;i++)
- {
- date6675<<=1;
- delay_us(15);
- MCLK=1;
- delay_us(15);
- if(DateIN==1) date6675|=0X01;
- delay_us(15);
- MCLK=0;
- delay_us(15);
- }
- CS=1;
- delay_us(15);
- // MCLK=1;
- if((date6675&0X0004)!=0) date6675=4095;
- else date6675>>=3;
- return date6675;
- }
- void T_zhuanhuan(void)
- {
- float temp;
- temp=Read6675();
- temp*=2.5;
- wendu=(unsigned int)temp;
- }
- int EEPROMwrite( int location, unsigned char byte)
- {
- unsigned char oldSREG;
- while (EECR & 0x02);
- EEAR = location;
- EEDR = byte;
- oldSREG = SREG;
- SREG &= ~0x80;
- EECR |= 0x04;
- EECR |= 0x02;
- SREG = oldSREG;
- return 0;
- }
- unsigned char EEPROMread( int location)
- {
- while (EECR & 0x02);
- EEAR = location;
- EECR |= 0x01;
- return (EEDR);
- }
- void Disp_Led(void)
- {
- unsigned char Dis_Temp_B1,Dis_Temp_B2,Dis_Temp_B3 ;
- RCLK=1 ;
- for(Dis_Temp_B1=0;Dis_Temp_B1<5;Dis_Temp_B1++)
- {
- Dis_Temp_B3=1 ;
- for(Dis_Temp_B2=0;Dis_Temp_B2<8;Dis_Temp_B2++)
- {
- if((Dis_Buffer[Dis_Temp_B1]&Dis_Temp_B3)!=0)
- Date16=1 ;
- else
- Date16=0 ;
- CLK=0 ;
- CLK=1 ;
- Dis_Temp_B3*=2 ;
- }
- }
- RCLK=0 ;
- RCLK=1 ;
- }
- void Dex_To_Bcd(int Dis_Value,unsigned char Blk_En,unsigned char Bcd_T_B1)
- {
- Dis_Buffer[4]=Dis_Code[Dis_Value/10000];
- Dis_Value%=10000 ;
- Dis_Buffer[3]=Dis_Code[Dis_Value/1000];
- Dis_Value%=1000 ;
- Dis_Buffer[2]=Dis_Code[Dis_Value/100];
- Dis_Value%=100 ;
- Dis_Buffer[1]=Dis_Code[Dis_Value/10];
- Dis_Value%=10 ;
- Dis_Buffer[0]=Dis_Code[Dis_Value];
- if((Blk_Flg==1)&&(Blk_En!=0))
- {
- switch(Blk_Bit)
- {
- /*0*/
- case 0 :
- break ;
- /*1*/
- case 1 :
- if(Bcd_T_B1==4)Bcd_T_B1=3 ;
- break ;
- /*2*/
- case 2 :
- if(Bcd_T_B1==3||Bcd_T_B1==4)Bcd_T_B1=2 ;
- break ;
- /*3*/
- case 3 :
- if(Bcd_T_B1==2||Bcd_T_B1==3||Bcd_T_B1==4)Bcd_T_B1=1 ;
- break ;
- /*4*/
- case 4 :
- Bcd_T_B1=0 ;
- break ;
- default :
- break ;
- }
- }
- if(Bcd_T_B1==1&&Dis_Buffer[4]==0xFC)Dis_Buffer[4]=0x00 ;
- if(Bcd_T_B1==2&&Dis_Buffer[4]==0xFC)
- {
- Dis_Buffer[4]=0x00 ;
- if(Dis_Buffer[3]==0xFC)
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png (8.05 KB, 下載次數: 77)
下載附件
2021-12-9 17:26 上傳
avr單片機代碼與仿真:
max6675 K型熱電偶.zip
(240 KB, 下載次數: 41)
2021-12-9 10:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|