国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
汽車座椅有無人狀態(tài)監(jiān)測設(shè)計Proteus仿真電路+51單片機程序
[打印本頁]
作者:
山海致遠
時間:
2020-2-2 11:22
標題:
汽車座椅有無人狀態(tài)監(jiān)測設(shè)計Proteus仿真電路+51單片機程序
硬件:
1、單片機開發(fā)板
2、紅外遙控器(模擬人體發(fā)出紅外光)
3、壓力傳感器
4、LCD1602液晶顯示
軟件:
1、keil4
2、stc-isp
使用方法:
上電初始狀態(tài)液晶顯示NO PERSON 當在壓力傳感器放上一部手機時(我用的6sp)如果紅外遙控器不發(fā)出紅外光則液晶仍然顯示NO PERSON 反之則顯示CHILD(小孩)如果增加一部手機則顯示ADULT(大人)如果撤銷壓力傳感器的所有物體則顯示NO PERSON 此時如果重新放置物品在紅外遙控器發(fā)出紅外光的情況下屏幕仍然顯示NO PERSON
求大佬幫忙解讀程序。。。拜托拜托了。。。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真文件和c源碼
汽車座椅有無人狀態(tài)監(jiān)測.zip
(268.85 KB, 售價: 1 E幣)
2020-2-2 11:20 上傳
點擊文件名下載附件
售價: 1 E幣
[記錄]
[
購買
]
1.jpg
(89.5 KB)
下載附件
2020-2-2 11:19 上傳
連接圖.jpg
(112.92 KB)
下載附件
2020-2-2 11:19 上傳
單片機部分源碼
#include "reg52.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "i2c.h"
#define uchar unsigned char
#define uint unsigned int
#define GapValue 429.5
sbit led = P1^2;
sbit LED = P1^0;
unsigned int qupi=0;
unsigned long weight = 0;
bit weight_flag = 0;
bit temp_flag = 0;
bit no_person = 0;
uchar IrValue[6];
uchar Time;
uint temp;
//void delay(uint n)
//{
// uint j;
// for(j=0;j<n;j++)
// {
// _nop_();
// }
//}
void init()
{
Write_Cmd(0x38); //設(shè)置16*2顯示
Write_Cmd(0x0c); //顯示地址
Write_Cmd(0x06);//地址指針移位命令
Write_Cmd(0x01);////清屏
TMOD|=0x01;//設(shè)置定時器0工作模式1
TH0=(65536-50000)/256;//定時器裝初值
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
}
void Get_temp()
{
uchar L,M; //存儲溫度的高八位和低八位
ds_init();//初始化DS18B20
dsWait();
write_byte(0xcc);//發(fā)送跳躍ROM指令
write_byte(0x44);//發(fā)送溫度轉(zhuǎn)換指令
ds_init();//初始化DS18B20
dsWait();
write_byte(0xcc);//發(fā)送跳躍ROM指令
write_byte(0xbe);//讀取DS18B20暫存器值
L = read_byte();//讀取溫度第八位
M = read_byte();//讀取溫度高八位
temp = M;
temp <<= 8;
temp |= L;
temp = temp * 0.0625 + 0.5;//temp是16位數(shù)據(jù)其二進制每增加一那么它的十進制就增加1/16=0.0625,用temp乘以0.0625就可以得到其十進制數(shù)是多少,加0.5是為了四舍五入
//write_weight(13,temp);
}
void main()
{
init();
while(1)
{
if(temp_flag)
{
temp_flag = 0;
Get_temp();
if(temp > 35&&temp < 39)
{
no_person = 1;
}
else
{
no_person = 0;
Write_Cmd(0x01); //清屏
write_string(1,0,"NO PERSON");
}
}
if(weight_flag)
{
weight_flag = 0;
weight = ADC_read(0x03);
// write_weight(1,weight);
if(no_person)
{
if(weight<85||weight>250)
{
Write_Cmd(0x01); //清屏
write_string(1,0,"NO PERSON");
// write_weight(1,weight);
no_person = 0;
break;
}
if(weight>85&&weight<170)
{
Write_Cmd(0x01); //清屏
write_string(1,0,"CHILD");
// write_weight(1,weight);
}
if(weight>170&&weight<250)
{
Write_Cmd(0x01); //清屏
write_string(1,0,"ADULT");
// write_weight(1,weight);
}
}
else
{
Write_Cmd(0x01); //清屏
write_string(1,0,"NO PERSON");
}
}
}
}
void timer0() interrupt 1
{
static uchar weight_count = 0,temp_count = 0;
weight_count++;
temp_count++;
if(weight_count == 10)
{
weight_count = 0;
weight_flag = 1;
}
if(temp_count == 10)
{
temp_count = 0;
temp_flag = 1;
}
}
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0