|
12C5A60S2 驅動紅外體溫傳感器LU90614
并在LCD1602屏幕上顯示 當沒有手靠近時
屏幕顯示OL
制作出來的實物圖如下:
12fc0a967981b25e9531fe9476998a1.jpg (4.93 MB, 下載次數: 45)
下載附件
2022-12-7 15:43 上傳
c30612a0652320d0a6067d55b67d565.jpg (4.79 MB, 下載次數: 47)
下載附件
2022-12-7 15:44 上傳
單片機源程序如下:- ////以下是頭文件
- #include "STC12C5A60S2.H" //這里使用的是STC12C5A60S2單片機
- #include "string.h"
- #include "Delay.h"
- #include "LCD1602.h"
- //接線 LCD的接線
- // 普中A2 完全兼容
- //sbit LCD_RW=P2^5;
- //sbit LCD_EN=P2^7;
- //#define LCD_DataPort P0
- //LU90614溫度傳感器接線
- // 普中A2
- //VCC +5V
- //GND GND
- //R P3.0
- //T P3.1
- /*************************************************************/
- //以下是宏定義
- #define u32 unsigned long int //無符號長整型
- #define u16 unsigned int //無符號整型
- #define u8 unsigned char //無符號短整型
- #define bool bit //布爾變量
- #define USART_REC_LEN 200 //定義最大接收字節數 200
- /*************************************************************/
- //以下是變量聲明
- u8 UartData;//單字節串口數據
- u8 KeyNum;//存儲矩陣鍵盤按鍵返回值
- u16 WENDU_H;
- u16 WENDU_L;
- bit flag=0;
- u16 USART_STA=0;
- u16 USART_RX_STA=0; //接收狀態標記
- u16 USART_RX_LEN=0;
- u8 USART_RX_BUF[USART_REC_LEN]; //接收緩沖,最大USART_REC_LEN個字節.
- ///******************************************************************/
- ////函數聲明區
- void UartInit(void);
- void delayms(int d);
- void delay_us(int d);
- void SendASC(u8 d);//發送字符
- void SendString(u8 *str);//發送字符串
- ///******************************************************************/
- ////主函數main
- void main(void)
- {
- UartInit(); //串口初始化
- LCD_Init();
- //發送體溫模式指令 0XFA 0XC5 0XBF
- SendASC(0XFA);
- SendASC(0XC5);
- SendASC(0XBF);
- delayms(50);
-
- while(1)
- {
- if(USART_RX_STA&0X8000)//接收到一次數據
- {
- WENDU_H=USART_RX_BUF[2];
- WENDU_L=USART_RX_BUF[3]/10;
- WENDU_H=WENDU_H&0X00FF;
-
- LCD_ShowString(1,1,"Temp:");
- if(WENDU_H>200)
- LCD_ShowString(1,7,"OL ");
- else if(WENDU_H>100&&WENDU_H<200)
- {
- LCD_ShowNum(1,6,WENDU_H,3);//顯示溫度整數位
- LCD_ShowChar(1,9,'.');
- LCD_ShowNum(1,10,WENDU_L,2);//顯示溫度小數位
- }
- else
- {
- LCD_ShowChar(1,6,' ');
- LCD_ShowNum(1,7,WENDU_H,2);//顯示溫度整數位
- LCD_ShowChar(1,9,'.');
- LCD_ShowNum(1,10,WENDU_L,2);//顯示溫度小數位
- }
-
-
- delayms(100);
-
- USART_RX_STA=0;//啟動下次接收
-
- }
- delayms(200);
- //發送測溫指令 0XFA 0XCA 0XC4
- SendASC(0XFA);
- SendASC(0XCA);
- SendASC(0XC4);
-
-
- }
- }
- //串口初始化,晶振11.0592,波特率9600
- void UartInit(void) //9600bps@11.0592MHz
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位數據,可變波特率
- AUXR |= 0x04; //獨立波特率發生器時鐘為Fosc,即1T
- BRT = 0xDC; //設定獨立波特率發生器重裝值(9600) // BRT = 0xFD; (115200)
- AUXR |= 0x01; //串口1選擇獨立波特率發生器為波特率發生器
- AUXR |= 0x10; //啟動獨立波特率發生器
- EA = 1;//開總中斷
- ES = 1;//開串口中斷
- }
- void SendASC(u8 d)
- {
-
- SBUF=d;
- while(!TI);
- TI=0;
- }
- void SendString(u8 *str)
- {
- while(*str)
- {
- SendASC(*str) ;
- str++;
- }
- }
- //串口中斷處理函數
- void uart_Interrupt() interrupt 4
- {
- if(RI)
- {
-
- UartData = SBUF;
- if((USART_RX_STA&0x8000)==0)//接收未完成
- {
- if(UartData==0XFE)//接收到命令頭
- {
- USART_STA=1;
- USART_RX_LEN=0;
- }
- }
- if(USART_STA)
- {
- USART_RX_BUF[USART_RX_LEN]=UartData;
- USART_RX_LEN++;
- if(USART_RX_LEN>8)//接收8位數據接收完畢
- {
- USART_STA=0;
- USART_RX_STA|=0x8000;//接收已完成
- }
- }
-
- RI = 0;
- }
- }
復制代碼
|
評分
-
查看全部評分
|