最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于单片机火灾报警器程序

来源:动视网 责编:小OO 时间:2025-10-07 16:27:00
文档

基于单片机火灾报警器程序

基于单片机火灾报警器程序#include#include#include#defineucharunsignedchar#defineuintunsignedint#写数据地址#读数据地址#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1#defineDataPortP0s定义端口sbitRW=P1^1;sbitEN=P2^5;sbitDU=
推荐度:
导读基于单片机火灾报警器程序#include#include#include#defineucharunsignedchar#defineuintunsignedint#写数据地址#读数据地址#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1#defineDataPortP0s定义端口sbitRW=P1^1;sbitEN=P2^5;sbitDU=
基于单片机火灾报警器程序

#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采样标志位

 }

文档

基于单片机火灾报警器程序

基于单片机火灾报警器程序#include#include#include#defineucharunsignedchar#defineuintunsignedint#写数据地址#读数据地址#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1#defineDataPortP0s定义端口sbitRW=P1^1;sbitEN=P2^5;sbitDU=
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top