|
本人上周才完成了單片機(jī)的可燃?xì)怏w報(bào)警傳感器。
用了一周時(shí)間才算完成。附件中包含了源碼程序以及PCB電路設(shè)計(jì)。
皆為原創(chuàng)作品 請(qǐng)大家多多指導(dǎo)。- /*頭文件*/
- #include<reg52.h>
- #include <intrins.h>
- /*AD寄存器定義*/
- sfr ADC_CONTR=0xBC;
- sfr ADC_DATA=0xBD;
- sfr ADC_LOW2=0xBE;
- sfr P1_ADC_EN=0x9D;
- sfr P4=0xC0;
- /*****************宏定義******************/
- #define uint unsigned int
- #define uchar unsigned char
- #define ADC_POWER 0x80
- #define ADC_FLAG 0x10
- #define ADC_START 0x08
- #define ADC_SPEEDHH 0x00
- #define ADC_SPEEDH 0x20
- #define ADC_SPEEDL 0x40
- #define ADC_SPEEDLL 0x60
- #define uint unsigned int
- #define uchar unsigned char
- uint ad_value,NH4_value;
- float AN_value;
- /***********位操作端口定義**************/
- sbit set_key=P1^4; //“設(shè)置”鍵 K1
- sbit add_key=P1^5; //“加”鍵 K2
- sbit cut_key=P1^7; // “減”鍵 K3
- sbit speak=P3^7; // 蜂鳴器
- sbit JK=P3^6; // 繼電器
- sbit qian_wei=P1^0;
- sbit bai_wei=P1^1;
- sbit shi_wei=P1^2;
- sbit ge_wei=P1^3;
- uchar y_data[4]; //儲(chǔ)存煙霧的數(shù)據(jù)
- int set_data=50; //報(bào)警初始值的設(shè)定
- uchar temp[4]={0,0,0,0};
- uchar bianma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uchar flog4;
- void delay_1ms(uchar i)
- {
- uint x,y;
- for(x=i;x>0;x--)
- for(y=124;y>0;y--);
- }
- void display()
- {
- qian_wei=0;
- bai_wei=1;
- shi_wei=1;
- ge_wei=1;
- P2=bianma[y_data[0]];
- delay_1ms(5);
- qian_wei=1;
- bai_wei=0;
- shi_wei=1;
- ge_wei=1;
- P2=bianma[y_data[1]];
- delay_1ms(5);
- P2=0xff;
- qian_wei=1;
- bai_wei=1;
- shi_wei=0;
- ge_wei=1;
- P2=bianma[y_data[2]];
- delay_1ms(5);
- P2=0xff;
- qian_wei=1;
- bai_wei=1;
- shi_wei=1;
- ge_wei=0;
- P2=bianma[y_data[3]];
- delay_1ms(5);
- P2=0xff;
- }
- void display2()
- {
- temp[0]=set_data/1000;
- temp[1]=(set_data%1000)/100;
- temp[2]=(set_data%100)/10;
- temp[3]=set_data%10;
- qian_wei=0;
- bai_wei=1;
- shi_wei=1;
- ge_wei=1;
- P2=bianma[temp[0]];
- delay_1ms(5);
- P2=0xff;
- qian_wei=1;
- bai_wei=0;
- shi_wei=1;
- ge_wei=1;
- P2=bianma[temp[1]];
- delay_1ms(5);
- P2=0xff;
- qian_wei=1;
- bai_wei=1 ;
- shi_wei=0;
- ge_wei=1;
- P2=bianma[temp[2]];
- delay_1ms(5);
- P2=0xff;
- qian_wei=1;
- bai_wei=1;
- shi_wei=1;
- ge_wei=0;
- P2=bianma[temp[3]];
- delay_1ms(5);
- P2=0xff;
- }
- /********** 模數(shù)轉(zhuǎn)換初始換函數(shù)******************/
- void init_ADC()
- {
- P1_ADC_EN=0x40;
- ADC_DATA=0;
- ADC_LOW2=0;
- ADC_CONTR=ADC_SPEEDLL|ADC_POWER;
- delay_1ms(20);
- }
- /********** 模數(shù)轉(zhuǎn)換函數(shù)******************/
- uint ADC(uchar num) //參數(shù)num用于指定是哪個(gè)模擬量轉(zhuǎn)換
- {
- ADC_CONTR=ADC_POWER|ADC_SPEEDLL|num|ADC_START;
- _nop_();_nop_();_nop_();_nop_();
- while(!(ADC_CONTR&ADC_FLAG));
- ADC_CONTR&=~ADC_FLAG;
- ad_value=ADC_DATA*4+ADC_LOW2; //轉(zhuǎn)換的結(jié)果是十位的 高八位放在ADC_DATA中 低兩位放在ADC_LOW2
- return ad_value; // 將轉(zhuǎn)換后的數(shù)字量返回
- }
- /********** 模數(shù)轉(zhuǎn)換后數(shù)據(jù)處理函數(shù)******************/
- void pos_AD()
- {
- AN_value=ADC(6); // 裝換氨氣的濃度 把轉(zhuǎn)換后的數(shù)字量結(jié)果賦給AN_value
- delay_1ms(5);
- // /***對(duì)轉(zhuǎn)換后的數(shù)字量進(jìn)行矯正***/
- if(AN_value>900)
- {
- AN_value=900;
- }
- NH4_value=(900-AN_value)*0.9765625;
- y_data[0]=NH4_value/1000; //將氣體濃度值的個(gè)位 十位 百位 千位 分開(kāi) 用于顯示
- y_data[1]=(NH4_value%1000)/100;
- y_data[2]=(NH4_value%100)/10;
- y_data[3]=NH4_value%10;
- }
- /********** 報(bào)警處理函數(shù)******************/
- void baojing()
- {
- if(set_data<NH4_value) //判斷是否有報(bào)警 如果有就進(jìn)入函數(shù)
- {
- speak=0;
- JK=0;
- }
- else //沒(méi)有報(bào)警情況的出現(xiàn)
- {
- speak=1;
- JK=1;
- }
- }
- /**********主函數(shù)******************/
- void main()
- {
- init_ADC(); //模數(shù)轉(zhuǎn)換初始化
- speak=1;
- JK=1;
- while(1)
- {
- if(set_key==0)
- {
- delay_1ms(5);
- if(set_key==0)
- {
- flog4=!flog4;
- while(set_key==0);
- }
- }
- if(flog4==1)
- {
- if(add_key==0)
- {
- delay_1ms(5);
- if(add_key==0)
- {
- set_data=set_data+1;
- while(add_key==0);
- if(set_data>5000)
- {
- set_data=5000;
- }
- }
- }
- if(cut_key==0)
- {
- delay_1ms(5);
- if(cut_key==0)
- {
- set_data=set_data-1;
- while(cut_key==0);
- if(set_data<=0)
- {
- set_data=0;
- }
- }
- }
- display2();
- }
- else
- {
- pos_AD();
- display();
- baojing();
- }
- }
- }
復(fù)制代碼
|
-
-
原理圖.pdf
2019-4-23 19:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
153.37 KB, 下載次數(shù): 40, 下載積分: 黑幣 -5
原理圖
-
-
煙霧報(bào)警器.rar
2019-4-23 19:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.56 KB, 下載次數(shù): 34, 下載積分: 黑幣 -5
源碼
|