久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6650|回復: 15
收起左側

紅外無線測溫裝置 51單片機源碼

  [復制鏈接]
ID:73063 發表于 2015-1-31 16:35 | 顯示全部樓層 |閱讀模式
無線測溫裝置
液晶12864是并口帶中文字庫的。單片機型號是STC89C52  晶振11.0592MHz  
Keil軟件是Keil uVision4
0.png
修改環境溫度和目標溫度校準方法:
(1)    在12864.c程序中修改液晶和你的單片機開發板相對應
1.png
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.gif
(2)    修改環境溫度和目標溫度校準值
在90614.c程序中更改OffSetValue(環境溫度校準)和OffSetValue2(目標溫度校準)的值。如果測量的溫度比實際的溫度高了,那校準值要為負數,如想把校準值降低2.1度就寫-21
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image005.gif
2.png
下面是部分源碼預覽:

  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #include"math.h"
  5. #define        PAUSE_INT        EA=0;
  6. #define        START_INT        EA=1;
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. #define ulong unsigned long
  10. ulong  OffSetValue=-20;//環境溫度校準值,假如你測量
  11.                        //的溫度比實際的偏高了,這個
  12.                                            //值就要用負數,如-20,就是減少2度

  13. ulong  OffSetValue2=0; //目標溫度校準值,修改方法同上
  14. ulong Temperature=0,Temperature2=0;
  15. unsigned char date;
  16. unsigned char time_buf2[7];//定義接收四個字節非接觸式紅外溫度數組
  17. unsigned char Temp1[6];
  18. unsigned char Temp2[6];
  19. uchar a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0,a12=0,a13=0,a14=0,a15=0,a16=0;
  20. void initial_LCD();
  21. void DispalyLcd();
  22. void LCD_Data(uchar LCDbyte );
  23. void WriteCommand(uchar a);
  24. void LCD_PutString(unsigned char x,unsigned char y,uchar *s);
  25. void UART_Init();
  26. unsigned char Receive(void);
  27. void Send(unsigned char back);
  28. void        send_char_com(uchar ch);
  29. void        send_string_com(uchar *str, uchar strlen);
  30. void delay1ms(uint z);
  31. void Init_Timer0(void);


  32. void main(void)
  33. {                 
  34.     initial_LCD(); //初始化LCD12864
  35.         LCD_PutString(0,1,"MXL90614非接觸式");
  36.         LCD_PutString(2,2,"紅外測溫");       
  37.     LCD_PutString(0,3,"目標溫度:");
  38.         LCD_PutString(0,4,"環境溫度:");
  39.         UART_Init();//初始化串口通信
  40.         while(1);               
  41. }
  42. void UART_Init()     
  43. {
  44.     TMOD|=0x20;    //TMOD: timer 1, mode 2, 8-bit reload
  45.     TH1=0xfd;      //Baud:9600 fosc="11.0592"MHz
  46.     TL1=0xfd;
  47.     SCON|=0x50;    //SCON: serail mode 1, 8-bit UART, enable ucvr
  48.     TI = 0;
  49.     RI = 0;
  50.     TR1=1;// timer 1 run //啟動定時器1
  51.     ES=1; //Enable Serial Interrupt 打開中斷         
  52.     EA=1; //打開所有中斷
  53. }

  54. //串行中斷服務程序,讀取非接觸式紅外測溫溫度4個字節
  55. void UART_SER (void) interrupt 4
  56. {
  57.     unsigned char Temp;          //定義臨時變量
  58.         unsigned int a,b,c,d,e,f,g,h;
  59.     unsigned char i;
  60.     if(RI)                        //判斷是接收中斷產生
  61.      {
  62.           RI=0;                      //標志位清零
  63.           Temp=SBUF;                 //讀入緩沖區的值
  64.           time_buf2[i]=Temp;
  65.           i++;
  66.           if(i==8)                  //連續接收4個字符信息
  67.            {
  68.                 i=0;
  69.                         a1=(unsigned int)(time_buf2[0]/16);a2=(unsigned int)(time_buf2[0]%16);//串口接收第1個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  70.             a3=(unsigned int)(time_buf2[1]/16);a4=(unsigned int)(time_buf2[1]%16);//串口接收第2個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  71.             a5=(unsigned int)(time_buf2[2]/16);a6=(unsigned int)(time_buf2[2]%16);//串口接收第3個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  72.                 a7=(unsigned int)(time_buf2[3]/16);a8=(unsigned int)(time_buf2[3]%16);//串口接收第4個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  73.                          
  74.                         a9=(unsigned int)(time_buf2[4]/16);a10=(unsigned int)(time_buf2[4]%16);//串口接收第5個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  75.             a11=(unsigned int)(time_buf2[5]/16);a12=(unsigned int)(time_buf2[5]%16);//串口接收第6個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  76.             a13=(unsigned int)(time_buf2[6]/16);a14=(unsigned int)(time_buf2[6]%16);//串口接收第7個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  77.                 a15=(unsigned int)(time_buf2[7]/16);a16=(unsigned int)(time_buf2[7]%16);//串口接收第8個16進制溫度字節,并且把個位和十位分離,只取有效數據個位。
  78.                          

  79.                             Temperature=a2*1000+a4*100+a6*10+a8+OffSetValue; //將分離開的溫度數據組合成一個數據,OffSetValue是校準值
  80.                                                                                                                                  //如果測到的溫度比實際溫度高,則OffSetValue要減少,反正則增加
  81.        
  82.                        
  83.                             Temperature2=a10*1000+a12*100+a14*10+a16+OffSetValue2; //將分離開的溫度數據組合成一個數據,OffSetValue2是校準值
  84.                                                                                                                                            //如果測到的溫度比實際溫度高,則OffSetValue2要減少,反正則增加
  85.                
  86.                           
  87.                             a=Temperature/1000;
  88.                                 b=(Temperature%1000)/100;
  89.                                 c=(Temperature%100)/10;
  90.                                 d= Temperature%10;
  91.                                 Temp1[0]=a+0x30;
  92.                                 Temp1[1]=b+0x30;                                                                     
  93.                 Temp1[2]=c+0x30;
  94.                                 Temp1[3]='.';
  95.                                 Temp1[4]=d+0x30;                     
  96.                                 LCD_PutString(5,3,Temp1);                     //液晶顯示目標溫度
  97.                                
  98.                

  99.                                 e=Temperature2/1000;
  100.                                 f=(Temperature2%1000)/100;
  101.                                 g=(Temperature2%100)/10;
  102.                                 h= Temperature2%10;                                          
  103.                                 Temp2[0]=e+0x30;
  104.                                 Temp2[1]=f+0x30;                                                                     
  105.                 Temp2[2]=g+0x30;
  106.                                 Temp2[3]='.';
  107.                                 Temp2[4]=h+0x30;
  108.                                 LCD_PutString(5,4,Temp2);                     //液晶顯示環境溫度               
  109.            }  
  110.          }
  111.     if(TI)  //如果是發送標志位,清零
  112.     TI=0;
  113. }

  114. void Send(unsigned char back)
  115. {
  116.    SBUF=back;
  117.    while(TI==0)
  118.       ;
  119.     TI=0;
  120. }
  121. unsigned char Receive(void)
  122. {
  123.         unsigned long i = 10000;
  124.        
  125.         while( RI == 0 )
  126.         {
  127.                 i--;
  128.                 if( i == 0 ) return -1;//
  129.         }
  130.        
  131.         RI = 0;
  132.         return SBUF;
  133. }
  134. //向串口發送一個字符
  135. void        send_char_com(uchar ch)  
  136. {
  137.         PAUSE_INT
  138.     SBUF=ch;
  139.     while(TI==0);
  140.     TI=0;
  141.         START_INT
  142. }
  143. //
  144. //向串口發送一個字符串,strlen為該字符串長度
  145. void        send_string_com(uchar *str, uchar strlen)
  146. {
  147.     uchar k=0;
  148.     do
  149.     {
  150.         send_char_com(*(str+k));
  151.         k=k+1;
  152.     } while(k<strlen);

  153. }


  154. void delay1ms(uint z)
  155. {
  156.         uint x,y;
  157.         for(x=z;x>0;x--)
  158.                 for(y=110;y>0;y--);
  159. }



