找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2070|回复: 1
打印 上一主题 下一主题
收起左侧

LU90614红外体温传感器单片机驱动程序

[复制链接]
跳转到指定楼层
楼主
12C5A60S2 驱动红外体温传感器LU90614
并在LCD1602屏幕上显示 当没有手靠近时
屏幕显示OL
制作出来的实物图如下:


单片机源程序如下:
  1. ////以下是头文件
  2. #include "STC12C5A60S2.H"        //这里使用的是STC12C5A60S2单片机
  3. #include "string.h"
  4. #include "Delay.h"
  5. #include "LCD1602.h"

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


  11. //LU90614温度传感器接线
  12. //    普中A2
  13. //VCC  +5V
  14. //GND   GND
  15. //R    P3.0
  16. //T    P3.1



  17. /*************************************************************/
  18. //以下是宏定义
  19. #define u32 unsigned long int //无符号长整型
  20. #define u16 unsigned int   //无符号整型
  21. #define u8 unsigned char   //无符号短整型
  22. #define bool bit   //布尔变量

  23. #define USART_REC_LEN                          200          //定义最大接收字节数 200



  24. /*************************************************************/
  25. //以下是变量声明

  26. u8 UartData;//单字节串口数据

  27. u8 KeyNum;//存储矩阵键盘按键返回值


  28. u16 WENDU_H;
  29. u16 WENDU_L;

  30. bit flag=0;

  31. u16 USART_STA=0;
  32. u16 USART_RX_STA=0;       //接收状态标记          
  33. u16 USART_RX_LEN=0;
  34. u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.

  35. ///******************************************************************/
  36. ////函数声明区
  37. void UartInit(void);
  38. void delayms(int d);
  39. void delay_us(int d);
  40. void SendASC(u8 d);//发送字符
  41. void SendString(u8 *str);//发送字符串
  42. ///******************************************************************/
  43. ////主函数main
  44. void main(void)
  45. {       
  46.         UartInit();                //串口初始化
  47.         LCD_Init();       
  48.                 //发送体温模式指令 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)//接收到一次数据
  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);//显示温度整数位
  68.                                         LCD_ShowChar(1,9,'.');
  69.                                         LCD_ShowNum(1,10,WENDU_L,2);//显示温度小数位
  70.                                 }
  71.                                 else
  72.                                 {
  73.                                         LCD_ShowChar(1,6,' ');
  74.                                         LCD_ShowNum(1,7,WENDU_H,2);//显示温度整数位       
  75.                                         LCD_ShowChar(1,9,'.');
  76.                                         LCD_ShowNum(1,10,WENDU_L,2);//显示温度小数位
  77.                                 }
  78.                                        
  79.                                                
  80.                            delayms(100);
  81.                                
  82.                                 USART_RX_STA=0;//启动下次接收       
  83.                        
  84.                 }
  85.                 delayms(200);
  86.                 //发送测温指令 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位数据,可变波特率
  99.         AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
  100.         BRT = 0xDC;                //设定独立波特率发生器重装值(9600)    //        BRT = 0xFD;        (115200)
  101.         AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
  102.         AUXR |= 0x10;                //启动独立波特率发生器
  103.         EA = 1;//开总中断
  104.         ES = 1;//开串口中断
  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. //串口中断处理函数
  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位数据接收完毕
  141.                                 {
  142.                                         USART_STA=0;
  143.                                         USART_RX_STA|=0x8000;//接收已完成
  144.                                 }
  145.                         }
  146.                        
  147.                                 RI = 0;
  148.         }
  149. }
复制代码


81ec6f14251523816b1193b3cb785c4.jpg (138.16 KB, 下载次数: 68)

81ec6f14251523816b1193b3cb785c4.jpg

1.jpg (243.71 KB, 下载次数: 63)

1.jpg

2.jpg (4.6 MB, 下载次数: 66)

2.jpg

3.jpg (4.42 MB, 下载次数: 62)

3.jpg

程序.7z

37.7 KB, 下载次数: 29, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1072312 发表于 2023-4-18 19:19 | 只看该作者
程序移到89c52的板子上需要改什么?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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