第四届蓝桥杯单片机省赛 自动灌溉系统

第四届蓝桥杯单片机省赛 自动灌溉系统

新手、所用驱动为大赛提供驱动

#include<stc15f2k60s2.h>
#include "intrins.h"

#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}    
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
#define uchar unsigned char
#define uint unsigned int

//总线引脚定义
sbit SDA2= P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */
sbit SCK=P1^7;        
sbit SDA1=P2^3;        
sbit RST = P1^3;   // DS1302复位

#ifndef _IIC_H
#define _IIC_H

//函数声明
void IIC_Start(void);
void IIC_Stop(void);  
void IIC_Ack(bit ackbit);
void IIC_SendByte(unsigned char byt);
bit IIC_WaitAck(void);  
unsigned char IIC_RecByte(void);


#endif

#ifndef __DS1302_H
#define __DS1302_H

void Write_Ds1302_Byte(unsigned  char temp);
void Write_Ds1302( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302 ( unsigned char address );

#endif


 

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uchar shijian[]={0,30,8,0,0,0,0};//s,m,h,
uchar yi,er,san,si,wu,liu,qi,ba;
uchar shidu,fazhi;
bit s6=0,jia=0,jian=0,status=0,kai=1,jidianqi=0;     //status切换手动自动



void allinit(void);
void delayms(uint ms);
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
void keyscan(void);
void keyscan16(void);
uchar AD_read(uchar add);
uchar EEPROM_read(uchar add);
void EEPROM_write(uchar add,uchar dat);
void DS_init(void);
void DS_get(void);


void main(void)
{    
    allinit();
    DS_init();
    P2=0x80;
    P0=0xfe;    
    yi=0;er=8;san=10;si=3;wu=0;liu=10;qi=0;ba=0;

//    EEPROM_write(0x10,50);      //运行一次后可注释
//    delayms(5);
    fazhi=EEPROM_read(0x10);

    while(1)
    {  
           DS_get();
        shidu=AD_read(0x03);
    
    if(status==0)
    {
    
        if(shidu<fazhi)
        {
          P2=0xa0;
          P0=0x10;                    //打开
        }
        else
        {
          P2=0xa0;
          P0=0x00;        //继电器关闭
        }

        if(s6==1)
        {
            if(jia==1)
            {
              jia=0;
              fazhi=fazhi+1;
            }
            if(jian==1)
            {
            jian=0;
            fazhi=fazhi-1;
            }
          yi=10;er=10;san=11;si=11;wu=11;liu=11;qi=fazhi/10;ba=fazhi%10;
        }
        else if(s6==0)
        {
            yi=shijian[2]/10;er=shijian[2]%10;san=10;
            si=shijian[1]/10;wu=shijian[1]%10;liu=11;
            qi=shidu/10;ba=shidu%10;    
        }
    
    }


    else if(status==1)
    {

        if((shidu<fazhi)&&(kai==0))
        {
          if(jidianqi==1)
          {
              P2=0xa0;P0=0x10;
          }
          else if(jidianqi==0)
          {
              P2=0xa0;P0=0x00;
          }
        }

        if((shidu<fazhi)&&(kai==1))
        {
            if(jidianqi==1)
            {
                P2=0xa0;
                P0=0x50;
            }
            else if(jidianqi==00)
            {
                P2=0xa0;
                P0=0x40;
            }
        }
        else if(shidu>fazhi)
        {
            if(jidianqi==1)
            {
            P2=0xa0;
            P0=0x10;
            }
            else if(jidianqi==0)
            {
                P2=0xa0;P0=0x00;
            }
        }

        yi=shijian[2]/10;er=shijian[2]%10;san=10;
        si=shijian[1]/10;wu=shijian[1]%10;liu=11;
        qi=shidu/10;ba=shidu%10;    
    }



//        EEPROM_write(0x10,220);
//        delayms(5);
//        fazhi=EEPROM_read(0x10);
//        liu=fazhi/100;qi=fazhi%100/10;ba=fazhi%10;


//        shidu=AD_read(0x03);//RB2-->0x03
//        liu=shidu/100;qi=shidu%100/10;ba=shidu%10;






       display1(yi,er);
       display2(san,si);
       display3(wu,liu);
       display4(qi,ba);
       keyscan();

    }
}

    
void keyscan(void)
{
    if(P30==0)
    {        
        delayms(5);
        if(P30==0)
        {
            if(status==0)
            {
                status=1;
                P2=0x80;
                P0=0xFD;

            }
         else if(status==1)
         {
             status=0;
            P2=0x80;
            P0=0xfe;
         }
        }
       while(!P30);
    }

     if(P31==0)
    {        
        delayms(5);
        if(P31==0)
        {    
        
        
        if(status==0)

        {
            if(s6==0)
                {
                    s6=1;
                }
            else if(s6==1)
                {
                 s6=0;
                 EEPROM_write(0x10,fazhi);;
                }
              else if(status==1)
              {
              kai=~kai;
              }
            }

        
        }
       while(!P31);
    }
     if(P32==0)
    {        
        delayms(5);
        if(P32==0)
        {
        if(status==0)
        {
            jia=1;
        }
        else if(status==1)
        {
            jidianqi=1;
        }
        }
       while(!P32);
    }
     if(P33==0)
    {        
        delayms(5);
        if(P33==0)
        {
            if(status==0)
            {
            jian=1;
            }
            if(status==1)
            {
                jidianqi=0;
            }            

        }
       while(!P33) ;
    }
}



void allinit(void)
{
    P2=0xa0;       //关闭蜂鸣器继电器
    P0=0x00;

    P2=0x80;         //关闭LED灯
    P0=0xff;

    P2=0xc0;   //打开数码管位选
    P0=0xff;
    P2=0xff;
    P0=0xff;   //关闭所有数码管
}



void display1(uchar yi,uchar er)
{
    P2=0xc0;    //位选
    P0=0x01;     //选择第一个数码管
    P2=0xff;    //段选
    P0=tab[yi];
    delayms(1);

    P2=0xc0;
    P0=0x02;    
    P2=0xff;    
    P0=tab[er];
    delayms(1);
}


 void display2(uchar san,uchar si)
{
    P2=0xc0;    
    P0=0x04;    
    P2=0xff;    
    P0=tab[san];
    delayms(1);

    P2=0xc0;
    P0=0x08;    
    P2=0xff;    
    P0=tab[si];
    delayms(1);
}

void display3(uchar wu,uchar liu)
{
    P2=0xc0;    
    P0=0x10;    
    P2=0xff;    
    P0=tab[wu];
    delayms(1);

    P2=0xc0;
    P0=0x20;    
    P2=0xff;    
    P0=tab[liu];
    delayms(1);
}


void display4(uchar qi,uchar ba)
{
    P2=0xc0;    
    P0=0x40;    
    P2=0xff;    
    P0=tab[qi];
    delayms(1);

    P2=0xc0;
    P0=0x80;    
    P2=0xff;    
    P0=tab[ba];
    delayms(1);
}


void delayms(uint ms)
{
    uint i,j;
    for(i=ms;i>0;i--)
    for(j=845;j>0;j--);

}

猜你喜欢

转载自blog.csdn.net/weixin_41215479/article/details/80888977