郑州网站制作公司汉狮/seo代码优化包括哪些

郑州网站制作公司汉狮,seo代码优化包括哪些,wordpress网页版,网站制作流程有哪些本次模拟赛涉及的模块:基础三件套(Led&Relay,按键、数码管) 进阶单件套(pcf8591的AD模块) 附件: 各模块底层代码在文章的结尾 一、数码管部分 1.页面1 页面1要显示的格式是: …

本次模拟赛涉及的模块:基础三件套(Led&Relay,按键、数码管)+ 进阶单件套(pcf8591的AD模块)

附件:
在这里插入图片描述

各模块底层代码在文章的结尾

一、数码管部分

1.页面1

页面1要显示的格式是:
最左边的数码管显示字母C,最后两位显示湿度的十位和个位(不足两位十位熄灭)

01234567
C30

在这里插入图片描述

湿度是由pcf8591的AD模块读取通道3的电压值转换来的,他们的关系是(从图转换成函数)
h u m i d i t y = { 10 , U ≤ 1 0.266 ∗ U − 16.666 , 1 ≤ U ≤ 4 90 , U ≥ 4 humidity = \begin{cases} 10,U\le1\\ 0.266*U-16.666,\,\,1\le U \le 4\\ 90,U\ge 4\\ \end{cases} humidity= 10,U10.266U16.666,1U490,U4
所以在AD的处理函数就可以先将通道3的电压读出来后直接进行湿度转换。下面给出的是用float型变量接收未放大的电压值。

  • pcf8591.c底层代码
#include <STC15F2K60S2.H>
#include <intrins.h>#define DELAY_TIME	5
sbit scl = P2^0;
sbit sda = P2^1;static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}//
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}//
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}//
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}//
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}//
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}//
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}unsigned char ADRead()
{unsigned char temp = 0;I2CStart();I2CSendByte(0x90);I2CWaitAck();I2CSendByte(0x03);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp = I2CReceiveByte();I2CSendAck(1);I2CStop();return temp;
}
  • main.c中调用
/*湿度*/
idata u8 humidity;//电压转换湿度void ADProc()
{float RB2 = ADRead() / 51.0;//读取RB2的电压//湿度转换if(RB2 <= 1.0)humidity = 10;else if(RB2 >= 4.0)humidity = 90;elsehumidity = 80/3.0*RB2+10-80/3.0;
}
  • void SegProc()
    由于数码管缓存区初始化时设置为8个数码管均熄灭,所以只需对索引为0,6,7的数码管赋值即可。
