蓝桥杯单片机智能灌溉系统Proteus仿真+源程序

这是师傅叫我们做的蓝桥杯的题,用的是Proteus8和keil5;
单片机进阶
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序如下:

#include "supend.h"
#include "Nixie_tube.h"
#include "pcf8591.h"
#include "ds1320.h"
#include "key_bord.h"
#include "at24c02.h"
void Time_out();
void Decide();
void LED_A_M() ;
//------------------------------------------------------------------------------------------------------
u8 time[8];
//临时存储,时间,湿度值等 //手动/自动切换标志位
u8 V;
//用于存储湿度值
bit K7,flag,K6,K4,K5,H,K;
//标志位,H自动下蜂鸣器叫
bit set=0,Z;
//set自动和手动切换,Z标志位
u8 X=50,Y;
//X存储自动设定下的湿度值,Y蜂鸣器和继电器
//---------------------------------------定时器0中断服务函数---------------------------------------------
void Service1_function() interrupt 1 {
	TR0=0;
	TH0=(65536-500)/256;
	TL0=(65536-500)%256;
	//数码管显示函数
	keyscan();
	//按键扫描函数
	switch(Trg) //选择第几页 {
		case 0x01: {
			K7=~K7;
		}
		;
		break;
		//S7
		case 0x02: {
			K6=~K6;
		}
		;
		break;
		//S6
		case 0x04: {
			K5=~K5;
			K=1;
		}
		;
		break;
		//S5
		case 0x08: {
			K4=~K4;
			K=0;
		}
		;
		break;
		//S4
	}
	V=Pcf8591ReadByte();
	//湿度测量函数
	V=(V*100)/254;
	//湿度处理函数
	Time_out();
	//时间/湿度处理
	Decide();
	//
	display();
	LED_A_M() ;
	TR0=1;
}
//---------------------------------------时间/湿度处理---------------------------------------------------------
void Time_out() {
	if(flag==0) {
		WriteSet1302(0x82,0x30);
		//分
		WriteSet1302(0x84,0x08);
		//时
		X=EEP_ReadChar(0x01);
		flag=1;
	}
	if(set==0) {
		time[0]=ReadSet1302(0x85)>>4;
		time[1]=ReadSet1302(0x85)&0x0f;
		time[2]=10;
		time[3]=ReadSet1302(0x83)>>4;
		time[4]=ReadSet1302(0x83)&0x0f;
		time[5]=11;
		time[6]=V/10;
		time[7]=V%10;
	}
	if(set==1) {
		time[0]=10;
		time[1]=10;
		time[2]=11;
		time[3]=11;
		time[4]=11;
		time[5]=11;
		time[6]=X/10;
		time[7]=X%10;
	}
}
//----------------------------------------判断蜂鸣器开关/存储X到at24c02-------------------------------------------------
void Decide() {
	if(K7==0) {
		if(K6==1) set=1;
		if(K5==1) {
			K5=0;
			X++;
			Z=1;
		}
		if(K4==1) {
			K4=0;
			X--;
			Z=1;
		}
		if(K6==0) set=0;
		if(Z==1) {
			Z=0;
			EEP_WriteChar(0x01,X);
		}
	}
	if(V>=X) {
		H=0;
	}
	if(V<X) {
		H=1;
	}
}
//--------------------------------------led闪亮/继电器-------------------------------------------------------------------------
void LED_A_M() //手动/自动模式切换灯函数 {
	if(K7==0) //自动 {
		LED=0xfe;
		if(H==1) BUZZER=0x50;
		if(H==0) BUZZER=0x00;
	}
	if(K7==1) //手动 {
		LED=0xfd;
		if(K6==1)Y=Y|0x40;
		if(K6==0)Y=Y&0xbf;
		if(K==1) {
			Y=Y|0x10;
		}
		if(K==0) {
			Y=Y&0xef;
		}
		BUZZER=Y;
	}
}
仿真好像有点问题,需要自己debug下

资源标识:220111单片机智能灌溉系统

创世纪

单片机学习,电子制作DIY学习与分享,各种新鲜的,有趣的,好玩的,一起来吧!机器人、无人机、树莓派/Raspberry Pi、arduino、极客、创客等

暂无评论

相关推荐

STM32F407调试错误之:串口收发

WIFI模块与主芯片通过串口进行数据交换,在串口接收中断中将接收到的数据发给调试串口1, 同时用一个全局变量将接收到的数据传递给主程序,在主程序中根据这个全局变量的值不同,点亮或熄灭LE