当前位置: 首页 > article >正文

单片机自动脱模剂喷雾控制系统

/***实现功能:检测报警信号,脱模剂开模数计数信号***//***参数:1:脱模剂开模数 2:喷雾时间 3:延时时间 ***//***串口接收触摸屏参数设置字符串,接收并保存******//***端子输入口读开模数,比较设定值后输出到电磁阀**//***端子输入口读报警信号,到设定值关闭电机及加热**/#include REG52.H#include intrins.H#include stdio.h#define uint unsigned int#define uchar unsigned char#define CMD_IDLE 0 //空闲模式#define CMD_READ 1 //IAP字节读命令#define CMD_PROGRAM 2 //IAP字节编程命令#define CMD_ERASE 3 //IAP扇区擦除命令#define ENABLE_IAP 0x82 //if SYSCLK20MHz#define IAP_ADDRESS 0x0000 //EEPROM首地址typedef unsigned char BYTE;typedef unsigned int WORD;uchar s;sbit AUXP5^5; /****RoLa***/sbit MD0MD1P3^2; /****RoLa***/sbit OUT1P1^0; /****输出***/sbit WARNINGP1^1; /****输入***/sbit INTPUT1P1^6; /****输入***/uchar v; /*从机号*/uchar Modulus; //开模数uchar Spray_Time; //喷雾时间uchar Delay_Time; //延时时间uchar kcounter,kstatus; //按键计数标志 按键状态标志bit Receive_Flag;uchar DAT20;static uint val1,val2,val3,val4,val5;uint TIME0; //实际开模数uint a[10]; //定义数组a 存储串口数据串/*---------------延时子程序----------------*/void delay1 (uint ms){uint i,j;for(i0;ims;i)for(j0;j200;j);}/*------------------延时子程序------------------------*/void delay10ms(uint x){uint i, j;for (i0;ix;i)for (j0;j500;j);}/*-----------延时100ms子程序12MHz --------*/void Delay_100ms(uint x) //{uint i,j;for(i0;ix;i){for(j0;j18000;j);}}/****************按键计数器状态寄存器归零*************/void RstKey(){kcounter0; //按键计数器归零kstatus0; //状态寄存器归零}/*****************按键低电平检测函数*****************/void LowVoltKey(void) //按键计数器状态标志加一{kcounter;kstatus;_nop_(); //延时}/*****************按键高电平检测函数*****************/void HighVoltKey(void) //按键计数器加一 状态标志归零{kcounter; //按键计数器加一kstatus0; //按键状态标志归零_nop_(); //延时}/*----关闭IAP----------------------------*/void IapIdle(){IAP_CONTR0; //关闭IAP功能IAP_CMD0; //清除命令寄存器IAP_TRIG0; //清除触发寄存器IAP_ADDRH0X80; //将地址设置到非IAP区域IAP_ADDRL0;}/*-从ISP/IAP/EEPROM区域读取一字节-*/BYTE IapReadByte(WORD addr){BYTE dat; //数据缓冲区IAP_CONTRENABLE_IAP; //使能IAPIAP_CMDCMD_READ; //设置IAP命令IAP_ADDRLaddr; //设置IAP低地址IAP_ADDRHaddr8; //设置IAP高地址IAP_TRIG0x5a; //写触发命令(0x5a)IAP_TRIG0xa5; //写触发命令(0xa5)_nop_(); //等待ISP/IAP/EEPROM操作完成datIAP_DATA; //读ISP/IAP/EEPROM数据IapIdle(); //关闭IAP功能return dat; //返回}/*-写一字节数据到ISP/IAP/EEPROM区域-*/void IapProgramByte(WORD addr, BYTE dat){IAP_CONTRENABLE_IAP; //使能IAPIAP_CMDCMD_PROGRAM; //设置IAP命令IAP_ADDRLaddr; //设置IAP低地址IAP_ADDRHaddr8; //设置IAP高地址IAP_DATAdat; //写ISP/IAP/EEPROM数据IAP_TRIG0x5a; //写触发命令(0x5a)IAP_TRIG0xa5; //写触发命令(0xa5)_nop_(); //等待ISP/IAP/EEPROM操作完成IapIdle();}/*---扇区擦除---------------*/void IapEraseSector(WORD addr){IAP_CONTRENABLE_IAP; //使能IAP valIapReadByte(IAP_ADDRESS1);IAP_CMDCMD_ERASE; //设置IAP命令IAP_ADDRLaddr; //设置IAP低地址IAP_ADDRHaddr8; //设置IAP高地址IAP_TRIG0x5a; //写触发命令(0x5a)IAP_TRIG0xa5; //写触发命令(0xa5)_nop_(); //等待ISP/IAP/EEPROM操作完成IapIdle();}/*************写参数到EEPROM*******************************/void Write_EepromTime(){IapEraseSector(IAP_ADDRESS); //扇区擦除IapProgramByte(IAP_ADDRESS0,val1/256); /*设定间距高八位*/IapProgramByte(IAP_ADDRESS1,val1%256); /*设定间距低八位*/IapProgramByte(IAP_ADDRESS2,val2/256); /*电机速度高八位*/IapProgramByte(IAP_ADDRESS3,val2%256); /*电机速度低八位*/IapProgramByte(IAP_ADDRESS4,val2);/*比例系数高八位*/IapProgramByte(IAP_ADDRESS5,val2);/*比例系数低八位*/IapProgramByte(IAP_ADDRESS6,val3/256); /*顶进时间高八位*/IapProgramByte(IAP_ADDRESS7,val3%256); /*顶进时间低八位*/IapProgramByte(IAP_ADDRESS8,val4/256); /*顶退时间高八位*/IapProgramByte(IAP_ADDRESS9,val4%256); /*顶退时间低八位*/IapProgramByte(IAP_ADDRESS10,val5/256); /*开闸时间高八位*/IapProgramByte(IAP_ADDRESS11,val5%256); /*开闸时间低八位*/}/***********************************/void red_eeprom(void){uint m,n;mIapReadByte(IAP_ADDRESS0); //开模数高八位nIapReadByte(IAP_ADDRESS1); //开模数低八位val1m*256n; //开模数mIapReadByte(IAP_ADDRESS2); //喷雾时间高八位nIapReadByte(IAP_ADDRESS3); //喷雾时间低八位val2m*256n; //喷雾时间mIapReadByte(IAP_ADDRESS4); //喷雾延时时间高八位nIapReadByte(IAP_ADDRESS5); //喷雾延时时间低八位val3m*256n; //喷雾延时时间mIapReadByte(IAP_ADDRESS6); //报警延时关加热电机高八位nIapReadByte(IAP_ADDRESS7); //报警延时关加热电机低八位val4m*256n; //报警延时关加热电机时间mIapReadByte(IAP_ADDRESS8); //备用高八位nIapReadByte(IAP_ADDRESS9); //备用低八位val5m*256n; //备用}/*------------初始化串口---------------------*/void InitUart(){SCON0X50; //8位数据可变波特率AUXR|0x01; //串口1选择定时器2为波特率发生器AUXR|0X04; //定时器2时钟为Fosc即1TT2L0XE0; //设置定时器处置 110592》9600T2H0XFE; //设置定时器处置 110592》9600AUXR|0X10; //启动定时器2TI1;ES1; //EA1;}/**************串口发送*****************************/void Send(uchar temp){unsigned serial;serialtemp;SBUF(uchar)temp;while(TI!1);TI0;}/*--------UART 中断服务程序----BuffSBUF---------------*/void Uart() interrupt 4 using 1{if(RI){DAT2SBUF; //数组下标位置的数据等于jRI0; //Receive_Flag1; //接收数据标志置一}}/*------------------主循环程序----------------*/void main( ) /*主程序开始*/{ /**加一**/AUXR0X80; //STC系列的1T 设置TMOD0X01;delay1(2000);delay1(2000);InitUart(); //初始化串口MD0MD10; //delay1(200);OUT10;delay1(2000);red_eeprom();OUT11;P_SW10x40; //RXD_2/P3.6, TXD_2/P3.7printf(0XFF,0XFF,0XFF); //向串口屏发启动信号printf(t1.txt\系统启动\ ); //printf(n0.val%d\xff\xff\xff,val1);printf(n1.val%d\xff\xff\xff,val2);printf(n2.val%d\xff\xff\xff,val3);printf(n3.val%d\xff\xff\xff,val4);printf(n4.val%d\xff\xff\xff,val5);printf(n5.val%d\xff\xff\xff,TIME); //实际开模数delay1(2000);P_SW10x00; //RXD/P3.0, TXD/P3.1delay1(2000); //Receive_Flag0; //接收数据标志置零while(1){if(Receive_Flag1) //接收标志为1{Receive_Flag0; //接收标志归零 重新接收if (a[0]0XC0a[1]0X01) //{val1a[3]*256a[2]; //开模数printf(n0.val%d\xff\xff\xff,val1); //返回数据核对}else if (a[0]0XC0a[1]0X02){val4a[3]*256a[2]; //喷雾时间printf(n1.val%d\xff\xff\xff,val2); //返回数据核对}else if (a[0]0XC0a[1]0X03) //{val3a[3]*256a[2]; //喷雾延时printf(n2.val%d\xff\xff\xff,val3); //返回数据核对}else if (a[0]0XC0a[1]0X04){val2a[3]*256a[2]; //报警延时关电机加热printf(n3.val%d\xff\xff\xff,val4); //返回数据核对}else if (a[0]0XC0a[1]0X05){val3a[3]*256a[2]; //备用参数printf(n4.val%d\xff\xff\xff,val5); //返回数据核对}Write_EepromTime();delay10ms(500);}//RstKey(); //开模完低电平信号for(;kcounter5;) //按键循环5次{if(!INTPUT1) //按键低电平{LowVoltKey(); //按键低电平 计数器加一状态标志加一}else if(~!INTPUT1) //按键高电平{HighVoltKey(); //按键计数器加一 状态标志归零}}if(kstatus3) /*按键状态标志大于等于3为有效值*/{TIME;printf(n5.val%d\xff\xff\xff,TIME); //实际开模数if(TIMEval1){OUT10; /****输出***/Delay_100ms(val2);OUT11; /****输出***/}}RstKey();for(;kcounter5;) //按键循环5次{if(~!INTPUT1) //按键高电平{kcounter; //高电平加1}else if(!INTPUT1) //按键低电平{kcounter0; //低电平开模完未复位,继续循环检测}}//RstKey(); //按键自动for(;kcounter5;) //按键循环5次{if(!WARNING) //按键低电平{LowVoltKey(); //按键低电平 计数器加一状态标志加一}else if(~!WARNING) //按键高电平{HighVoltKey(); //按键计数器加一 状态标志归零}}if(kstatus3) /*按键状态标志大于等于3为有效值*/{P_SW10x00; //RXD/P3.0, TXD/P3.1delay1(2000); //报警信号Send(v); //发送从机编号}}}

