第四届蓝桥杯单片机省赛 自动灌溉系统
新手、所用驱动为大赛提供驱动
#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--);
}