视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于单片机火灾报警器程序
2025-10-07 16:27:00 责编:小OO
文档
基于单片机火灾报警器程序

#include

#include

#include

 

#define uchar unsigned char

#define uint unsigned int

#写数据地址 

#读数据地址

#define RS_CLR RS=0 

#define RS_SET RS=1

#define RW_CLR RW=0 

#define RW_SET RW=1 

#define EN_CLR EN=0

#define EN_SET EN=1

#define DataPort P0

s定义端口 

sbit RW = P1^1;

sbit EN = P2^5;

sbit DU = P2^6;

sbit WE = P2^7;

sbit DS=P2^2;

sbit FM=P2^3;

s时钟 加上后可以关掉DS1302芯片输出

s定义总线连接端口

sbit Scl=P2^1;

sbit LED1=P1^0; 定义指示灯端口

sbit LED2=P1^2;

sbit LED3=P1^4;

sbit LED4=P1^6;

//sbit LED5=P1^1;

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//键盘引脚定义

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#define KeyPort P3

b定义AD采样标志位

uint temp;

uchar ADtemp;  //定义中间变量

uchar w;

uchar w1=30;

uchar y;

uchar y1=80;

uchar num;

void DelayUs2x(unsigned char t)

 while(--t);

}

/*------------------------------------------------

 mS延时函数,含有输入参数 unsigned char t,无返回值

 unsigned char 是定义无符号字符变量,其值的范围是

 0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

 while(t--)

 {

 大致延时1mS

 }

}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//按键扫描函数,返回扫描键值

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

unsigned char KeyScan(void)

{

 unsigned char keyvalue;

 if(KeyPort!=0xff)

 

 

 

 

 

 

 

 

 

 

 

 

}

void keyvalue()  键盘功能程序

{

 循环调用按键扫描

}

 烟雾采集程序*/

/*------------------------------------------------

 初始化定时器1

------------------------------------------------*/

void Init_Timer0(void)

{

 TMOD= 0x01;  

 TH0=0xff; 

 TL0=0x00;

 优先级

 TR0=1;  

}

/*------------------------------------------------

 启动IIC总线

------------------------------------------------*/

  void Start(void)

  {

  }