相关文章:

单片机自动脱模剂喷雾控制系统

/***实现功能:检测报警信号,脱模剂开模数计数信号***/ /***参数:1:脱模剂开模数 2:喷雾时间 3:延时时间 ***/ /***串口接收触摸屏参数设置字符串,接收并保存******/ /***端子输入口读开模数,比较设定值后输出到电磁阀**/ /***端子输入口读报警信号,到设定值关闭电机及加热**/#i…...

避坑指南:用Docker部署Oracle 11g时你一定会遇到的5个权限问题(附终极解决方案)

避坑指南:用Docker部署Oracle 11g时你一定会遇到的5个权限问题(附终极解决方案) 在容器化技术席卷全球的今天,Docker已成为部署数据库的首选工具之一。然而,当我们将Oracle 11g这样的传统数据库巨人塞进轻量级容器时&a…...

Java SpringBoot+Vue3+MyBatis 信息化在线教学平台系统源码|前后端分离+MySQL数据库

摘要 随着信息技术的快速发展,教育行业正逐步向数字化、智能化转型。传统的线下教学模式受限于时间和空间,难以满足现代教育的高效性和灵活性需求。在线教学平台通过整合互联网技术与教育资源,为师生提供了便捷的交互渠道,有效提升…...

信号处理避坑指南:一维小波去噪中那些容易忽略的细节