復制代碼


12864液晶顯示.zip

268.7 KB, 下載次數: 107, 下載積分: 黑幣 -5

12864顯示

回復

使用道具 舉報

ID:1 發表于 2015-1-31 22:52 來自手機 | 顯示全部樓層
謝謝分享,不錯的資料
回復

使用道具 舉報

ID:67796 發表于 2015-2-1 11:07 | 顯示全部樓層
謝謝樓主分享,有3個問題:
1.#include"math.h"
好像不需要吧?

2.MXL90614非接觸式?

只聽說過這個:MLX90614 family
MLX90614 is an Infra Red thermometer for noncontact temperature measurements.

3.樓主不會是正點原子吧?
回復

使用道具 舉報

ID:86938 發表于 2015-7-27 11:04 | 顯示全部樓層
這個是錯誤的
回復

使用道具 舉報

ID:86938 發表于 2015-7-27 11:04 | 顯示全部樓層
/* After is STC additional SFR or change */

/* sfr  AUXR  = 0x8e; */
/* sfr  IPH   = 0xb7; */

/* Watchdog Timer Register */
sfr  WDT_CONTR = 0xe1;   

/* ISP_IAP_EEPROM Register */
sfr ISP_DATA  = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD   = 0xe5;
sfr ISP_TRIG  = 0xe6;
sfr ISP_CONTR = 0xe7;

