找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1784|回复: 1
收起左侧

单片机+MAX6675热电偶程序

[复制链接]
ID:841799 发表于 2021-5-27 13:58 | 显示全部楼层 |阅读模式
  1. #include <STC15F2K60S2.H>
  2. #include "max6675.h"
  3. #include "shuma.h"
  4. #include "keys.h"
  5. #include "ds18b20.h"
  6. #include <intrins.h>
  7. extern uchar shuma[4];
  8. extern uchar wendu;
  9. extern uchar wen[4];
  10. extern uchar keyshu;
  11. //void Delay1000ms()                //@12.000MHz
  12. //{
  13. //        unsigned char i, j, k;

  14. //        _nop_();
  15. //        _nop_();
  16. //        i = 46;
  17. //        j = 153;
  18. //        k = 245;
  19. //        do
  20. //        {
  21. //                do
  22. //                {
  23. //                        while (--k);
  24. //                } while (--j);
  25. //        } while (--i);
  26. //}

  27. void main()
  28. {
  29.        
  30.         MAX6675Main();
  31.         Delay1000ms();
  32.         while(1)
  33.         {
  34.       keyscan();
  35.      if(keyshu%2==0)
  36.                  {
  37.                         MAX6675Main();
  38.                          Delay1000ms();
  39.                         }
  40.                         else if(keyshu%2==1)
  41.                         {
  42.                                 wendu=temget();
  43.                                 wen[3]=11;
  44.                                 wen[2]=0;
  45.                                 wen[1]=wendu/10;
  46.                                 wen[0]=wendu%10;
  47.                                 shumaxianshi(wen,4);
  48.                                 Delay1000ms();  
  49.                         }
  50.                 }
  51. }