信号处理避坑指南:一维小波去噪中那些容易忽略的细节 在信号处理领域,小波去噪因其优异的时频局部化特性,成为处理非平稳信号的首选方法。然而,许多工程师在应用PyWavelets等工具库时,往往陷入"调参陷阱"——…...

AI的恶意使用

AI 生成的内容与犯罪活动:人工智能系统正被滥用于生成诈骗、欺诈、敲诈勒索及未经同意的私密影像。尽管此类伤害的发生已有充分记录,但关于其发生率和严重程度的系统性数据仍然有限。 影响和操纵:在实验环境中,AI 生成的内容在改变…...

解锁3DS个性化定制:Anemone3DS主题管理器完全指南

解锁3DS个性化定制:Anemone3DS主题管理器完全指南 【免费下载链接】Anemone3DS A theme and boot splash manager for the Nintendo 3DS console 项目地址: https://gitcode.com/gh_mirrors/an/Anemone3DS 3DS主题定制是提升掌机使用体验的关键方式&#xff…...

Nanbeige 4.1-3B Streamlit WebUI效果展示:气泡时间戳与消息状态可视化

Nanbeige 4.1-3B Streamlit WebUI效果展示:气泡时间戳与消息状态可视化 1. 引言:当大模型遇见沉浸式聊天界面 想象一下,你正在本地部署一个强大的开源大语言模型,比如南北阁的4.1-3B版本。你通过命令行与它对话,看着…...

