【小项目】①基于C8051F020/②基于STM8串口屏 的简易自动喷洒系统

2024-01-05 07:10

本文主要是介绍【小项目】①基于C8051F020/②基于STM8串口屏 的简易自动喷洒系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录:

  • (一)方案一:总体性设计
    • 1.基础电路设计【硬件】
      • 1)整体原理图
      • 2)PCB电路
      • 3)3D_PCB
    • 2.程序设计【软件】
      • 1)主程序设计
      • 2)I2C读写PCF8563
      • 3)五项按键设定浇水时间段
    • 3.效果展示
      • 1)整体效果图
  • (二)方案二总体性设计
    • 1.基础电路设计【硬件】
      • 1)子单元原理图
      • 2)测试手工PCB电路
    • 2.程序设计【软件】
      • 1).子单元WIFI模块配置
      • 2)WIFI连接校验 以及 与串口屏通信
      • 3)OLED字符库 & 3G图标[14] & WIFI图标[15]
    • 3.效果展示
      • 1).整体效果图
  • Github项目地址、设计下载

注:仅用于学习分享,分享自己在使用C8051F020单片机中的所做的一个小方案【DIY】。
最后附有下载链接
方案一 用到的主要工具材料

  • Keil 4
  • C8051F020 微控制器
  • 主要功能芯片:PCF8563

(一)方案一:总体性设计

方案简易示意图:
在这里插入图片描述

1.基础电路设计【硬件】

电路硬件:
[MCU] C8051F020
[稳压电源]【LM2596-5.0V】12.0V稳压5.0V 【TPS7333】5.0V稳压3.3V
[外围电路] 1.7寸12864液晶屏、串口屏、功能按键、PCF8563实时时钟电路

1)整体原理图

在这里插入图片描述

2)PCB电路

在这里插入图片描述

3)3D_PCB

  • TOP层
    在这里插入图片描述

  • BOTTOM层
    在这里插入图片描述

2.程序设计【软件】

1)主程序设计

#include "c8051f020.h"
#include "delay.h"
#include "lcd.h"
#include "I2C.h"
#include "keydown.h"typedef unsigned int u16;
typedef unsigned char u8;
int Clock[16]; //读寄存器pecf8563  buffersbit LED = P1^6;//下载程序指示灯extern u8 KeyValue;
extern u8 code num[],kong[],kong1[],rain[];
extern int flag_move,flag_set,Time_Count_flag;struct Time //结构体全局变量
{unsigned char second;unsigned char minite;unsigned char hour;unsigned char day;unsigned char week;unsigned char month;unsigned char year;
};
struct Reg
{unsigned char reg1;unsigned char reg2;unsigned char clk;unsigned char count1;unsigned char count2;
};
struct Alarm
{unsigned char minite;unsigned char hour;unsigned char day;unsigned char week;
};
/*----------------函数定义声明-------------------------*/
void PORT_Init();//交叉开关使能
void SYSCLK_Init();
void Disable_Wdog();  //禁止看门狗定时器
void Clock_Setting();
void Init();             //初始化void PORT_Init()//交叉开关使能
{XBR0    = 0x07;   // Enable UART0(TXD0-P0.0  RXD-P0.1)  SPI_SCK-P0.2  SPI_MISO-P0.3// SPI_MOSI-P0.4  SPI_NSS-P0.5   (SDA-P0.6   SCL-P0.7)XBR1    = 0x10;		// INT1使能P1.2XBR2    = 0x44;		// TXD1-P1.0  RXD1-P1.1P3MDOUT = 0xff;	P1MDOUT = 0xff;	P2MDOUT = 0xff;	
}
/*void Timer0_Init() {     TMOD      = 0x02; //方式2 定时,自动重装载  TL0       = 0x06;     TH0       = 0x06; }*/
void SYSCLK_Init()
{   unsigned int i;OSCXCN=0X67;           //0X67=0110,0111for(i=0;i<256;i++);    //等待>1mswhile(!(OSCXCN&0X80)); //等待XTLVLD变为1OSCICN=0X88;           //时钟失效监测器,选择外部时钟源作为系统时钟
}void Disable_Wdog()   //禁止看门狗定时器
{  WDTCN=0xDE;  WDTCN=0xAD; 
}void Clock_Setting()
{struct Time TIME={0x10,0x49,0x09,0x15,0x00,0x03,0x18};//设置时间: 秒/分/时/日/星期/月/年struct Reg REG={0x00,0x00,0x83,0x82,0x00};//设置寄存器struct Alarm ALARM={0x00,0x00,0x00,0x00};//设置报时控制寄存器unsigned char Set[16];//写寄存器bufferSet[0]=REG.reg1;	Set[1]=REG.reg2;Set[2]=TIME.second;Set[3]=TIME.minite;Set[4]=TIME.hour;Set[5]=TIME.day;Set[6]=TIME.week;Set[7]=TIME.month;Set[8]=TIME.year;Set[9]=ALARM.minite;Set[10]=ALARM.hour;Set[11]=ALARM.day;Set[12]=ALARM.week;Set[13]=REG.clk;		//CLKOUT输出寄存器	 0DHSet[14]=REG.count1;	//定时器控制寄存器	 0EHSet[15]=REG.count2; //定时器倒计数寄存器 0FH//WritePcf(Set,0,16);//设置时钟
}void Init()
{Disable_Wdog();PORT_Init();SYSCLK_Init();Initial_Lcd();//LCD初始化clear_screen();//清屏SMBusInit();//SMBus初始化 设置I2C
}
void main()
{	u8 i=0;LED=0;//下载程序成功指示灯Init();EA=1;//打开中断Clock_Setting();//Timer0_Init();//定时器0中断//IE = 0x82;//中断初始化//TR0=1;Delay_ms(200);while(1){//Clock_Setting();//需设置时间时使用ReadPcf(Clock,0,16);//实时时钟显读取//display_graphic_8x16(1,(0+8*0),&num[KeyValue*16]);//按键值标志Key_setting();Time_Watch();}
}

