仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【U04】
1.? 簡介
? 本文提出了一種基于51單片機的火災報警系統(tǒng)。單片機實時通過ADC0832轉換芯片采集煙霧傳感器的煙霧的濃度,通過單片機的數據轉換處理后在液晶屏上顯示,當測量空氣中的煙霧濃度和溫度大于設置值時,蜂鳴器發(fā)出報警,溫度和煙霧的濃度報警值可以通過按鍵進行設置。
2.? 主要功能
a.通過LCD1602顯示當前煙霧濃度、實時溫度、報警閾值。
b.通過按鍵設置煙霧濃度和溫度報警閾值。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include <reg52.h>
#include "intrins.h"
#define u8 unsigned char
#define u16 unsigned int
#define uchar unsigned char
#define uint unsigned int
uchar yushe_wendu=30; //溫度預設值
uchar yushe_yanwu=80; //煙霧預設值
uint wendu; //溫度值全局變量
uchar yanwu; //用于讀取ADC數據
//運行模式
uchar Mode=0; //=1是設置溫度閥值 =2是設置煙霧閥值 =0是正常監(jiān)控模式
//管腳聲明
sbit Led_Reg =P1^1; //紅燈
sbit Led_Yellow =P1^7; //黃燈
sbit Buzzer =P1^4; //蜂鳴器
sbit Fan =P3^3; //
/********************************************************************
* 名稱 : delay_1ms()
* 功能 : 延時1ms函數
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<110;j++);
}
/***********************************************************************************************************
LCD1602相關函數
***********************************************************************************************************/
//LCD管腳聲明
sbit LCDRS = P2^5;
sbit LCDEN = P2^7;
sbit RW = P2^6;
sbit D0 = P0^0;
sbit D1 = P0^1;
sbit D2 = P0^2;
sbit D3 = P0^3;
sbit D4 = P0^4;
sbit D5 = P0^5;
sbit D6 = P0^6;
sbit D7 = P0^7;
//LCD延時
void LCDdelay(uint z) //該延時大約100us
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void LCD_WriteData(u8 dat)
{
if(dat&0x01)D0=1;else D0=0;
if(dat&0x02)D1=1;else D1=0;
if(dat&0x04)D2=1;else D2=0;
if(dat&0x08)D3=1;else D3=0;
if(dat&0x10)D4=1;else D4=0;
if(dat&0x20)D5=1;else D5=0;
if(dat&0x40)D6=1;else D6=0;
if(dat&0x80)D7=1;else D7=0;
}
//命令
void write_com(uchar com)
{
LCDRS=0;
LCD_WriteData(com);
RW = 0;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//數據
void write_data(uchar date)
{
LCDRS=1;
LCD_WriteData(date);
RW = 0;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
/*------------------------------------------------
選擇寫入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y)
{
if (x == 0)
{
write_com(0x80 + y); //表示第一行
}
else
{
write_com(0xC0 + y); //表示第二行
}
}
/*------------------------------------------------
寫入字符串函數
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
SelectPosition(x,y) ;
while (*s)
{
write_data( *s);
s ++;
}
}
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
{
SelectPosition(x,y) ;
if(l>=5)
write_data(0x30+s/10000%10); //萬位
if(l>=4)
write_data(0x30+s/1000%10); //千位
if(l>=3)
write_data(0x30+s/100%10); //百位
if(l>=2)
write_data(0x30+s/10%10); //十位
if(l>=1)
write_data(0x30+s%10); //個位
}
4.? 仿真proteus8.6
? 本設計采用proteus8.6軟件(內附安裝包)實現仿真設計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
高溫報警:
高濃度報警:
5.? 設計報告
設計報告主要包括硬件電路、軟件設計、仿真調試等等,僅供參考。
6.? 資料清單
設計資料主要包括C程序+仿真+設計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網盤下載鏈接:【U04】百度網盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集