1.51單片機(jī)+LCD1602顯示屏+紅外熱釋電傳感器仿真
功能:
(1)紅外熱釋電傳感器采用按鍵模擬輸入信號(hào),由于傳感器檢測(cè)人體時(shí)輸出高電平,按鍵需要下拉電阻作為無(wú)信號(hào)時(shí)的電平狀態(tài)。
(2)當(dāng)熱釋電檢測(cè)到人體時(shí),LED燈亮以及蜂鳴器響起。

2.程序設(shè)計(jì)(采用keil5進(jìn)行編程)
#include < reg52.h >
#include < intrins.h >
#include < math.h >
#define uchar unsigned char
#define uint unsigned int
//延時(shí)函數(shù)ms
void _delay_ms(uint t)
{
uint i,j;
for(i=0;i< t;i++)
for(j=0;j< 120;j++);
}
//延時(shí)函數(shù)us
void _delay_us(uchar t)
{
while(t >0)t--;
}
sbit RS=P3^2; //寫(xiě)信號(hào)
sbit RWW=P3^3; //讀信號(hào)
sbit E=P3^4; //使能信號(hào)
#define e1 E=1
#define rd1 RWW=1
#define rs1 RS=1
#define e0 E=0
#define rd0 RWW=0
#define rs0 RS=0
#define PP P1
//寫(xiě)1602控制字
void lcd1602_writecrtl(uchar dat)
{
rd0;//讀信號(hào)置0
rs0;//寫(xiě)信號(hào)置0
_delay_us(5);
PP=dat;
e1;//使能信號(hào)置1
_delay_us(5);
e0;//使能信號(hào)置0
}
//寫(xiě)1602數(shù)據(jù)
void lcd1602_writenumber(uchar dat)
{
rd0;//讀信號(hào)置0
rs1;//寫(xiě)信號(hào)置1
_delay_us(5);
PP=dat;
e1;//使能信號(hào)置1
_delay_us(5);
e0;//使能信號(hào)置0
}
//1602初始化
void lcd1602_init()
{
lcd1602_writecrtl(0x38); //顯示模式
lcd1602_writecrtl(0x06); //顯示光標(biāo)移動(dòng)位置
lcd1602_writecrtl(0x0c); //顯示開(kāi)及光標(biāo)設(shè)置
lcd1602_writecrtl(0x01); //顯示清屏
}
//顯示地址
void lcd1602_adr(uchar dat)
{
lcd1602_writecrtl(0x80 | dat);
}
//行顯示-
void LCD1602_string(uchar hang,uchar lie,uchar const *p)
{
uchar a;
if(hang == 1) a = 0x00;
if(hang == 2) a = 0x40;
a = a + lie - 1;
lcd1602_adr(a);
while(1)
{
if(*p == '?') break;
lcd1602_writenumber(*p);
p++;
}
}
uchar code zifux[]="0123456789abcdef";
uchar code zifu0[]="Pyroelectric ";
uchar code zifu2[]=" Alarm ";
uchar code zifu1[]=" Normal ";
sbit key_sr= P2^1;//傳感器
sbit led= P0^0; //報(bào)警
sbit beer= P2^7;//報(bào)警
uint jishu1=0;
uint jishubeer=0;
uchar bz=0;
//---------------
void ct()
{
//顯示
if(bz==0) LCD1602_string(2,1,zifu1);
if(bz==1) LCD1602_string(2,1,zifu2);
//判斷
if((key_sr==1)&&(bz==0)) {bz=1;jishu1=0;}
//報(bào)警
if(bz==1)
{
jishubeer=(jishubeer+1)%100;
if(jishubeer >50){beer=led=0;}
else {beer=led=1;}
//延時(shí)
jishu1=jishu1+1;if(jishu1 >500) {jishu1=0;bz=0;}
}
else {beer=led=1;}
}
//主函數(shù)
void main()
{
_delay_ms(1);
key_sr=0;
//初始化
lcd1602_init();
LCD1602_string(1,1,zifu0);
LCD1602_string(1,1,zifu0);
LCD1602_string(2,1,zifu1);
while(1)
{
ct();
}
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
傳感器
+關(guān)注
關(guān)注
2576文章
55041瀏覽量
791382 -
仿真
+關(guān)注
關(guān)注
54文章
4483瀏覽量
138280 -
51單片機(jī)
+關(guān)注
關(guān)注
278文章
5714瀏覽量
134366 -
紅外熱釋電
+關(guān)注
關(guān)注
0文章
11瀏覽量
8141
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
人體紅外熱釋電傳感器
==0) //當(dāng)傳感器被遮蔽的時(shí)候向單片機(jī)輸入低電平,單片機(jī)控制放光二極管亮led=0;elseled=1;}}熱釋
發(fā)表于 10-04 16:08
大神們有知道51單片機(jī)怎么用中斷識(shí)別人體紅外熱釋電傳感器的3v信號(hào)嗎?
我用51單片機(jī)控制人體紅外熱釋電傳感器,怎么中斷不能產(chǎn)生?是不是輸出的3v電壓太低不能識(shí)別?有沒(méi)
發(fā)表于 10-14 23:03
請(qǐng)問(wèn)熱釋電人體紅外傳感器和51單片機(jī)怎么連接檢測(cè)信號(hào)?
我用51單片機(jī)控制人體紅外熱釋電傳感器,怎么中斷不能產(chǎn)生?是不是輸出的3v電壓太低不能識(shí)別?有沒(méi)
發(fā)表于 08-06 00:00
熱電堆傳感器和熱釋電傳感器的區(qū)別是什么?
甘肽等受熱時(shí),晶體兩端會(huì)產(chǎn)生數(shù)量相等、符號(hào)相反的電荷。1842年布魯斯特將這種由溫度變化引起的電極化現(xiàn)象正式命名為“pyroelectric”,即熱釋電效應(yīng)。熱釋電效應(yīng)示意圖
發(fā)表于 03-06 14:02
熱釋電傳感器電路圖大全(六款熱釋電傳感器電路設(shè)計(jì)原理圖詳解)
本文主要介紹了熱釋電傳感器電路圖大全(六款熱釋電傳感器電路設(shè)計(jì)原理圖詳解)。
發(fā)表于 03-04 09:48
?9.4w次閱讀
熱釋電傳感器的應(yīng)用
熱釋電紅外傳感器利用專(zhuān)用晶體材料產(chǎn)生的熱釋電效應(yīng)來(lái)檢測(cè)紅外線輻射的變化。通過(guò)檢測(cè)
熱釋電傳感器的原理及特性
熱釋電傳感器是一種能檢測(cè)人或動(dòng)物發(fā)射的紅外線而輸出電信號(hào)的傳感器。早在1938年,就有人提出過(guò)利用熱
發(fā)表于 11-30 10:27
?1.2w次閱讀
熱釋電傳感器如何提高被動(dòng)紅外探測(cè)器的準(zhǔn)確性
熱釋電傳感器可以用于被動(dòng)紅外探測(cè)——也就是常見(jiàn)的防盜報(bào)警器中,這是紅外
發(fā)表于 12-15 17:26
?2425次閱讀
51單片機(jī)及紅外熱釋電傳感器仿真
評(píng)論