#include <reg52.h>
//显示函数
#include <display.h>
//宏定义
#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<z;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<WARNING&&set==0)
{
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;
LED_R=1; FENG=1; san=1;
}
if(flag==1)
{
LED_G=1; LED_R=0; FENG=0; san=0;
}
}
if(count==20)
{
count=0;
if(flag==0)
{
LED_G=1; LED_R=1; FENG=1; san=1;
}
if(flag==1)
{
LED_G=1; LED_R=1; FENG=1;
san=0;
}
}
}
//宏定义
#define uint unsigned int
#define uchar unsigned char
//LCD管脚声明
sbit LCDRS = P2^3;
sbit LCDEN= P2^4;
//初始画时显示的内容
uchar code Init1[]=" ALCOHOL: 000 "; uchar code Init2[]=" WARNING: 000 ";
//LCD延时
void LCDdelay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
//写命令
void write_com(uchar com)
{
LCDRS=0;
P0=com;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//写数据
void write_data(uchar date)
{
LCDRS=1;
P0=date;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//1602初始化
void Init1602()
{
uchar i=0;
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示无光标无光标闪烁
write_com(0x06);//当读或写一个字符是指针后一一位 write_com(0x01);//清屏
write_com(0x80);//设置位置
for(i=0;i<16;i++)
{
write_data(Init1[i]);
}
write_com(0x80+40);//设置位置
for(i=0;i<12;i++)
{
write_data(Init2[i]);
}
}
void Display_1602(uchar NOW_NUM,uchar SET_NUM) {
write_com(0x80+11);
write_data('0'+NOW_NUM/100);
write_data('0'+NOW_NUM/10%10);
write_data('0'+NOW_NUM%10);
write_com(0x80+0x40+11);
write_data('0'+SET_NUM/100);
write_data('0'+SET_NUM/10%10);
write_data('0'+SET_NUM%10);
}。