目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于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的分享