第五届蓝桥杯——模拟智能灌溉系统

第五届蓝桥杯的题用到了数码管,蜂鸣器,继电器,eeprom,ad转化,ds1302,独立按键。

第五届蓝桥杯——模拟智能灌溉系统_第1张图片

#include
#include "iic.h"
#include "ds1302.h"
#include "intrins.h"
#define uchar unsigned char 
sbit beep=P0^6;
sbit jidianqi=P0^4;
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
uchar shidu,t=50;
uchar w=0;
bit h=1,b=0;
uchar code tabe[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar write[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90};
uchar read[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8f,0x91};
uchar time[]={0x30,0x20,0x08,0x07,0x07,0x07,0x18};
void delay(uchar x)
{
while(x--);
}


void eeprom_write(uchar add,uchar dat)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
somenop;
}
uchar eeprom_read(uchar add)
{
uchar temp;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
     IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
temp=IIC_RecByte();
IIC_Ack(0);
IIC_Stop();
return temp;
}
void cls_jidianqi(uchar x)
{
  jidianqi=x;
P2=(P2&0x1f)|0xa0;
P2&=0X1F;
}
void cls_led(uchar x)
{
P2=(P2&0x1f)|0x80;
P0=x;
P2&=0X1F;
}
void cls_beep(uchar x)
{
beep=x;
P2=(P2&0x1f)|0xa0;
P2&=0X1F;
}
void weixuan(uchar x)
{
P2=(P2&0x1f)|0xc0;
P0=x;
P2&=0X1F;
}
void duanxuan(uchar x)
{
P2=(P2&0x1f)|0xe0;
P0=tabe[x];
P2&=0X1F;
}
void diaplay1(uchar t)
{
   weixuan(0x08);
   duanxuan(t%10);


   weixuan(0x04);
   duanxuan(t/10);
}
void  AD_Init()
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x03);
IIC_WaitAck();
somenop;
}
uchar AD_read()
{
uchar temp;
  IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
temp=IIC_RecByte();
return temp;
somenop;
}
void Ds1302_Init()
{
uchar i;
Ds1302_Single_Byte_Write(0x8e,0x00);
for(i=0;i<7;i++)
{
Ds1302_Single_Byte_Write(write[i],time[i]);
}
Ds1302_Single_Byte_Write(0x8e,0x80);
}
void Ds1302_Read()
{
uchar i;
for(i=0;i<7;i++)
{
time[i]=Ds1302_Single_Byte_Read(read[i]);
}
}
void display1(uchar x)
{
weixuan(0x80);
   duanxuan(x%10);
P0=0XFF;
delay(200);


   weixuan(0x40);
   duanxuan(x/10);
    P0=0XFF;
delay(200);


   weixuan(0x10);
   duanxuan(time[1]&0x0f);
    P0=0XFF;
delay(200);


   weixuan(0x08);
   duanxuan(time[1]/10);
    P0=0XFF;
delay(200);


   weixuan(0x04);
   duanxuan(10);
    P0=0XFF;
delay(200);


   weixuan(0x02);
   duanxuan(time[2]&0x0f);
    P0=0XFF;
delay(200);
   weixuan(0x01);
   duanxuan(time[2]/10);
    P0=0XFF;
delay(200);
}
void display2(uchar x)
{
weixuan(0x80);
   duanxuan(x%10);
P0=0XFF;
delay(200);


   weixuan(0x40);
   duanxuan(x/10);
    P0=0XFF;
delay(200);

weixuan(0x01);
duanxuan(10);
P0=0XFF;
delay(200);


weixuan(0x02);
duanxuan(10);
P0=0XFF;
delay(200);
}
void zidong()
{
cls_led(0xfe);
if(shidu>=50)
{
cls_jidianqi(0);
}
if(shidu<50)
{
  cls_jidianqi(1);
}
}
void shoudong()
{
  bit jingbao=0,a=1;
  cls_led(0xfd);
  if(shidu  {
  jingbao=1;
a=0;
  }
//  if(S6==0)
//  {
//   while(S6==0);
// jingbao=~jingbao;
//  }
// cls_beep(jingbao);
 if(S5==0)
{
while(S5==0);
cls_jidianqi(1);
}
  if(S4==0)
 {
while(S4==0);
cls_jidianqi(0);
 }
  


}
void key()
{
if(S7==0)
{
while(S7==0);
 h=~h; 
}
}
void moshi()
{
if(h==1)
{
zidong();
if(w==0)
  {display1(shidu);}
if(w==1)
{
display2(t);
}
if(S6==0)
{
while(S6==0);
   w++;
if(w==2)
w=0;
}
if(S5==0)
{
while(S5==0);
t++;
}
if(S4==0)
{
while(S4==0);
t--;
}

}
if(h==0)
{
shoudong();
display1(shidu);
}
}
void main()
{
t=eeprom_read(0x00);
AD_Init();
cls_led(0XFF);
cls_beep(0);
Ds1302_Init();
while(1)
{
key();
Ds1302_Read();
shidu=AD_read();
shidu=shidu*100/255;
moshi();
eeprom_write(0x00,t);
}
}

你可能感兴趣的:(蓝桥杯)