硬件:
1、单片机开发板
2、红外遥控器(模拟人体发出红外光)
3、压力传感器
4、LCD1602液晶显示
软件:
1、keil4
2、stc-isp
使用方法:
上电初始状态液晶显示NO PERSON 当在压力传感器放上一部手机时(我用的6sp)如果红外遥控器不发出红外光则液晶仍然显示NO PERSON 反之则显示CHILD(小孩)如果增加一部手机则显示ADULT(大人)如果撤销压力传感器的所有物体则显示NO PERSON 此时如果重新放置物品在红外遥控器发出红外光的情况下屏幕仍然显示NO PERSON
求大佬帮忙解读程序。。。拜托拜托了。。。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
仿真文件和c源码
汽车座椅有无人状态监测.zip
(268.85 KB, 售价: 1 E币)
单片机部分源码
- #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); //设置16*2显示
- Write_Cmd(0x0c); //显示地址
- Write_Cmd(0x06);//地址指针移位命令
- Write_Cmd(0x01);////清屏
- TMOD|=0x01;//设置定时器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);//发送跳跃ROM指令
- write_byte(0x44);//发送温度转换指令
- ds_init();//初始化DS18B20
- dsWait();
- write_byte(0xcc);//发送跳跃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位数据其二进制每增加一那么它的十进制就增加1/16=0.0625,用temp乘以0.0625就可以得到其十进制数是多少,加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;
- }
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|