当前位置: 首页 > article >正文

基于单片机的四位数码管检测有毒气体

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,通过滑动变阻器连接ADC0832数模转换器模拟有毒气体浓度检测,通过数码管实时显示,如果超过阈值,则蜂鸣器报警,灯光亮起。按键调整阈值

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程

#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
#define dula P0		//段选信号的锁存器控制

sbit wei1=P3^0;//位选定义
sbit wei2=P3^1;
sbit wei3=P3^2;
sbit wei4=P3^3;
sbit CS=P1^0;                 //adc0832引脚
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit key1 = P1^4;
sbit key2 = P1^5;
sbit beep = P1^6;
sbit led = P1^3;

static int nd[4];
static int ndyz=100;
 
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极段码表
int u;

void Nixie();//数码管显示函数

void delay(uint count)      //delay
{
  uint i;
  while(count)
  {
    i=200;
    while(i>0)
    i--;
    count--;
  }
}


uchar get_AD_Res()            //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;_nop_();
	CLK=1;_nop_();
	
	CLK=0;DIO=1;_nop_(); 
	CLK=1;_nop_();
	
	CLK=0;DIO=0;_nop_();
	CLK=1;_nop_();
	
	CLK=0;DIO=1;_nop_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;_nop_();
		CLK=0;_nop_();
		data1=(data1<<1)|(uchar)DIO; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO<<i;
		CLK=1;_nop_();
		CLK=0;_nop_();
	}
	CS=1;
	
	return(data1 == data2)?data1:0;
}

void main()
{
	beep = 1;
	led = 0;
	while(1)
	{	
		u = get_AD_Res();
		nd[0]=u/100;
		nd[1]=u/10%10;
		nd[2]=u%10;
		Nixie();
		if(!key1)
		{
			ndyz++;
			while(!key1);
		}
		if(!key2)
		{
			ndyz--;
			while(!key2);
		}
		if(u > ndyz)
		{
			beep = 0;
			led = 1;
		}
		else
		{
			beep = 1;
			led = 0;
		}
	}		
}
void Nixie()
{

	
	 wei1=0;		//显示千位
   wei2=1;
   wei3=1;
   wei4=1;
   P0=table[nd[0]];
   delay(2);

   wei1=1;		//显示百位
   wei2=0;
   wei3=1;
   wei4=1;
   P0=table[nd[1]];
   delay(2);

   wei1=1;		//显示十位
   wei2=1;
   wei3=0;
   wei4=1;
   P0=table[nd[2]];
   delay(2);
   P0=0x00;
}
 

四、实现现象

具体动态效果看B站演示视频:

基于单片机的四位数码管检测有毒气体_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):
链接: https://pan.baidu.com/s/1aO8Y-MuUOl5ZEZHYbRA8PA?pwd=e1cc 提取码: e1cc 
--来自百度网盘超级会员v4的分享


http://www.kler.cn/a/420591.html

相关文章:

  • 用三维模型的顶点法向量计算法线贴图
  • Hadoop分布式文件系统(二)
  • 模拟实现单链表 —— SingleLinkedList
  • 基于C#+SQLite开发数据库应用的示例
  • 【Docker】Docker 容器日志过大导致磁盘爆满
  • Java基于SpringBoot+Vue的IT技术交流和分享平台(附源码+lw+部署)
  • 基于Java Springboot个人财务APP且微信小程序
  • 【Spring源码核心篇-06】spring中事务的底层实现与执行流程
  • vue.js学习(day 13)
  • C基础练习题
  • Ubuntu22.04上kdump和crash的使用
  • D83【python 接口自动化学习】- pytest基础用法
  • 一键生成数据库对应的所有DataX的json文件
  • mvc基础及搭建一个静态网站
  • Ubantu系统docker运行成功拉取失败【成功解决】
  • GateWay使用手册
  • 清理Linux/CentOS7根目录的思路
  • Vue3 脚手架扩展
  • Proteus8.17下载安装教程
  • MySQL安装部署
  • IP划分(笔记)
  • 对于Oracle来说,土地管理是非核心域吗
  • 【机器学习】机器学习的基本分类-监督学习-逻辑回归-对数似然损失函数(Log-Likelihood Loss Function)
  • Apache-HertzBeat开源实时监控系统存在默认口令漏洞
  • mysql一个事务最少几次IO操作
  • ESP32开发板在micropython里直接用requests向web服务器发送请求:ESP32S3开发板通过fastapi中转成功连接星河大模型