一氧化碳报警器课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档