设计要求:
(1)数据采集系统以单片机为控制核心,外围电路带有LCD显示以及键盘响应电路,无需要其他计算机,用户就可以与之进行交互工作,完成数据的采集、存储、计算、分析等过程。
(2)系统具有低功耗、小型化、高性价比等特点。
(3)从便携式的角度出发,系统成功使用了液晶显示器以及小键盘。由单片机系统控制键盘和LCD显示来实现人机交互操作,界面友好。
include <reg52.h>
#include <intrins.h>
//显示函数
#include <display.h>
#include <4004.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//管脚声明
//sbit LED_R= P2^2; //红指示灯
//sbit LED_G= P2^0; //绿色指示灯
//sbit FENG = P2^5; //蜂鸣器
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^1;
sbit OE=P3^2;
//按键
sbit Key1=P2^5; //设置按键
sbit Key2=P2^4; //加
sbit Key3=P2^3; //减
sbit Key4=P2^2;
bit bdata flag;//指示灯和蜂鸣器闪烁报警标志位
uchar set; //设置标志位
//函数声明
extern uchar ADC0809();
extern void Key();
//酒精含量变量
uchar temp=0;
uchar WARNING=25; // 初始报警值
void delay_2S(void) //4S
{
uchar a;
uchar b,c;
for(c=90;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
//初始化函数
/*void init()
{
TMOD=0x01; //定时器0方式1
TL0=0xb0;
TH0=0x3c; //赋初值
EA=1; //开总中断
ET0=1; //允许定时器0中断
TR0=1; //定时器0开
} */
//主函数
void main()
{
uchar p=0;
uint sum;
Init1602(); //1602初始化
// init(); //初始化函数
while(1)//主循环
{
for(p=0;p<20;p++)
{
temp=ADC0809(); //读取酒精值
sum=sum+temp;
}
temp=sum/20;
sum=0;
if(set==0) //如果没有按下设置(默认set是0,就是正常显示状态)
Display_1602(temp,WARNING,Mode); //显示酒精值
//开始语音播报
if(set==0)
{
//现在浓度
playbit=1;
playcout=1;
playsound();
delay_2S();
delay_2S();
DDstop();
//第一位
playbit=1;
playcout=(temp/100)+2;
playsound();
delay_2S();
DDstop();
//第二位
playbit=1;
playcout=(temp%100/10)+2;
playsound();
delay_2S();
DDstop();
//第三位
playbit=1;
playcout=(temp%100%10)+2;
playsound();
delay_2S();
DDstop();
/* //米
playbit=1;
playcout=12;
playsound();
delay_2S();
DDstop(); */
if(temp<WARNING&&set==0) //如果实际的酒精值小于报警值且在正常显示状态下
{
// flag=0; //执行下面flag=0的(主要就是绿灯闪,关蜂鸣器和继电器)
//浓度正常
playbit=1;
playcout=12;
playsound();
delay_2S();
delay_2S();
DDstop();
}
else if(temp>WARNING&&set==0) //如果实际的酒精值大于报警值且在正常显示状态下
{
// flag=1; //执行下面flag=1的(主要就是红灯闪,开蜂鸣器和继电器)
//浓度超标
playbit=1;
playcout=13;
playsound();
delay_2S();
delay_2S();
DDstop();
}
delay_2S();
//录音键按下
if(Key4==0)
{
Mode=1;
while(Mode!=14)
{
//按键判断
if(Key4==0)
{
Mode++;
Display_1602(0,0,Mode);
while(Key4==0);
//开始录音
playbit=0;
recbit=1;
// playcout=Mode-1;
资料借鉴于此 纷传
阅读全文