2)I2C读写PCF8563

unsigned char Command;//命令缓存
int *I2CDataBuff;//待法发数据、接收数据指针
unsigned char ByteNumber;  //发送字节数
unsigned char ByteReadBytes;//读字节数
int *ByteReadAddress;//读缓冲区指针
unsigned char ChipChoice;//芯片选择,0选择RTC、1选择24C256							bit BusBusy;//总线忙
bit NoStop;//发送完一组数据后不发送停止位/***********************************************************************************
* 函数名称:ReadPcf;
*
* 函数功能描述:读PCF8563;
*              
* 输入参数:unsigned char类型指针BytesAddress,读出数据存储的头地址;
*	    unsigned char 类型RomAddress,片内地址;
*	    unsigned char 类型Count,读数据个数;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/void ReadPcf( int *BytesAddress,int RomAddress,unsigned char Count)//读PCF8563
{ChipChoice=0;ByteReadAddress=BytesAddress;ByteReadBytes=Count;    while (BusBusy);I2CDataBuff=&RomAddress;//存储空间地址BusBusy=1;AA=1;NoStop=0;ByteNumber=1;Command=I2CPcfAddressW;//设备写地址STA=1;while (BusBusy);
}
/***********************************************************************************
* 函数名称:WritePcf;
*
* 函数功能描述:写PCF8563;
*              
* 输入参数:unsigned char类型指针BytesAddress,写入数据的头地址;
*	    unsigned char 类型RomAddress,片内地址;
*	    unsigned char 类型Count,写数据个数;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/void WritePcf(unsigned char *BytesAddress,unsigned char RomAddress,unsigned char Count)//写PCF8563
{int xdata TempBuff[17],n;ChipChoice=0;TempBuff[0]=RomAddress;for(n=1;n<(Count+1);n++){TempBuff[n]=*BytesAddress++;}while (BusBusy);NoStop=1;I2CDataBuff=&TempBuff[0];BusBusy=1;AA=1;ByteNumber=Count+1;Command=I2CPcfAddressW;STA=1;while (BusBusy);
}

3)五项按键设定浇水时间段

#include "c8051f020.h"
#include "keydown.h"
#include "delay.h"
#include "lcd.h"typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;sbit up     = P2^0;
sbit down   = P2^1;
sbit left   = P2^2;
sbit right  = P2^3;
sbit centre = P2^4;
u8 KeyValue=0;
int Set_Begin[16]={0,0,0,0,8},Set_End[16]={0,0,0,0,9};
int flag_page=0,flag_move=0;
extern int Clock[];
extern char code begin_time[],end_time[];//汉字
extern char code num[],heng[],maohao[],kong[];//字符
extern int bcd_dec(uchar bat);	//BCD码转十进制void Key_Move(int page[16])//初始or结束 页面设定
{int i,j;if(right == 0)//右移 修改时间{Dela

这篇关于【小项目】①基于C8051F020/②基于STM8串口屏 的简易自动喷洒系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572062

相关文章

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新