酒精测试仪程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
//显示函数
#include
//宏定义
#define uint unsigned int
#define uchar unsigned char #define Data_ADC0809 P1
//管脚声明
sbit LED_R= P2^2;
sbit LED_G= P2^1;
sbit FENG = P2^5;
sbit san=P3^4;
//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();
/*
void delay(uint z)
{
uint i,j;
for(i=0;i for(j=0;j<121;j++); } */ //酒精含量变量 uchar temp=0; //指示灯变量 uchar WARNING=25; void init() { TMOD=0x01; TL0=0xb0; TH0=0x3c; EA=1; ET0=1; TR0=1; } void main() { Init1602(); init(); while(1) { temp=ADC0809(); if(set==0) Display_1602(temp,WARNING); if(temp { flag=0; } else if(temp>WARNING&&set==0) { 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++; flag=0; san=1; TR0=0; } if(set==1) { write_com(0x38);//屏幕初始化 write_com(0x80+0x40+13);//位置 write_com(0x0f);//打开显示无光标光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 FENG=1; } else if(set>=2) { set=0; write_com(0x38);//屏幕初始化 write_com(0x0c);//打开显示无光标无光标闪烁 FENG=1; flag=1; TR0=1; } if(Key2==0&&set!=0) { while(Key2==0); FENG=0; WARNING++; if(WARNING>=255) WARNING=0; write_com(0x80+0x40+11); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); write_com(0x80+0x40+13);//位置 FENG=1; } if(Key3==0&&set!=0) { while(Key3==0); FENG=0; WARNING--; if(WARNING<=0) WARNING=255; write_com(0x80+0x40+11); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); write_com(0x80+0x40+13);//位置 FENG=1; } } void time1_int(void) interrupt 1 { uchar count; TL0=0xb0; TH0=0x3c; count++; if(count==10) { if(flag==0) { LED_G=0;