idata u8 SegPos;
pdata u8 SegBuf[8] = {10,10,10,10,10,10,10,10};void SegProc()
{switch(SegMode){case 0:SegBuf[0] = 11;//CSegBuf[6] = humidity / 10 ? humidity / 10 : 10;SegBuf[7] = humidity % 10;break;}
}void Timer0_Isr(void) interrupt 1
{if(++SegPos == 8)	SegPos = 0;SegDisp(SegPos, SegBuf[SegPos]);
}

2.页面2

页面2要显示的格式是:
最左边的数码管显示字母E,最后两位显示湿度参数的十位和个位(不足两位十位熄灭)

湿度参数默认值为50

01234567
E50

这个就特别简单了,页面1的代码直接复制下来就可以了,唯一要改的地方就是页面2的显示要对湿度参数的十位进行判断,为0时熄灭。

idata u8 humidity_set = 50;void SegProc()
{switch(SegMode){case 1:SegBuf[0] = 12;//ESegBuf[6] = humidity_set / 10 ? humidity_set / 10 : 10;SegBuf[7] = humidity_set % 10;break;}
}

3. 页面3

页面3要显示的格式是:
最左边的数码管显示字母H,最后两位显示时间间隔的十位和个位(不足两位十位熄灭)

时间间隔默认值为3。
时间间隔是继电器点亮的间隔,跟数码管没关系,直接显示即可。

01234567
E3
idata u8 time = 3;//时间间隔void SegProc()
{switch(SegMode){case 2:SegBuf[0] = 13;//HSegBuf[6] = time / 10 ? time / 10 : 10;SegBuf[7] = time % 10;break;}
}

二、按键部分

按键只用到了按键S4、S5、S8、S9。
按键S4是切换页面,实现也很简单。
按键5是继电器启动标志位,在任何界面按一次标志位取反。
在这里插入图片描述

idata bit relay_work; //继电器工作 0-停止 1-开始void KeyProc()
{KeyVal = KeyDisp();KeyDown = KeyVal & ~KeyOld;KeyUp = ~KeyVal & KeyOld;KeyOld = KeyVal;switch(KeyDown){case 4://页面流转if(++SegMode == 3)SegMode = 0;break;case 5://切换继电器工作模式relay_work = !relay_work;break;case 8://参数-if(SegMode == 1){humidity_set -= 5;if(humidity_set == 25)humidity_set = 90;}else if(SegMode == 2){if(--time == 0)time = 10;}break;case 9://参数+if(SegMode == 1){humidity_set += 5;if(humidity_set == 95)humidity_set = 30;}else if(SegMode == 2){if(++time == 11)time = 1;}break;}
}

三、继电器部分

第一次写继电器的时候理解错了,题目也没有明确提到,根据第一次提交的测评分析这道题目的意思是继电器工作模式下触发吸合条件后继电器吸合,经过一定时间间隔后断开,持续处于该状态不重复吸合,直到经过一次湿度>湿度参数后再次触发条件(湿度<湿度参数),继电器才吸合。

idata bit relay_work; //继电器工作 0-停止 1-开始
idata bit relay_flag; //继电器使能标志位
idata u16 TimeCount;  //定时器计时变量 
idata bit humidity_flag; //0-湿度值不小于参数 
idata bit humidity_has_flag;//0-继电器未重复吸合 1-继电器已重复吸合过
void LedProc()
{/*Relay*/if(!relay_work)//继电器不工作{relay_flag = 0;//关闭继电器humidity_has_flag = 0;//继电器重复吸合标志位清零}else//继电器工作{humidity_flag = (humidity < humidity_set);//如果湿度小于湿度参数,humidity_flag为真if(!humidity_flag)//如果湿度大于湿度参数humidity_has_flag = 0;//重复吸合标志位清零if(humidity_flag && !humidity_has_flag)//如果湿度小于湿度参数并且还未触发继电器吸合{humidity_has_flag = 1;//继电器已经吸合过了relay_flag = 1;//继电器开始工作}}Relay(relay_flag);
}void Timer0_Isr(void) interrupt 1
{//如果处于继电器工作模式下并且继电器开始工作时计时if(relay_work && relay_flag){if(++TimeCount == time*1000)//吸合后达到一定时间间隔断开继电器{TimeCount = 0;//计时变量清零relay_flag = 0;//继电器不工作}}
}

四、代码整合(改一下main函数可以运行)

Init.c

#include <STC15F2K60S2.H>void SystemInit()
{P0 = 0xff;P2 = P2 & 0x1f | 0x80;P2 &= 0x1f;P0 = 0x00;P2 = P2 & 0x1f | 0xa0;P2 &= 0x1f;
}

Led.h

#include <STC15F2K60S2.H>void LedDisp(unsigned char *ucLed)
{unsigned char i, temp = 0x00;static unsigned char temp_old = 0xff;for(i = 0; i < 8; i++)temp |= (ucLed[i] << i);if(temp != temp_old){P0 = ~temp;P2 = P2 & 0x1f | 0x80;P2 &= 0x1f;temp_old = temp;}
}void Relay(bit flag)
{unsigned char temp = 0x00;static unsigned char temp_old = 0xff;if(flag)temp |= 0x10;elsetemp &= 0xef;if(temp != temp_old){P0 = temp;P2 = P2 & 0x1f | 0xa0;P2 &= 0x1f;temp_old = temp;}
}

Key.h

#include <STC15F2K60S2.H>unsigned char KeyDisp()
{unsigned char temp = 0x00;P44 = 0;P42 = 1;P35 = 1;P34 = 1;if(P32 == 0) temp = 5;if(P33 == 0) temp = 4;P44 = 1;P42 = 0;P35 = 1;P34 = 1;if(P32 == 0) temp = 9;if(P33 == 0) temp = 8;return temp;
}

Seg.c

#include <STC15F2K60S2.H>code unsigned char Seg_Table[] =
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0xff, //空
0xc6, //C
0x86, //E
0x89  //H
};void SegDisp(unsigned char wela, unsigned char dula)
{P0 = 0xff;P2 = P2 & 0x1f | 0xe0;P2 &= 0x1f;P0 = (0x01 << wela);P2 = P2 & 0x1f | 0xc0;P2 &= 0x1f;P0 = Seg_Table[dula];P2 = P2 & 0x1f | 0xe0;P2 &= 0x1f;
}

pcf8591.c

#include <STC15F2K60S2.H>
#include <intrins.h>#define DELAY_TIME	5
sbit scl = P2^0;
sbit sda = P2^1;static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}//
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}//
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}//
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}//
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}//
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}//
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}unsigned char ADRead()
{unsigned char temp = 0;I2CStart();I2CSendByte(0x90);I2CWaitAck();I2CSendByte(0x03);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp = I2CReceiveByte();I2CSendAck(1);I2CStop();return temp;
}