/*------------------------------------------------

 停止IIC总线

------------------------------------------------*/

  void Stop(void)

  {

/*------------------------------------------------

 应答IIC总线

------------------------------------------------*/

/*------------------------------------------------

 非应答IIC总线

------------------------------------------------*/

/*------------------------------------------------

 发送一个字节

------------------------------------------------*/

 

 

 

 

 

 

 

  

  

  

  

 

/*------------------------------------------------

 读入一个字节并返回

------------------------------------------------*/

 

 

 

 

 

 

 

 

 

  

  

  

  

  

 

 

 

/*------------------------------------------------

 写入DA数模转换值

------------------------------------------------*/

 

  写入芯片地址

 

  写入控制位,使能DAC输出

 

  写数据

 

 

 

/*------------------------------------------------

 读取AD模数转换的值,有返回值

------------------------------------------------*/

        Start();        //写入芯片地址

 

 

   写入选择的通道,本程序只用单端输入,差分部分需要自行添加

  的值分别为0、1、2、3,分别代表1-4通道

 

 

        Send(AddRd);    //读入地址

 

        Data=Read();    //读数据

 

 

 

        return Data;   //返回值

void yanwuget() 获得烟雾值

{

  

     if(ADFlag)      //定时采集输入模拟量

  

 

 

}

 数据采集*/

v延时函数

{

  uint i;

  while(count)

  {

  }

}

void Init_Com(void) 串口初始化,波特率9600,方式1

{

}

void dsreset(void)//发送复位和初始化命令

{

  uint i;

  DS=0;

  i=103;

while(i>0)i--;

  DS=1;

  i=4;

while(i>0)i--;

}

{

   DS=0;i++;          //i++ for delay

}

{

  uchar i,j,dat;

  dat=0;

for(i=1;i<=8;i++)

  {

 读出的数据最低位在最前面,这样刚好一个字节在DAT里

  }

  return(dat);

}

v向DS18B20写一位

{

  uint i;

  uchar j;

  bit testb;

for(j=1;j<=8;j++)

  {

    if(testb)     //写1

      DS=0;       //写0

  }

}

void tmpchange(void)  //DS18B20 begin change

{

  dsreset();

  delay(1);

  tmpwritebyte(0xcc);  // address all drivers on bus

  tmpwritebyte(0x44);  //  initiates a single temperature conversion

}

{

  float tt;

  uchar a,b;

  dsreset();

  delay(1);

  tmpwritebyte(0xcc);

  tmpwritebyte(0xbe);

  a=tmpread();

  b=tmpread();

  temp=b;

  temp=temp|a;

  tt=temp*0.05;

  temp=tt*10+0.5;

  return temp;

}

{

  uchar sn1,sn2;

  dsreset();

  delay(1);

  tmpwritebyte(0x33);

  sn1=tmpread();

  sn2=tmpread();

}

 显示程序

void cmg(void)//数码管锁存函数  关时钟DS1302

{

DU=1;

P0=0x00;

DU=0;

WE=1;

P0=0x00;

WE=0;

RST=0;    关时钟DS1302

}

/*------------------------------------------------

 判忙函数

------------------------------------------------*/

 bit LCD_Check_Busy(void) 

 { 

 DataPort= 0xFF; 

 RS_CLR; 

 RW_SET; 

 EN_CLR; 

 _nop_(); 

 EN_SET;

 return (bit)(DataPort & 0x80);

 }

/*------------------------------------------------

 写入命令函数

------------------------------------------------*/

 void LCD_Write_Com(unsigned char com) 

 {  

 while(LCD_Check_Busy()); //忙则等待

 RS_CLR; 

 RW_CLR; 

 EN_SET; 

 DataPort= com; 

 _nop_(); 

 EN_CLR;

 }

/*------------------------------------------------

 写入数据函数

------------------------------------------------*/

 void LCD_Write_Data(unsigned char Data) 

 { 

 while(LCD_Check_Busy()); //忙则等待

 RS_SET; 

 RW_CLR; 

 EN_SET; 

 DataPort= Data; 

 _nop_();

 EN_CLR;

 }

/*------------------------------------------------

 清屏函数

------------------------------------------------*/

 void LCD_Clear(void) 

 { 

 LCD_Write_Com(0x01); 

 DelayMs(5);

 }

/*------------------------------------------------

 写入字符串函数

------------------------------------------------*/

 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 

 if (y == 0) 

 

 表示第一行

 

 else 

 

  表示第二行

 

 while (*s) 

 

 

 }

/*------------------------------------------------

 写入字符函数

------------------------------------------------*/

 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 

 if (y == 0) 

 

 

 

 else 

 

 

 

 LCD_Write_Data( Data);  

 }

/*------------------------------------------------

 初始化函数

------------------------------------------------*/

 void LCD_Init(void) 

 {

   LCD_Write_Com(0x38);    /*显示模式设置*/ 

   LCD_Write_Com(0x08);    /*显示关闭*/ 

   LCD_Write_Com(0x01);    /*显示清屏*/ 

   LCD_Write_Com(0x06);    /*显示光标移动设置*/ 

   LCD_Write_Com(0x0C);    /*显示开及光标设置*/

void wendudisplay(uint temp)   温度显示程序

{

}

void yanwudisplay(uint temp)   浓度显示程序

{

}

void beep(void)  蜂鸣器函数

{

  FM=0;

  delay(100);

  FM=1;

}

void baojing(void)  报警程序

{

/*------------------------------------------------

 主函数

------------------------------------------------*/ 

void main(void) 

{  

 关数码管,点阵函数

 清屏

  避免初始温度报警

 避免初始烟雾报警

while (1) 

 { 

  

}

void Timer0_isr(void) interrupt 0 using 1//定时器1执行数码管动态扫描

{

   重新赋值

 if(j==200) 

 定时置位AD采样标志位

 }下载本文

显示全文
专题