从相位差到厘米级精度:深入解析蓝牙6.0 CS中PBR公式的推导与验证

1. 蓝牙6.0 CS技术中的相位测距原理 蓝牙6.0引入的信道探测(CS)功能将定位精度提升到了厘米级,这主要得益于其采用的相位测距法(PBR)。想象一下,这就像用无线电波玩"激光测距",只不过我们用的是相位差而不是光脉冲。在实际操作中&a…...

5步打造Xbox 360游戏PC运行环境:Xenia Canary模拟器全攻略

5步打造Xbox 360游戏PC运行环境:Xenia Canary模拟器全攻略 【免费下载链接】xenia-canary Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia-canary Xenia Canary作为领先的Xbox 360开源模拟器,通过精准的…...

手把手教你用Stable Diffusion v1.5:从安装到生成第一张AI图片

手把手教你用Stable Diffusion v1.5:从安装到生成第一张AI图片 1. 引言 你是否曾经想过,只需输入一段文字描述,就能让AI自动生成一张精美的图片?Stable Diffusion v1.5作为AI图像生成领域的经典模型,让这个梦想变成了…...

如何用RAKE-NLTK实现高效关键词提取:企业级文本分析解决方案

如何用RAKE-NLTK实现高效关键词提取:企业级文本分析解决方案 【免费下载链接】rake-nltk Python implementation of the Rapid Automatic Keyword Extraction algorithm using NLTK. 项目地址: https://gitcode.com/gh_mirrors/ra/rake-nltk 在信息爆炸的数字…...

Blender UV Squares终极指南:3分钟掌握UV网格重塑神器

Blender UV Squares终极指南:3分钟掌握UV网格重塑神器 【免费下载链接】UvSquares Blender addon for reshaping UV quad selection into a grid. 项目地址: https://gitcode.com/gh_mirrors/uv/UvSquares 在3D建模和纹理贴图的世界里,UV Squares…...

2026应届生面试避坑指南:避开这些致命细节,求职成功率翻倍

文章目录前言一、简历不是自传,而是广告文案第一个大坑:把简历做成PPT艺术展。第二个大坑:把简历写成流水账。第三个大坑:一份简历海投百家。二、八股文背得溜,场景题一到就露馅丢分细节一:只会背概念&…...

【新能源功率预测】别再只盯准确率了,2026真正决定收益的,是“预测+交易+储能”一体化

关键词: 新能源功率预测、电力现货交易、储能套利、AI大模型、容量电价 2026年的春天,对于新能源电站的投资人和运营者来说,可谓是“冰火两重天”。 “火”的是政策红利终于实质性落地。【发改价格】114号文将独立储能纳入容量电价体系&…...

终极指南:如何用dlssg-to-fsr3让老款RTX显卡享受帧生成技术

终极指南:如何用dlssg-to-fsr3让老款RTX显卡享受帧生成技术 【免费下载链接】dlssg-to-fsr3 Adds AMD FSR 3 Frame Generation to games by replacing Nvidia DLSS Frame Generation (nvngx_dlssg). 项目地址: https://gitcode.com/gh_mirrors/dl/dlssg-to-fsr3 …...