main.c

#include <STC15F2K60S2.H>
#include "Init.h"
#include "Led.h"
#include "Key.h"
#include "Seg.h"
#include "pcf8591.h"typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long int u32;/*按键*/
idata u8 KeyVal, KeyDown, KeyUp, KeyOld;
/*数码管*/
idata u8 SegPos;
pdata u8 SegBuf[8] = {10,10,10,10,10,10,10,10};
idata u8 SegMode;
/*指示灯*/
pdata u8 ucLed[8] = {0,0,0,0,0,0,0,0};
idata bit relay_work; //继电器工作 0-停止 1-开始
idata bit relay_flag; //继电器使能标志位
idata u16 TimeCount;  //定时器计时变量 
/*湿度*/
idata u8 humidity;
idata u8 humidity_set = 50;
idata u8 time = 3;
idata bit humidity_flag; //0-湿度值不小于参数 
idata bit humidity_has_flag; void KeyProc()
{KeyVal = KeyDisp();KeyDown = KeyVal & ~KeyOld;KeyUp = ~KeyVal & KeyOld;KeyOld = KeyVal;switch(KeyDown){case 4:if(++SegMode == 3)SegMode = 0;break;case 5:relay_work = !relay_work;break;case 8:if(SegMode == 1){humidity_set -= 5;if(humidity_set == 25)humidity_set = 90;}else if(SegMode == 2){if(--time == 0)time = 10;}break;case 9:if(SegMode == 1){humidity_set += 5;if(humidity_set == 95)humidity_set = 30;}else if(SegMode == 2){if(++time == 11)time = 1;}break;}
}void SegProc()
{switch(SegMode){case 0:SegBuf[0] = 11;//CSegBuf[6] = humidity / 10 ? humidity / 10 : 10;SegBuf[7] = humidity % 10;break;case 1:SegBuf[0] = 12;//ESegBuf[6] = humidity_set / 10 ? humidity_set / 10 : 10;SegBuf[7] = humidity_set % 10;break;case 2:SegBuf[0] = 13;//HSegBuf[6] = time / 10 ? time / 10 : 10;SegBuf[7] = time % 10;break;}
}void LedProc()
{u8 i;/*Relay*/if(!relay_work){relay_flag = 0;humidity_has_flag = 0;}else{humidity_flag = (humidity < humidity_set);if(!humidity_flag)humidity_has_flag = 0;if(humidity_flag && !humidity_has_flag){humidity_has_flag = 1;relay_flag = 1;}}Relay(relay_flag);/*Led*/for(i = 0; i < 3; i++)ucLed[i] = (i == SegMode);ucLed[3] = relay_work;LedDisp(ucLed);
}void ADProc()
{float RB2 = ADRead() / 51.0;if(RB2 <= 1.0)humidity = 10;else if(RB2 >= 4.0)humidity = 90;elsehumidity = 80/3.0*RB2+10-80/3.0;
}void Timer0_Init(void)		//1毫秒@12.000MHz
{AUXR &= 0x7F;			//定时器时钟12T模式TMOD &= 0xF0;			//设置定时器模式TL0 = 0x18;				//设置定时初始值TH0 = 0xFC;				//设置定时初始值TF0 = 0;				//清除TF0标志TR0 = 1;				//定时器0开始计时ET0 = 1;				//使能定时器0中断EA = 1;
}void Timer0_Isr(void) interrupt 1
{if(++SegPos == 8)	SegPos = 0;SegDisp(SegPos, SegBuf[SegPos]);if(relay_work && relay_flag){if(++TimeCount == time*1000){TimeCount = 0;relay_flag = 0;}}
}void main()
{SystemInit();Timer0_Init();while(1){//...}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络华为HCIA+HCIP IPv6

目录 IPv4现状 IPv6基本报头 IPv6扩展报头 IPv6地址 IPv6地址缩写规范 ​编辑 IPv6地址分配 IPv6单播地址分配 IPv6单播地址接口标识 IPv6常见单播地址 - GUA &#xff08;2 / 3 开头&#xff09; IPv6常见单播地址 - ULA IPv6常见单播地址 - LLA IPv6组播地…

基于YOLOv8深度学习的智能小麦害虫检测识别系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

Mac:Maven 下载+安装+环境配置(详细讲解)

&#x1f4cc; 下载 Maven 下载地址&#xff1a;https://maven.apache.org/download.cgi &#x1f4cc; 无需安装 Apache官网下载 Maven 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目录下新建…

XSS-labs(反射型XSS) 靶场 1-13关 通关

目录 前言 XSS漏洞概述 XSS漏洞分类 通关日记 level1 分析 解题 ​level2 分析 解题 方法一&#xff1a;闭合标签 方法二&#xff1a;闭合双引号 level3 分析 解题 level4 分析 解题 level5 分析 解题 level6 分析 解题 level7 分析 解体 level8 …

【杂记二】git, github, vscode等

一、前言 暂时空着... 二、git 2.1 可能的疑问 1. VSCode 项目名和 GitHub 仓库名是否需要一致&#xff1f; 不需要一致。 VSCode 项目名&#xff08;也就是你本地的文件夹名字&#xff09;和 GitHub 仓库名可以不一样。 Git 是一个分布式版本控制系统&#xff0c;它主要关…

FPGA 以太网通信(四)网络视频传输系统

一、网络视频传输系统 网络视频传输系统使用ov5640摄像头采集数据&#xff0c;通过组件UDP帧将视频数据实时传输给上位机。 ov5640视频传输带宽 像素分辨率设为640x480&#xff0c;帧率设为60帧&#xff0c;像素格式为RGB565&#xff0c;传输带宽为 640 x 480 x 16bit x 60 fps…

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…

【STM32实物】基于STM32的太阳能充电宝设计

基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…

【记一次】AI微调训练步数计算方式

llama微调训练步数计算方式,以下数据为假设 一、关键参数解析 总样本数&#xff1a;Num examples 1,047 表示训练数据集包含 1,047 个样本。 训练轮数&#xff1a;Num Epochs 300 表示整个训练集将被遍历 300 次。 总批次大小&#xff1a;Total train batch size 80 表示…

python-selenium 爬虫 由易到难

本质 python第三方库 selenium 控制 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动&#xff08;不容易遇到版本或者兼容性的问题&#xff09; 驱动下载网址&#xff1a;链接: link 1、实战1 &#xff08;1&#xff09;安装 selenium 库 pip install selenium&#…

git的底层原理

git的底层原理 三段话总结git&#xff0c; 1. 工作原理&#xff1a;git管理是一个DAG有向无环图&#xff0c;HEAD指针指向branch或直接指向commit&#xff0c;branch指向commit&#xff0c;commit指向tree&#xff0c;tree指向别的tree或直接指向blob。 2. git所管理的一个目录…

神聖的綫性代數速成例題13. 非齊次方程組解的性質、非齊次方程組解的討論

綫性空間的維數&#xff1a; 若綫性空間中存在一組綫性無關的矢量&#xff0c;使得中的任意矢量 都可以由綫性表示&#xff0c;則稱為綫性空間的維數&#xff0c;記作&#xff0c;稱為的一組基。 基與座標變換&#xff1a; 設和是維綫性空間的兩組基&#xff0c;且&#xff0c;…

Kafka集成Debezium监听postgresql变更

下载postgres的插件&#xff1a;https://debezium.io/documentation/reference/2.7/install.html 2.7版本支持postgresql12数据库。 debezium-connector-postgres-2.7.4.Final-plugin.tar.gz 上传插件并解压 mkdir /usr/local/kafka/kafka_2.12-2.2.1/connector cd /usr/local…

『uniapp』简单文本复制文字 富文本内容复制文字(详细图文注释)

目录 text组件错误代码示例成功代码总结 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 text组件 官方文档可知app端用selectable可实现文本选中进而可复制,也就是说text标签内部的文本就可以复制了 https://uniapp.dclou…

算法模型从入门到起飞系列——背包问题(探索最大价值的掘金之旅)

文章目录 前言一、背包问题溯源&#xff08;动态规划&#xff09;1.1 动态规划的概念1.2 动态规划的基本步骤1.3 动态规划的实际应用 二、背包问题2.1 背包问题衍生2.2 0-1背包2.2.1 0-1背包描述2.2.2 0-1背包图解2.2.3 0-1背包代码刨析 2.3 完全背包2.3.1 完全背包描述2.3.2 完…

Python实现爬虫:天气数据抓取(+折线图)

一、基本架构 1、URL管理器&#xff1a;爬虫的调度中枢 核心职责 功能说明URL去重防止重复抓取URL优先级管理控制抓取顺序&#xff08;广度优先/深度优先&#xff09;断点续爬支持持久化存储抓取状态分布式协同多节点共享URL队列 2、网页下载器&#xff1a;数据获取的引擎 功…

LangChain 基础

一、LangChain 模块和体系 LangChain 是一个用于开发由大型语言模型&#xff08;LLMs&#xff09;驱动的应用程序的框架。 官方文档&#xff1a;https://python.langchain.com/docs/introduction/ LangChain 简化了LLM应用程序生命周期的每个阶段&#xff1a; 开发&#xf…

Parsing error: Unexpected token, expected “,“

今天在使用Trae AI 编程工具开发大文件切片上传功能&#xff0c;使用的是VUE3,TS技术栈&#xff0c;开发完成运行时&#xff0c;编译报错&#xff08;Parsing error: Unexpected token, expected ","&#xff09;&#xff0c;让AI自行修复此问题多次后还是没有解决&a…

农用车一键启动工作原理

移动管家农用车一键启动的工作原理与普通汽车类似&#xff0c;主要依赖于无线射频识别技术&#xff08;RFID&#xff09;。以下是具体的工作步骤和原理&#xff1a; 智能钥匙识别&#xff1a; 车主携带智能钥匙靠近车辆时&#xff0c;钥匙通过发射射频信号与车辆进行交互。车辆…

Cursor从小白到专家

文章目录 1&#xff1a;简单开发一个贪吃蛇游戏规则设置提示词 cursor开发小工具开发整体步骤创建.cursorrules输入提示词composer模式chat模式 执行cursor accept all发布到线上进行分享 cursor开发一个浏览器插件创建.cursorrulescursor rules范例集工具 输入提示词执行curso…