一氧化碳报警器课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一氧化碳报警器
电路图:
Pcb图:
程序清单:
/*头文件*/
#include
#include
/*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; //“设置”键 K1
sbit add_key=P1^5; //“加”键 K2
sbit cut_key=P1^7; // “减”键 K3
sbit speak=P3^7; // 蜂鸣器
sbit led2=P3^5; // 继电器
sbit led1=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]; //储存烟雾的数据
int set_data=200; //报警初始值的设定
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;
}
/********** 模数转换初始换函数******************/
void init_ADC()
{
P1_ADC_EN=0x40;
ADC_DATA=0;
ADC_LOW2=0;
ADC_CONTR=ADC_SPEEDLL|ADC_POWER;
delay_1ms(20);
}
/********** 模数转换函数******************/
uint ADC(uchar num) //参数num用于指定是哪个模拟量转换{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|num|ADC_START;
_nop_();_nop_();_nop_();_nop_();
while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;