酒精传感器仿真中没有,其实就是传感器检测时相应的电阻值会变化,用滑动电位器代替就ok
仿真原理图如下
单片机源程序如下:
//程序头函数
#include //显示函数 #include #include #include "eeprom52.h" #include "temp.h" //宏定义 #define uint unsigned int #define uchar unsigned char #define Data_ADC0809 P1 //管脚声明 sbit P34=P3^4;//温度 sbit LED_R= P2^2; //红指示灯 sbit LED_G= P2^0; //绿色指示灯 sbit FENG = P2^5; //蜂鸣器 //ADC0809 sbit ST=P3^3; sbit EOC=P3^6; sbit OE=P3^2; //按键 sbit Key1=P2^6; //设置按键 sbit Key2=P2^7; //加 sbit Key3=P3^7; //减 bit bdata flag;//指示灯和蜂鸣器闪烁报警标志位 uchar set; //设置标志位 //函数声明 extern uchar ADC0809(); extern void Key(); //酒精含量变量 unsigned int temp=0; unsigned int 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(); //保存数据 } } //初始化函数 void init() { TMOD=0x01; //定时器0方式1 TL0=0xb0; TH0=0x3c; TL1=65000/256; TH1=65000/256; //赋初值 EA=1; //开总中断 ET0=1; //允许定时器0中断 TR0=1; //定时器0开 } //主函数 void main() { Init1602(); //1602初始化 init_eeprom(); //开始初始化保存的数据 init(); //初始化函数 while(1)//主循环 { if(set==0) //如果没有按下设置(默认set是0,就是正常显示状态) { temp=ADC0809(); //读取酒精值 Display_1602(temp,WARNING,ReadTemperature()); //显示酒精值 } if(temp flag=0; //执行下面flag=0的(主要就是绿灯闪,关蜂鸣器和继电器) } else if(temp>WARNING&&set==0) //如果实际的酒精值大于报警值且在正常显示状态下 { flag=1; //执行下面flag=1的(主要就是红灯闪,开蜂鸣器和继电器) } Key();//按键扫描 } } //ADC0809读取信息 uchar ADC0809() { uchar temp_=0x00; //初始化高阻太 OE=0; //转化初始化 ST=0; //开始转换 ST=1; ST=0; //外部中断等待AD转换结束 while(EOC==0) //读取转换的AD值 OE=1; temp_=Data_ADC0809; OE=0; return temp_; } //按键函数 void Key() { if(Key1==0) //如果设置按键按下 { while(Key1==0);//等待按键释放 FENG=0; //蜂鸣器响 set++; //设置的变量加1 flag=0; //绿灯闪 TR0=0; //关定时器0 write_com(0x0f);//打开显示 无光标 光标闪烁 write_com(0x80+15);//位置 // write_com(0x06);//当读或写一个字符是指针后一一位 FENG=1; //蜂鸣器关 } if(set>=2) //又按了下设置 { set=0; //正常显示状态 // write_com(0x38);//屏幕初始化 write_com(0x0c);//打开显示 无光标 无光标闪烁 FENG=1; //蜂鸣器关 flag=1; //红灯闪 TR0=1; //定时器0开 } if(Key2==0&&set!=0) //在设置的状态下按下加 { while(Key2==0); //等待按键释放 FENG=0; //蜂鸣器响 WARNING++; //报警值加1 if(WARNING>=255) //如果报警值大于等于255 WARNING=0; //报警值归零 write_com(0x80+13); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); //显示报警值 //write_com(0x80+0x40+13);//调整位置 FENG=1; //蜂鸣器关 write_eeprom(); //保存数据 } if(Key3==0&&set!=0) //在设置的状态下按下减 { while(Key3==0); //等待按键释放 FENG=0; //蜂鸣器响 WARNING--; //报警值减1 if(WARNING<=0) //如果报警值小于等于0 WARNING=255; //那么报警值为255 write_com(0x80+13); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); //write_com(0x80+0x40+13);//调整位置 FENG=1; //蜂鸣器关 write_eeprom(); //保存数据 } } void time1_int(void) interrupt 1 //定时器中断0 { uchar count; TL0=0xb0; TH0=0x3c; //重赋初值50ms count++; ///溢出值加1 if(count==10) //如果时间到半秒 { if(flag==0) //如果flag为0 { LED_G=0; //绿灯亮 LED_R=1; //红灯灭 FENG=1; //蜂鸣器关
上一篇:51单片机多点18b20温度测量系统
下一篇:基于单片机+ADC0809的数字电流表仿真+源程序+设计报告
推荐阅读最新更新时间:2024-11-05 21:37
设计资源 培训 开发板 精华推荐
- MC78M05ACDTG 5V 电流调节器的典型应用
- 具有 8.5V 欠压锁定阈值的 LTC3119MPFE 12V 至 12V、1MHz 线路调节器的典型应用电路
- 3.3V 直流转直流单输出医疗电源
- TRK-USB-MPC5602P,用于MC9S08JM60 S08微控制器的StarterTRAK USB开发系统
- 使用 Analog Devices 的 LTC1261CS8 的参考设计
- 使用 NXP Semiconductors 的 87C751 的参考设计
- 基于lora的果园环境检测系统设计
- LT1584IT-3.3 3.3V/7A 低压差稳压器的典型应用
- 建筑施工监测与安防系统
- USB示波器+信号发生器+USB存储 三合一