资源简介
本产品采用单片机+最小系统+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
评论
共有 条评论