仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【U01】
1.? 簡介
? 本文提出了一種基于51單片機(jī)的PM2.5空氣質(zhì)量檢測系統(tǒng)。單片機(jī)實時通過ADC0832轉(zhuǎn)換芯片采集粉塵傳感器的粉塵的濃度,通過單片機(jī)的數(shù)據(jù)轉(zhuǎn)換處理后在液晶屏上顯示空氣中的質(zhì)量,當(dāng)測量空氣中的粉塵濃度大于設(shè)置粉塵濃度時,蜂鳴器和發(fā)光二極管發(fā)出聲光報警。粉塵的濃度報警值可以通過按鍵進(jìn)行設(shè)置。
2.? 主要功能
a.通過LCD1602顯示當(dāng)前PM2.5濃度和報警閾值。
b.通過按鍵設(shè)置粉塵濃度報警閾值。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include"reg51.h"
#include"intrins.h"
#include"absacc.h"
//設(shè)定adc0832的引腳
sbit RS=P1^4;
sbit RW=P1^5;
sbit E=P1^6;
//設(shè)定三個按鈕的引腳
sbit jian=P3^1;
sbit jia=P3^0;
//sbit fuwei=P3^1;
//設(shè)定adc0832的引腳
sbit baojing=P1^3;
sbit cs=P1^2;
sbit di=P1^0;
sbit clk=P1^1;
//定義(方便寫程序)
#define busy 0x80
#define uchar unsigned char
#define uint unsigned int
//把要用的字符串寫出來
uchar code table[]="PM2.5:";
uchar code table1[]="ALARM:";
uchar code table2[]="ug/m3";
uchar code table3[]="0123456789ABCDEF";
uchar num, set, now, a, b;
//延時函數(shù)
void delay(uint i)
{ uint j;
for(j=0;j<i;j++);
}
//查詢adc0832是否在忙
void test_1602busy()
{ uchar P0DATA;
RW=1;
RS=0;
loop: P0=0xff;
E=1;
P0DATA=P0;
E=0;
if(P0DATA&busy)
{ goto loop;
}
}
//寫命令
void writecom(uchar co)
{ test_1602busy();
RS=0;
RW=0;
E=0;
P0=co;
E=1;
E=0;
}
//寫數(shù)據(jù)
void writedata(uchar Data)
{ test_1602busy();
RS=1;
RW=0;
E=0;
P0=Data;
E=1;
E=0;
}
void init()
{ writecom(0x38); //設(shè)置16X2顯示,5X7點陣,8位數(shù)據(jù)接口
writecom(0x0c); //設(shè)置開顯示,不顯示光標(biāo)
writecom(0x06); //寫一個字符后地址指針加1
writecom(0x01); //顯示清零,數(shù)據(jù)指針清零
}
void sound()
{ uchar z=100;
while(z--)
{ baojing=~baojing;
delay(500);
}
}
//從adc0832獲取數(shù)據(jù)
uchar get()
{ uchar Dat1=0,Dat2=0;
clk=0; di=1; cs=0;
clk=1; clk=0; di=1; //第一脈沖,開始位
clk=1; clk=0; di=1; //第二脈沖,模式選擇
clk=1; clk=0; di=1; //第三脈沖,通道選擇
for(b=0;b<8;b++) //從高到低取一次數(shù)
{clk=1;
clk=0;
if(di) Dat1|=0x80>>b;
}
for(b=0;b<8;b++) //從詆到高取一次數(shù)
{if(di) Dat2|=0x80<<b;
clk=1;
clk=0;
}
cs=1; di=1; clk=1;
if(Dat1==Dat2) return Dat1; //校驗兩次讀數(shù)
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
超限報警:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【U01】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計合集:單片機(jī)仿真設(shè)計合集