如何永久保存你的QQ空间记忆:GetQzonehistory完整备份指南

如何永久保存你的QQ空间记忆:GetQzonehistory完整备份指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经担心过,那些记录着青春岁月的QQ空间说说会随…...

FramePack完整指南:5个关键技巧解决AI视频生成难题

FramePack完整指南:5个关键技巧解决AI视频生成难题 【免费下载链接】FramePack Lets make video diffusion practical! 项目地址: https://gitcode.com/gh_mirrors/fr/FramePack 你是否曾为AI视频生成中的内存溢出、生成速度缓慢和画面漂移问题而烦恼&#x…...

破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南

破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 问题…...

如何用iTorrent在iPhone上轻松管理种子下载?iOS种子客户端全攻略

如何用iTorrent在iPhone上轻松管理种子下载?iOS种子客户端全攻略 【免费下载链接】iTorrent Torrent client for iOS 16 项目地址: https://gitcode.com/gh_mirrors/it/iTorrent iTorrent是一款专为iOS 16设备设计的开源种子客户端,让iPhone和iPa…...

OpCore-Simplify终极指南:15分钟完成黑苹果EFI配置的智能工具

OpCore-Simplify终极指南:15分钟完成黑苹果EFI配置的智能工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 黑苹果配置一直是技术爱好者…...

3大核心功能解锁植物大战僵尸无限可能:PvZ Toolkit完全指南

3大核心功能解锁植物大战僵尸无限可能:PvZ Toolkit完全指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 你是否曾在植物大战僵尸的生存模式中苦于资源不足?是否想过保存完…...

如何突破网易云音乐下载限制?Netease_url工具的无损音乐解决方案

如何突破网易云音乐下载限制?Netease_url工具的无损音乐解决方案 【免费下载链接】Netease_url 网易云无损解析 项目地址: https://gitcode.com/gh_mirrors/ne/Netease_url 价值定位:为什么无损音乐解析工具成为音乐爱好者的必备工具?…...

G-Helper终极解决方案:华硕笔记本风扇与性能问题完全指南

G-Helper终极解决方案:华硕笔记本风扇与性能问题完全指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...

02-Spec驱动开发:把需求编译成代码

Spec 驱动开发:把需求编译成代码 AI 原生开发里最关键的一步,不是先让 AI 写代码,而是先让需求变成规范。 因为 AI 再强,也需要明确输入;而工程实现,再灵活也必须足够精确。 为什么规范是第一性原理 课程里…...

Win11Debloat极速优化指南:让Windows系统重获新生的深度净化方案

Win11Debloat极速优化指南:让Windows系统重获新生的深度净化方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…...

感官伪造风暴:AI用触觉反馈实施千万美元诈骗

一场静默的技术入侵当公众的注意力还停留在AI换脸与拟声诈骗的警示时,一条更隐蔽、更具欺骗性的技术路径已在黑暗中悄然铺就。如果说视觉与听觉的伪造尚可通过“多看两眼”、“多问一句”来警觉,那么当触觉——这一人类最原始、最信赖的感官——也被人工…...

vLLM-v0.11.0并发优化:max-num-seqs设置,支持高并发请求

vLLM-v0.11.0并发优化:max-num-seqs设置,支持高并发请求 1. 为什么需要关注并发性能? 在大模型推理服务中,并发能力直接决定了系统的吞吐量和响应速度。想象一下,当你的模型服务突然收到100个并发请求时,…...

Cursor AI破解免费VIP 2025终极完整教程:如何绕过试用限制享受Pro功能

Cursor AI破解免费VIP 2025终极完整教程:如何绕过试用限制享受Pro功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve r…...

Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置

Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置 1. 引言 想象一下,你开发了一个超酷的复古像素风语音设计工具,用户只需要输入文字和语气描述,就能生成各种情绪饱满的AI配音。这个工具在本地测试时运行完美&a…...

OpenClaw跨平台文件处理:千问3.5-35B-A3B-FP8实现图片转Excel数据表

OpenClaw跨平台文件处理:千问3.5-35B-A3B-FP8实现图片转Excel数据表 1. 从截图到结构化数据的真实需求 上周整理电商商品资料时,我遇到了一个典型问题:供应商发来的200多张商品参数截图,需要手动录入到Excel表格中。传统OCR工具…...