600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基于51单片机的酒精浓度检测量仪proteus仿真程序原理图设计数码管液晶LCD1602显示

基于51单片机的酒精浓度检测量仪proteus仿真程序原理图设计数码管液晶LCD1602显示

时间:2020-12-09 02:49:08

相关推荐

基于51单片机的酒精浓度检测量仪proteus仿真程序原理图设计数码管液晶LCD1602显示

硬件设计

(末尾附文件)

仿真文件中的酒精传感器均是用滑动变阻器来模拟

基于数码管显示:

基于LCD1602显示:

程序设计

//程序头函数#include <reg52.h>//显示函数#include <display.h>#include <intrins.h>#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; //蜂鸣器//ADC0809sbit 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方式1TL0=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<WARNING&&set==0)//如果实际的酒精值小于报警值且在正常显示状态下{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++;//设置的变量加1flag=0;//绿灯闪TR0=0;//关定时器0write_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++;//报警值加1if(WARNING>=255) //如果报警值大于等于255WARNING=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--; //报警值减1if(WARNING<=0)//如果报警值小于等于0WARNING=255;//那么报警值为255write_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(); //保存数据}}

.

文件仅供参考:

链接:/s/1Gi9sVhC4MtSSqMjhYM5CKg

提取码:i5tt

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。