/* IDLE, Clock Divider */
sfr IDLE_CLK  = 0xc7;

/* I_O Port Mode Set Register */
sfr P0M0  = 0x93;
sfr P0M1  = 0x94;
sfr P1M0  = 0x91;
sfr P1M1  = 0x92;
sfr P2M0  = 0x95;
sfr P2M1  = 0x96;
sfr P3M0  = 0xb1;
sfr P3M1  = 0xb2;

/* SPI Register */
sfr SPSTAT  = 0x84;
sfr SPCTL   = 0x85;
sfr SPDAT   = 0x86;

/* ADC Register */
sfr ADC_CONTR  = 0xc5;
sfr ADC_DATA   = 0xc6;
sfr ADC_LOW2   = 0xbe;

/* PCA SFR */
sfr CCON   = 0xD8;
sfr CMOD   = 0xD9;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr CCAPM3 = 0xDD;
sfr CCAPM4 = 0xDE;
sfr CCAPM5 = 0xDF;

sfr CL     = 0xE9;
sfr CCAP0L = 0xEA;
sfr CCAP1L = 0xEB;
sfr CCAP2L = 0xEC;
sfr CCAP3L = 0xED;
sfr CCAP4L = 0xEE;
sfr CCAP5L = 0xEF;

sfr CH     = 0xF9;
sfr CCAP0H = 0xFA;
sfr CCAP1H = 0xFB;
sfr CCAP2H = 0xFC;
sfr CCAP3H = 0xFD;
sfr CCAP4H = 0xFE;
sfr CCAP5H = 0xFF;

sfr PCA_PWM0 = 0xF2;
sfr PCA_PWM1 = 0xF3;
sfr PCA_PWM2 = 0xF4;
sfr PCA_PWM3 = 0xF5;
sfr PCA_PWM4 = 0xF6;
sfr PCA_PWM5 = 0xF7;

/*  CCON  */
sbit CF    = CCON^7;
sbit CR    = CCON^6;
sbit CCF5  = CCON^5;
sbit CCF4  = CCON^4;
sbit CCF3  = CCON^3;
sbit CCF2  = CCON^2;
sbit CCF1  = CCON^1;
sbit CCF0  = CCON^0;

/* Above is STC additional SFR or change */

/*--------------------------------------------------------------------------
REG51F.H

Header file for 8xC31/51, 80C51Fx, 80C51Rx+
Copyright (c) 1988-1999 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.

Modification according to DataSheet from April 1999
- SFR's AUXR and AUXR1 added for 80C51Rx+ derivatives
--------------------------------------------------------------------------*/

/*  BYTE Registers  */
sfr P0   = 0x80;
sfr P1   = 0x90;
sfr P2   = 0xA0;
sfr P3   = 0xB0;
sfr PSW  = 0xD0;
sfr ACC  = 0xE0;
sfr B    = 0xF0;
sfr SP   = 0x81;
sfr DPL  = 0x82;
sfr DPH  = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;
sfr IE   = 0xA8;
sfr IP   = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;

/*  80C51Fx/Rx Extensions  */
sfr AUXR   = 0x8E;
/* sfr AUXR1  = 0xA2; */
sfr SADDR  = 0xA9;
sfr IPH    = 0xB7;
sfr SADEN  = 0xB9;
sfr T2CON  = 0xC8;
sfr T2MOD  = 0xC9;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;


/*  BIT Registers  */
/*  PSW   */
sbit CY   = PSW^7;
sbit AC   = PSW^6;
sbit F0   = PSW^5;
sbit RS1  = PSW^4;
sbit RS0  = PSW^3;
sbit OV   = PSW^2;
sbit P    = PSW^0;

/*  TCON  */
sbit TF1  = TCON^7;
sbit TR1  = TCON^6;
sbit TF0  = TCON^5;
sbit TR0  = TCON^4;
sbit IE1  = TCON^3;
sbit IT1  = TCON^2;
sbit IE0  = TCON^1;
sbit IT0  = TCON^0;