复制代码
  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>
  3. #include "max6675.h"
  4. #include "shuma.h"  
  5. uchar shuma[4];

  6. //void  MAX6675Main()
  7. //{
  8. //          float wendu2;
  9. //          float wendu[4];
  10. //          
  11. //          float wendu3;
  12. //           int wendu1=0;
  13. //                 
  14. //          uchar i=0;
  15. //          uchar j=0;   
  16. //         
  17. //                 /*  wendu1=  wendu1+1;
  18. //                  wendu2        = MAX_SPI();
  19. //                  wendu3 = wendu2 * 10;
  20. //                  wendu1 = (int) wendu3;
  21. //                  Writebyte(0x23) ;//′?μY1μ?????
  22. //                  ShowDate(wendu1);        */
  23. //                   for ( j=0;j<3;j++)
  24. //                   {
  25. //                            wendu[j]        = MAX_SPI();
  26. //                         delayMAX();//250ms
  27. //                   }        
  28. //                  wendu2 = 0.5 * wendu[2] + 0.25 * wendu[1] + 0.125 * wendu[0];
  29. //                        wendu3 = wendu2 * 10;
  30. //                        wendu1 = (int) wendu3;
  31. //                  shuma[3]=10;
  32. //                         shuma[2]=wendu1/100;
  33. //                         shuma[1]=wendu1/10%10;
  34. //                         shuma[0]=wendu1%10;
  35. //                         shumaxianshi(shuma,4);
  36. //}

  37. //float MAX_SPI()
  38. //{
  39. //  
  40. //  float Temp_3;
  41. //  uint  Temp_2;
  42. //         uchar   i=0;
  43. //         Temp_2=0        ;
  44. //                        
  45. //                _nop_();_nop_();
  46. //            CS = 0;
  47. //                for ( i = 0; i<16; i++)
  48. //                {
  49. //                SEK        = 0;
  50. //                _nop_();
  51. //                _nop_();
  52. //                _nop_();
  53. //                SEK        = 1;
  54. //                if(SO == 1)
  55. //                {
  56. //                  Temp_2 = Temp_2 | (0x01);
  57. //                }
  58. //                else
  59. //                {
  60. //                  Temp_2 = Temp_2 | (0x00);
  61. //                }
  62. //               
  63. //                Temp_2 <<= 1;
  64. //            
  65. //                }
  66. //                   CS = 1;
  67. //        //        Temp_2>>=1;
  68. //                 Temp_2>>=4;
  69. //                 Temp_3 = Temp_2 * 0.25;
  70. //                return (Temp_3);
  71. //}

  72. //void delayMAX(void)   //?ó2? 0us
  73. //{
  74. //     unsigned char a,b,c;
  75. //    for(c=19;c>0;c--)
  76. //        for(b=20;b>0;b--)
  77. //            for(a=130;a>0;a--);
  78. //}
  79. /************************************************************/  
  80. uint max6675_readRawValue(void)
  81. {
  82.   uint tmp=0;
  83.   uint i;
  84.         SEK=0;
  85.   CS=0;//cs低
  86.   /*按位读取电平*/
  87.   for(i=0;i<16;i++)
  88.           {  
  89. //                                                tmp<<=1;//按位左移
  90.                           /*创建一个沿,按沿读取PB7的端口电平*/
  91.                         SEK=1;
  92.                         Delay10us();
  93.                         if(SO)tmp|=0x0001;
  94.                     //printf("tmp%d---:%d\n",i,tmp);/*这是为了检查错误时按位打印每个数*/
  95.                 tmp<<=1;//按位左移
  96.                     SEK=0;
  97.                         Delay10us();
  98.                   }
  99.               CS=1;//cs高                  
  100.    if (tmp&0X04)
  101.   {
  102.     tmp = 0; //未检测到热电偶
  103.         // printf("未检测到热电偶\n");//测试用
  104.   }
  105.   else
  106. {
  107.         tmp<<=1;//去掉D15位
  108.         tmp>>=4;//去掉D0、1、2位
  109.   }
  110.         return tmp;
  111. }

  112. uint max6675_readTemperature(void)
  113. {
  114.         uint d;
  115.         uint i,S;
  116.         S=2.142857;//实验数,用温水和热水 环境测得的一个实际差量
  117. //        Delay300ms();
  118.         DelayMs(1000);
  119.         d=max6675_readRawValue();
  120.        
  121.         i=d*1023.75/4095/S/1.85;
  122.         if(i>150)
  123.         {
  124.                 i=d*1023.75/4095/S*1.5;
  125.         }
  126.   else if(i>680)
  127.         {
  128.                 i=999;
  129.         }
  130.     return i;
  131. }
  132. /*****************************************************************/
  133. //uint MAX6675_ReadReg(void)
  134. //{
  135. //        unsigned char i;   
  136. //        unsigned int dat;
  137. //         
  138. //        i   = 0;   
  139. //        dat = 0;   
  140. //       
  141. //        CS  = 0;
  142. //        SEK = 0;     
  143. //       
  144. //        for(i=0; i<16; i++)                //get D15-D0 from 6675  
  145. //        {      
  146. //                SEK = 1;     
  147. //                dat = dat<<1;   
  148. //                if( SO==1 )   
  149. //                        dat = dat|0x01;   
  150. //                SEK = 0;   
  151. //        }
  152. //        CS = 1;   
  153. //          
  154. //        return dat;   
  155. //}
  156. void MAX6675Main()
  157. {
  158.          uint wendu;
  159.          wendu=max6675_readTemperature();
  160.          shuma[3]=10;
  161.          shuma[2]=wendu/100%10;
  162.          shuma[1]=wendu/10%10;
  163.          shuma[0]=wendu%10;
  164.          shumaxianshi(shuma,4);
  165. }
  166. void Delay10us()                //@12.000MHz
  167. {
  168.         unsigned char i;

  169.         _nop_();
  170.         _nop_();
  171.         i = 27;
  172.         while (--i);
  173. }
  174. void Delay300ms()                //@12.000MHz
  175. {
  176.         unsigned char i, j, k;

  177.         _nop_();
  178.         _nop_();
  179.         i = 14;
  180.         j = 174;
  181.         k = 224;
  182.         do
  183.         {
  184.                 do
  185.                 {
  186.                         while (--k);
  187.                 } while (--j);
  188.         } while (--i);
  189. }
  190. void DelayMs(unsigned int i)        //一个延时函数,这个函数在11.0592M晶振下的延时时间大概为1ms
  191. {
  192.         unsigned int j,k;

  193.         for(j=i; j>0; j--)
  194.                 for(k=114; k>0; k--);
  195. }
复制代码



51hei.png

程序.rar

47.63 KB, 下载次数: 20, 下载积分: 黑币 -5

回复

使用道具 举报

ID:328014 发表于 2021-5-27 16:05 | 显示全部楼层
楼主能分享一下电路图吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表