資源簡介
本產品采用單片機+最小系統+LCD1602液晶顯示模塊+MQ-3模塊+ADC0832模塊+蜂鳴器模塊+LED指示燈模塊+按鍵模塊設計而成。
附件為C代碼。
代碼片段和文件信息
//程序頭函數
#include?
#include? //包含頭文件
//顯示函數
#include?
#include?“eeprom52.h“
//宏定義
#define?uint?unsigned?int?
#define?uchar?unsigned?char
?
//管腳聲明
sbit?LED_R=?P2^2; ??//紅色指示燈
sbit?LED_G=?P2^0; ??//綠色指示燈
sbit?FENG?=?P2^5; ??//蜂鳴器
sbit?CS???=?P1^4;
sbit?Clk?=?P1^2;
sbit?DATI?=?P1^3;
sbit?DATO?=?P1^3; //ADC0832引腳
//按鍵
sbit?Key1=P2^6;
sbit?Key2=P2^7;
sbit?Key3=P3^7;
/*******************************定義全局變量********************************/
unsigned?char?dat?=?0;??????//AD值
unsigned?char?CH=0;???????//通道變量
unsigned?int?sum=0; ?//平均值計算時的總數
unsigned?char?m=0;
bit?bdata?flag; ??//定義位變量
uchar?set; ??//設置變量
uchar???K_ZERO=40;???????//傳感器零點漂移,約130mV
//函數聲明
extern?void?Key();
/*
void?delay(uint?z)
{
uint?ij;
for(i=0;i for(j=0;j<121;j++);
}
*/
//酒精含量變量
uchar?temp=0;
//指示燈變量
uchar?WARNING=25; //報警值變量
/******************把數據保存到單片機內部eeprom中******************/
void?write_eeprom()
{
SectorErase(0x2000);
byte_write(0x2000?WARNING);
byte_write(0x2060?a_a);
}
/******************把數據從單片機內部eeprom中讀出來*****************/
void?read_eeprom()
{
WARNING???=?byte_read(0x2000);
a_a??????=?byte_read(0x2060);
}
/**************開機自檢eeprom初始化*****************/
void?init_eeprom()?
{
read_eeprom(); //先讀
if(a_a?!=?1) //新的單片機初始單片機內問eeprom
{
WARNING??=?25;
a_a?=?1;
write_eeprom(); ???//保存數據
}
}
/****************************************************************************
函數功能:AD轉換子程序
入口參數:CH
出口參數:dat
****************************************************************************/
unsigned?char?adc0832(unsigned?char?CH)
{
unsigned?char?itestadval;
adval?=?0x00;
test?=?0x00;
Clk?=?0;???????//初始化
DATI?=?1;
_nop_();
CS?=?0;
_nop_();
Clk?=?1;
_nop_();
if?(?CH?==?0x00?)??????//通道選擇
{
Clk?=?0;
DATI?=?1;??????//通道0的第一位
_nop_();
Clk?=?1;
_nop_();
Clk?=?0;
DATI?=?0;??????//通道0的第二位
_nop_();
Clk?=?1;
_nop_();
}?
else
{
Clk?=?0;
DATI?=?1;??????//通道1的第一位
_nop_();
Clk?=?1;
_nop_();
Clk?=?0;
DATI?=?1;??????//通道1的第二位
_nop_();
Clk?=?1;
_nop_();
}
Clk?=?0;
DATI?=?1;
for(?i?=?0;i?8;i++?)??????//讀取前8位的值
{
_nop_();
adval?<<=?1;
Clk?=?1;
_nop_();
Clk?=?0;
if?(DATO)
adval?|=?0x01;
else
adval?|=?0x00;
}
for?(i?=?0;?i?8;?i++)??????//讀取后8位的值
{
test?>>=?1;
if?(DATO)
test?|=?0x80;
else?
test?|=?0x00;
_nop_();
Clk?=?1;
_nop_();
Clk?=?0;
}
if?(adval?==?test)??????//比較前8位與后8位的值,如果不相同舍去。若一直出現顯示為零,請將該行去掉
dat?=?test;
nop_();
CS?=?1;????????//釋放ADC0832
DATO?=?1;
Clk?=?1;
return?dat;
}
void?init() //定時器初始化函數
{
TMOD=0x01; //定時器工作方式
? TL0=0xb0;
? TH0=0x3c; //賦初值50ms
? EA=1; //打開中斷總開關
ET0=1; //打開定時器0中斷允許開關
? TR0=1; //打開定時器0定時開關
}
void?AlcoholCalibration(void)?????//酒精初始化校準函數
{
sum?=?0;
for(m=0;m<50;m++) //讀50次AD值
{
sum?=?adc0832(0)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-04-12?19:12??1-源程序\
?????文件????????1303??2014-03-04?13:08??1-源程序\display.bak
?????文件????????1338??2019-10-11?19:21??1-源程序\display.h
?????文件????????3057??2013-12-07?15:42??1-源程序\eeprom52.h
?????文件????????5892??2019-10-11?19:59??1-源程序\yanwu
?????文件???????13351??2019-10-11?19:59??1-源程序\yanwu.LST
?????文件???????25418??2019-10-11?19:59??1-源程序\yanwu.M51
?????文件????????8697??2019-10-11?19:59??1-源程序\yanwu.OBJ
?????文件????????2087??2014-03-06?18:11??1-源程序\yanwu.Uv2.bak
?????文件????????2683??2014-03-04?13:37??1-源程序\yanwu.bak
?????文件?????????970??2019-10-11?19:59??1-源程序\yanwu.build_log.htm
?????文件????????6959??2019-10-11?19:59??1-源程序\yanwu.c
?????文件????????3827??2019-10-11?19:59??1-源程序\yanwu.hex
?????文件??????????27??2019-10-11?19:59??1-源程序\yanwu.lnp
?????文件?????????995??2014-04-19?09:02??1-源程序\yanwu.opt.bak
?????文件?????????173??2017-10-28?13:54??1-源程序\yanwu.plg
?????文件??????139936??2019-11-24?22:15??1-源程序\yanwu.uvgui.11734
?????文件????????5562??2019-07-16?22:17??1-源程序\yanwu.uvopt
?????文件???????13722??2019-07-16?22:17??1-源程序\yanwu.uvproj
?????文件????????1004??2014-03-06?18:11??1-源程序\yanwu_Opt.Bak
?????文件????????1649??2014-03-04?13:16??1-源程序\yanwu_Uv2.Bak
?????文件???????59131??2017-05-20?01:35??1-源程序\yanwu_uvopt.bak
評論
共有 條評論