【小项目】①基于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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用PyQt实现简易文本编辑器

《使用PyQt实现简易文本编辑器》这篇文章主要为大家详细介绍了如何使用PyQt5框架构建一个简单的文本编辑器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录分析主窗口类 (MyWindow)菜单操作语法高亮 (SyntaxHighlighter)运行程序主要组件代码图示分析实现

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加