仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【U05】
1.? 简介
? 本文提出了一种基于51单片机的酒精检测系统。单片机实时通过ADC0832转换芯片采集酒精传感器的酒精的浓度,通过单片机的数据转换处理后在液晶屏上显示,当测量酒精浓度大于设置值时,蜂鸣器发出报警,酒精浓度报警值可以通过按键进行设置。
2.? 主要功能
a.通过LCD1602显示当前酒精浓度、报警阈值。
b.通过按键设置酒精浓度报警阈值。
3.? 源程序(Keil5)
本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。
#include <reg51.h>//包含51单片机寄存器的头文件
#include <1602.h>//调用1602.h文件
#include <intrins.h>//包含_nop_函数定义的头文件
#define uchar unsigned char
#define uint unsigned int
//ADC0832引脚定义
sbit CS = P1^0;//片选使能位,定义为P1^0引脚
sbit CLK = P1^1;//时钟脉冲输入位,定义为P1^1引脚
sbit DIO = P1^2;//数据信号输入/输出,并联使用。定义为P1^2引脚
//有害气体含量变量
uchar temp; //用于读取ADC数据
uchar yushe_yanwu= 100; //酒精预设值
//按钮模式
uchar mode=0;
//管脚声明
sbit led_yanwu= P2^3; //酒精报警灯
sbit baojing= P2^4; //蜂鸣器接口
//按键
sbit key1=P2^0; //设置键
sbit key2=P2^1; //加按键
sbit key3=P2^2; //减按键
//1毫秒延时程序(不精确)
void delayms(uint ms)
{
uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
//ADC0832函数
uchar AD()
{
uchar i,dat1 = 0,dat2 = 0;
//第一个周期:转换开始
CS = 0;
CLK = 0;
DIO = 1;
_nop_(); _nop_();//短暂定时2us——也可以写成delay2us();,那么程序就要有delay2us();的定义了。
CLK = 1; _nop_(); _nop_();
//第二个周期:选择选择单通道还是双通道 DIO=0双通道差分 或 DIO=1单通道
CLK = 0; DIO=1; _nop_();_nop_();
CLK = 1; _nop_();_nop_();
//第三个周期:DIO选择CH1-->如果DIO=0 选择CH0
CLK = 0;DIO = 0; _nop_();_nop_();
CLK = 1;DIO = 1; _nop_();_nop_();
//等待
CLK = 0; DIO = 1; _nop_();_nop_();
//4-11,共8个下降沿读取数据(MSB->LSB) 先进来的为最高位,后进来为最低位
for(i=0;i<8;i++)
{
CLK = 1; _nop_();_nop_();
CLK = 0; _nop_();_nop_();
dat1 = dat1<<1|DIO;
}
//11-18 共8个下降沿读取数据(LSB->MSB) 先进来的为最低位,后进来为最高位
for(i=0;i<8;i++)
{
dat2 = dat2|((uchar)(DIO)<<i);
CLK = 1; _nop_();_nop_();
CLK = 0; _nop_();_nop_();
}
4.? 仿真proteus8.6
? 本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
初始界面:
超限报警:
5.? 设计报告
设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
6.? 资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。
7.? 资料获取链接
百度网盘下载链接:【U05】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集
1415