標(biāo)題: LU90614紅外體溫傳感器單片機(jī)驅(qū)動(dòng)程序 [打印本頁(yè)]

作者: 時(shí)空扭曲    時(shí)間: 2022-12-7 15:47
標(biāo)題: LU90614紅外體溫傳感器單片機(jī)驅(qū)動(dòng)程序
12C5A60S2 驅(qū)動(dòng)紅外體溫傳感器LU90614
并在LCD1602屏幕上顯示 當(dāng)沒(méi)有手靠近時(shí)
屏幕顯示OL
制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. ////以下是頭文件
  2. #include "STC12C5A60S2.H"        //這里使用的是STC12C5A60S2單片機(jī)
  3. #include "string.h"
  4. #include "Delay.h"
  5. #include "LCD1602.h"

  6. //接線(xiàn) LCD的接線(xiàn)
  7. // 普中A2 完全兼容  
  8. //sbit LCD_RW=P2^5;
  9. //sbit LCD_EN=P2^7;
  10. //#define LCD_DataPort P0


  11. //LU90614溫度傳感器接線(xiàn)
  12. //    普中A2
  13. //VCC  +5V
  14. //GND   GND
  15. //R    P3.0
  16. //T    P3.1



  17. /*************************************************************/
  18. //以下是宏定義
  19. #define u32 unsigned long int //無(wú)符號(hào)長(zhǎng)整型
  20. #define u16 unsigned int   //無(wú)符號(hào)整型
  21. #define u8 unsigned char   //無(wú)符號(hào)短整型
  22. #define bool bit   //布爾變量

  23. #define USART_REC_LEN                          200          //定義最大接收字節(jié)數(shù) 200



  24. /*************************************************************/
  25. //以下是變量聲明

  26. u8 UartData;//單字節(jié)串口數(shù)據(jù)

  27. u8 KeyNum;//存儲(chǔ)矩陣鍵盤(pán)按鍵返回值


  28. u16 WENDU_H;
  29. u16 WENDU_L;

  30. bit flag=0;

  31. u16 USART_STA=0;
  32. u16 USART_RX_STA=0;       //接收狀態(tài)標(biāo)記          
  33. u16 USART_RX_LEN=0;
  34. u8 USART_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).

  35. ///******************************************************************/
  36. ////函數(shù)聲明區(qū)
  37. void UartInit(void);
  38. void delayms(int d);
  39. void delay_us(int d);
  40. void SendASC(u8 d);//發(fā)送字符
  41. void SendString(u8 *str);//發(fā)送字符串
  42. ///******************************************************************/
  43. ////主函數(shù)main
  44. void main(void)
  45. {       
  46.         UartInit();                //串口初始化
  47.         LCD_Init();       
  48.                 //發(fā)送體溫模式指令 0XFA 0XC5 0XBF
  49.         SendASC(0XFA);
  50.         SendASC(0XC5);
  51.         SendASC(0XBF);
  52.         delayms(50);
  53.        
  54.         while(1)
  55.         {                               
  56.                 if(USART_RX_STA&0X8000)//接收到一次數(shù)據(jù)
  57.                 {
  58.                         WENDU_H=USART_RX_BUF[2];               
  59.                         WENDU_L=USART_RX_BUF[3]/10;
  60.                         WENDU_H=WENDU_H&0X00FF;
  61.                        

  62.                                 LCD_ShowString(1,1,"Temp:");
  63.                             if(WENDU_H>200)
  64.                                         LCD_ShowString(1,7,"OL   ");
  65.                                 else if(WENDU_H>100&&WENDU_H<200)
  66.                                 {
  67.                                         LCD_ShowNum(1,6,WENDU_H,3);//顯示溫度整數(shù)位
  68.                                         LCD_ShowChar(1,9,'.');
  69.                                         LCD_ShowNum(1,10,WENDU_L,2);//顯示溫度小數(shù)位
  70.                                 }
  71.                                 else
  72.                                 {
  73.                                         LCD_ShowChar(1,6,' ');
  74.                                         LCD_ShowNum(1,7,WENDU_H,2);//顯示溫度整數(shù)位       
  75.                                         LCD_ShowChar(1,9,'.');
  76.                                         LCD_ShowNum(1,10,WENDU_L,2);//顯示溫度小數(shù)位
  77.                                 }
  78.                                        
  79.                                                
  80.                            delayms(100);
  81.                                
  82.                                 USART_RX_STA=0;//啟動(dòng)下次接收       
  83.                        
  84.                 }
  85.                 delayms(200);
  86.                 //發(fā)送測(cè)溫指令 0XFA 0XCA 0XC4
  87.                 SendASC(0XFA);
  88.                 SendASC(0XCA);
  89.                 SendASC(0XC4);
  90.                
  91.                
  92.         }
  93. }




  94. //串口初始化,晶振11.0592,波特率9600
  95. void UartInit(void)                //9600bps@11.0592MHz
  96. {
  97.         PCON &= 0x7F;                //波特率不倍速
  98.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  99.         AUXR |= 0x04;                //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc,即1T
  100.         BRT = 0xDC;                //設(shè)定獨(dú)立波特率發(fā)生器重裝值(9600)    //        BRT = 0xFD;        (115200)
  101.         AUXR |= 0x01;                //串口1選擇獨(dú)立波特率發(fā)生器為波特率發(fā)生器
  102.         AUXR |= 0x10;                //啟動(dòng)獨(dú)立波特率發(fā)生器
  103.         EA = 1;//開(kāi)總中斷
  104.         ES = 1;//開(kāi)串口中斷
  105. }


  106. void SendASC(u8 d)
  107. {
  108.        
  109.         SBUF=d;
  110.         while(!TI);

  111.         TI=0;
  112. }



  113. void SendString(u8 *str)       
  114. {
  115.         while(*str)
  116.         {
  117.                 SendASC(*str) ;
  118.                 str++;
  119.         }
  120. }



  121. //串口中斷處理函數(shù)
  122. void uart_Interrupt() interrupt 4
  123. {
  124.         if(RI)
  125.         {
  126.        
  127.                 UartData = SBUF;
  128.                 if((USART_RX_STA&0x8000)==0)//接收未完成
  129.                         {
  130.                                 if(UartData==0XFE)//接收到命令頭
  131.                                 {
  132.                                         USART_STA=1;
  133.                                         USART_RX_LEN=0;
  134.                                 }
  135.                         }
  136.                         if(USART_STA)
  137.                         {
  138.                                 USART_RX_BUF[USART_RX_LEN]=UartData;
  139.                                 USART_RX_LEN++;
  140.                                 if(USART_RX_LEN>8)//接收8位數(shù)據(jù)接收完畢
  141.                                 {
  142.                                         USART_STA=0;
  143.                                         USART_RX_STA|=0x8000;//接收已完成
  144.                                 }
  145.                         }
  146.                        
  147.                                 RI = 0;
  148.         }
  149. }
復(fù)制代碼


81ec6f14251523816b1193b3cb785c4.jpg (138.16 KB, 下載次數(shù): 101)

81ec6f14251523816b1193b3cb785c4.jpg

1.jpg (243.71 KB, 下載次數(shù): 103)

1.jpg

2.jpg (4.6 MB, 下載次數(shù): 108)

2.jpg

3.jpg (4.42 MB, 下載次數(shù): 99)

3.jpg

程序.7z

37.7 KB, 下載次數(shù): 31, 下載積分: 黑幣 -5


作者: weixiaoyueliang    時(shí)間: 2023-4-18 19:19
程序移到89c52的板子上需要改什么?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1