硬件:
1、單片機開發(fā)板
2、紅外遙控器(模擬人體發(fā)出紅外光)
3、壓力傳感器
4、LCD1602液晶顯示
軟件:
1、keil4
2、stc-isp
使用方法:
上電初始狀態(tài)液晶顯示NO PERSON 當(dāng)在壓力傳感器放上一部手機時(我用的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;
- }
- }
復(fù)制代碼
【必讀】版權(quán)免責(zé)聲明
1、本主題所有言論和內(nèi)容純屬會員個人意見,與本論壇立場無關(guān)。2、本站對所發(fā)內(nèi)容真實性、客觀性、可用性不做任何保證也不負任何責(zé)任,網(wǎng)友之間僅出于學(xué)習(xí)目的進行交流。3、對提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請勿將該數(shù)字內(nèi)容進行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問題與本站無關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來,僅供學(xué)習(xí)用途使用,請務(wù)必下載后兩小時內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請及時聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|