/*  P3  */
sbit RD   = P3^7;
sbit WR   = P3^6;
sbit T1   = P3^5;
sbit T0   = P3^4;
sbit INT1 = P3^3;
sbit INT0 = P3^2;
sbit TXD  = P3^1;
sbit RXD  = P3^0;

/*  SCON  */
sbit SM0  = SCON^7; // alternatively "FE"
sbit FE   = SCON^7;
sbit SM1  = SCON^6;
sbit SM2  = SCON^5;
sbit REN  = SCON^4;
sbit TB8  = SCON^3;
sbit RB8  = SCON^2;
sbit TI   = SCON^1;
sbit RI   = SCON^0;
            

sbit T2EX = P1^1;
sbit T2   = P1^0;

/*  T2CON  */
sbit TF2   = T2CON^7;
sbit EXF2  = T2CON^6;
sbit RCLK  = T2CON^5;
sbit TCLK  = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2   = T2CON^2;
sbit C_T2  = T2CON^1;
sbit CP_RL2= T2CON^0;

/* PCA Pin */

sbit CEX3 = P2^4;
sbit CEX2 = P2^0;
sbit CEX1 = P3^5;
sbit CEX0 = P3^7;
sbit ECI  = P3^4;

/*  IE   */
sbit EA   = IE^7;
sbit EPCA_LVD  = IE^6;
sbit EADC_SPI  = IE^5;
sbit ES   = IE^4;
sbit ET1  = IE^3;
sbit EX1  = IE^2;
sbit ET0  = IE^1;
sbit EX0  = IE^0;

/*  IP   */
sbit PPCA_LVD  = IP^6;
sbit PADC_SPI  = IP^5;
sbit PS   = IP^4;
sbit PT1  = IP^3;
sbit PX1  = IP^2;
sbit PT0  = IP^1;
sbit PX0  = IP^0;
回復

使用道具 舉報

ID:87799 發表于 2015-8-7 08:07 | 顯示全部樓層
太強大了,下來看看
回復

使用道具 舉報

ID:84705 發表于 2015-8-7 13:35 | 顯示全部樓層
下載下來做做看,謝謝大神分享,謝謝
回復

使用道具 舉報

ID:90092 發表于 2015-9-15 16:30 | 顯示全部樓層
LZ沒有硬件電路嗎?能看下嗎?
回復

使用道具 舉報

ID:92665 發表于 2015-10-19 17:43 | 顯示全部樓層
下來看看
回復

使用道具 舉報

ID:92665 發表于 2015-10-19 17:46 | 顯示全部樓層
還以為是紅外呢
回復

使用道具 舉報

ID:92665 發表于 2015-11-1 15:04 | 顯示全部樓層
下載來看看,希望很有用
回復

使用道具 舉報

ID:98370 發表于 2015-12-4 21:54 | 顯示全部樓層
我來看看可不可以用
回復

使用道具 舉報

ID:98370 發表于 2015-12-4 21:54 | 顯示全部樓層
我來看看可不可以用......................哎呀
回復

使用道具 舉報

ID:98370 發表于 2015-12-4 21:55 | 顯示全部樓層
我都不知道我的積分有多少 。關注微信才送50
回復

使用道具 舉報

ID:210017 發表于 2017-6-11 09:35 | 顯示全部樓層
謝謝分享了!
回復

使用道具 舉報

ID:210051 發表于 2017-6-11 11:58 來自手機 | 顯示全部樓層
學習學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久亚洲 | 亚洲精品一区二区 | www国产亚洲精品久久网站 | 国产精品久久久久久久久久久久久 | 亚洲精品久久久一区二区三区 | 狠狠操狠狠色 | 黄色av观看| 欧美日韩在线视频一区 | 91久久精品国产 | 一区二区在线不卡 | 秋霞在线一区 | 国产精品久久久久aaaa九色 | 亚洲综合在 | 99这里只有精品视频 | 欧美区在线观看 | 污片在线免费观看 | 涩涩视频在线播放 | 国产在线高清 | 99精品欧美一区二区三区综合在线 | 午夜专区 | 久久精品国产一区 | 99久久久无码国产精品 | 精品国产伦一区二区三区观看说明 | 免费观看一级特黄欧美大片 | 免费视频一区二区 | 九九在线视频 | 国产精品一区二区三区久久久 | 国产精品欧美一区二区三区 | 日韩中文字幕第一页 | 九九热在线视频 | 天天摸天天干 | 国产羞羞视频在线观看 | 91免费观看 | 久久综合一区 | 日韩色视频| av在线免费观看网址 | 欧美国产视频 | 欧美激情va永久在线播放 | 男女羞羞在线观看 | 欧美精品一级 | 亚洲成人久久久 |