蓝桥杯单片机第十一届省赛(第一场)



主函数代码
#include<iic.h>
#include<intrins.h>sfr P4=0xc0;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C4=P3^4;
sbit C3=P3^5;unsigned char code led_nodot[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code led_dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char code upn[]={0xc1,0x8c,0xc8};
unsigned int count_er=0;//统计错误按键数
unsigned int Vp=0; //参考电压
unsigned int Vn=0; //PCF8591测出来的电压
unsigned int state=0; //窗口切换变量
unsigned int t=0; //时间变量
unsigned int t_v=0; //统计Vn>Vp的时间
unsigned int count=0; //统计下降时Vn>Vp的次数
unsigned char led=0xff; //保存流水灯的状态,防止数码管程序干扰
unsigned char Vn_value; //保存PCF8591测出来的值
bit state_v=0; //用来界定Vn>Vp时是上升还是下降
void serve_timer_INT0(){TMOD=0x01;TH0=(65535-50000)/256;//50msTL0=(65535-50000)%256;TR0=1;EA=1;ET0=1;
}
void timer_INT0() interrupt 1 using 1{TH0=(65535-50000)/256;//50msTL0=(65535-50000)%256;t++;if(Vp>Vn){t_v++;}elset_v=0;
}
void choose(unsigned int n){switch(n){case 4:P2=(P2 &0x1f)|0x80;break;case 5:P2=(P2 &0x1f)|0xa0;break;case 6:P2=(P2 &0x1f)|0xc0;break;case 7:P2=(P2 &0x1f)|0xe0;break;case 0:P2=(P2 &0x1f)|0x00;break;}
}
void delay(unsigned int k) //@11.0592MHz
{unsigned char data i, j;_nop_();_nop_();_nop_();i = 11;j = 190;while(k--){do{while (--j);} while (--i);}
}
void smg_display(unsigned int n,unsigned char dat){choose(6);P0=0x01<<n;choose(7);P0=dat;delay(1);choose(0); //防止最后一位数码管显示过亮
}
void smg_show(){
smg_display(0,upn[state]);
switch(state){case 0:smg_display(5,led_dot[Vn/100%10]);smg_display(6,led_nodot[Vn/10%10]);smg_display(7,led_nodot[Vn%10]);break;case 1:smg_display(5,led_dot[Vp/100%10]);smg_display(6,led_nodot[Vp/10%10]);smg_display(7,led_nodot[Vp%10]);break;case 2:if(count>99)smg_display(5,led_nodot[count/100%10]);if(count>9)smg_display(6,led_nodot[count/10%10]);smg_display(7,led_nodot[count%10]);break;
}
}
//unsigned char EEPROM_read(unsigned char addr);
//void EEPROM_write(unsigned char dat);
//unsigned char PCF8591_read(unsigned char addr);
void check_keyboard(){
R4=0;
R3=1;
C3=C4=1;
if(C3==0){delay(1);if(C3==0){count_er=0; if(state==1)EEPROM_write(Vp/10); //退出1状态时保存Vp //除以10是因为前面乘了100state++;if(state>=3)state=0;while(!C3){smg_show();}}
}R3=0;
R4=1;
C3=C4=1;
if(C3==0){delay(1);if(C3==0){if(state==2){count_er=0; count=0;}elsecount_er++;while(!C3){smg_show();}}
}
R4=0;
R3=1;
C3=C4=1;
if(C4==0){delay(1);if(C4==0){if(state==1){Vp+=50;count_er=0;if(Vp>500)Vp=0;}elsecount_er++;while(!C4){smg_show();}}
}
R3=0;
R4=1;
C3=C4=1;if(C4==0){delay(1);if(C4==0){if(state==1){if(Vp==0)Vp=500;elseVp-=50;count_er=0;}elsecount_er++;while(!C4){smg_show();}}}
}
void check_led(){if(t_v>=100){led=led & 0xfe;choose(4);P0=led;choose(0);}else{led=led | 0x01;choose(4);P0=led;choose(0);}if(count%2!=0){led=led & 0xfd;choose(4);P0=led;choose(0);}else{led=led | 0x02;choose(4);P0=led;choose(0);}if(count_er>=3){led=led & 0xfb;choose(4);P0=led;choose(0);}else{led=led | 0x04;choose(4);P0=led;choose(0);}
}
void get_Vn(){
Vn_value=PCF8591_read(0x03);
Vn=Vn_value*(5.0/255)*100;if(Vn<Vp && state_v==0){count++;state_v=1;}else if(Vn>Vp && state_v==1){state_v=0;}
}
void main(){
choose(4);
P0=led;
choose(5);
P0=0x00;
serve_timer_INT0();
Vp=EEPROM_read(0x00)*10;
while(1){smg_show();check_keyboard();check_led();
if(t%10==0){ //每隔0.5秒刷新一次电压Vnget_Vn();
}
}
}
iic.c文件
#include "iic.h"void IIC_Start(void)
{SDA = 1;SCL = 1;somenop;SDA = 0;somenop;SCL = 0;
}void IIC_Stop(void)
{SDA = 0;SCL = 1;somenop;SDA = 1;
}void IIC_Ack(unsigned char ackbit)
{if(ackbit) { SDA = 0;}else {SDA = 1;}somenop;SCL = 1;somenop;SCL = 0;SDA = 1; somenop;
}bit IIC_WaitAck(void)
{SDA = 1;somenop;SCL = 1;somenop;if(SDA) { SCL = 0;IIC_Stop();return 0;}else { SCL = 0;return 1;}
}void IIC_SendByte(unsigned char byt)
{unsigned char i;for(i=0;i<8;i++){ if(byt&0x80) { SDA = 1;}else {SDA = 0;}somenop;SCL = 1;byt <<= 1;somenop;SCL = 0;}
}unsigned char IIC_RecByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){ SCL = 1;somenop;da <<= 1;if(SDA) da |= 0x01;SCL = 0;somenop;}return da;
}//void IIC_Start(void);
//void IIC_Stop(void);
//void IIC_Ack(unsigned char ackbit);
//void IIC_SendByte(unsigned char byt);
//bit IIC_WaitAck(void);
//unsigned char IIC_RecByte(void); unsigned char EEPROM_read(unsigned char addr){
unsigned char ret;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(addr);
IIC_WaitAck();
IIC_Stop(); IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
ret=IIC_RecByte();
IIC_Ack(1);
IIC_Stop();
return ret;
}
void EEPROM_write(unsigned char dat){
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(0x00);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_Ack(1);
IIC_Stop();
}
unsigned char PCF8591_read(unsigned char addr){
unsigned char ret;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(addr);
IIC_WaitAck();IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
ret=IIC_RecByte();
IIC_Ack(1);
IIC_Stop();
return ret;
}
//void PCF8591_out(unsigned char dat){
//IIC_Start();
//IIC_SendByte(0x90);
//IIC_WaitAck();
//IIC_SendByte(0x40);
//IIC_WaitAck();
//IIC_SendByte(dat); //IIC_Ack(1);
//IIC_Stop();
//}
iic.h文件
#ifndef _IIC_H
#define _IIC_H#include "regx52.h"
#include "intrins.h"#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1sbit SDA = P2^1; /* ˽ߝП */
sbit SCL = P2^0; /* ʱדП */void IIC_Start(void);
void IIC_Stop(void);
void IIC_Ack(unsigned char ackbit);
void IIC_SendByte(unsigned char byt);
bit IIC_WaitAck(void);
unsigned char IIC_RecByte(void);
unsigned char EEPROM_read(unsigned char addr);
void EEPROM_write(unsigned char dat);
unsigned char PCF8591_read(unsigned char addr);
//void PCF8591_out(unsigned char dat);#endif
相关文章:
蓝桥杯单片机第十一届省赛(第一场)
主函数代码 #include<iic.h> #include<intrins.h>sfr P40xc0; sbit R3P3^2; sbit R4P3^3; sbit C4P3^4; sbit C3P3^5;unsigned char code led_nodot[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char code led_dot[]{0x40,0x79,0x24,0x30,0x…...
hive复杂数据类型Array Map Struct 炸裂函数explode
1、Array的使用 create table tableName( ...... colName array<基本类型> ...... ) 说明:下标从0开始,越界不报错,以null代替 arr1.txtzhangsan 78,89,92,96 lisi 67,75,83,94 王五 23,12 新建表: create table arr1(n…...
FIFO架构专题-FIFO是什么
目录 简介: FIFO参数: 1.宽度WIDTH(一次位数) 2.深度DEEPTH(存多少次) FIFO的分类: 同步FIFO 异步FIFO 读写位宽不同的FIFO FIFO信号介绍 写时钟 写数据 写使能 读时钟 读数据 读…...
Pythony——多线程简单爬虫实现
简单爬虫实现 import requests from bs4 import BeautifulSoup# 生成要爬取的网页地址列表,这里是博客园的分页地址,从第1页到第50页 urls [f"https://www.cnblogs.com/#p{i}" for i in range(1, 50 1)]# 生产者函数——负责下载网页内容 d…...
如何修改 a 链接的样式
在CSS中,你可以使用选择器来针对HTML中的特定元素(例如<a>标签,也就是链接)进行修改样式。以下是一些常见的修改<a>链接样式的方法: 移除下划线: a { text-decoration: none; } 修改链接的…...
第6章 详细设计-6.5 软硬件接口文档设计
6.5 软硬件接口文档设计 一般的产品都包含硬件和软件两部分,产品设计阶段需要确保硬件开发人员和软件开发的沟通准确、高效。所以需要一份书面的文档来承载软件和硬件之间的沟通细节。以下面的细水雾除尘设备为例进行讲解,涉及软件和硬件的接口ÿ…...
【pyspark学习从入门到精通14】MLlib_1
目录 包的概览 加载和转换数据 在前文中,我们学习了如何为建模准备数据。在本文中,我们将实际使用这些知识,使用 PySpark 的 MLlib 包构建一个分类模型。 MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式,即它不再积极开发…...
C++全局构造和初始化
片段摘自程序员的自我修养—链接、装载与库.pdf 11.4 程序在进入main之前,需要对全局对象进行构造初始化。 glibc全局对象进行构造初始化 gibc启动程序时会经过.init段,退出程序时会经过.finit段。这两个段中的代码最终拼接成_init()和_finit(),这两个…...
安全见闻-泷羽sec课程笔记
编程语言 C语言:一种通用的、面向过程的编程语言,广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来,支持面向对象编程,常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言,具有跨平台…...
游戏引擎学习第17天
视频参考:https://www.bilibili.com/video/BV1LPUpYJEXE/ 回顾上一天的内容 1. 整体目标: 处理键盘输入:将键盘输入的处理逻辑从平台特定的代码中分离出来,放入更独立的函数中以便管理。优化消息循环:确保消息循环能够有效处理 …...
【FFmpeg】FFmpeg 内存结构 ③ ( AVPacket 函数简介 | av_packet_ref 函数 | av_packet_clone 函数 )
文章目录 一、av_packet_ref 函数1、函数原型2、函数源码分析3、函数使用代码示例 二、av_packet_clone 函数1、函数原型2、函数源码分析 FFmpeg 4.0 版本源码地址 : GitHub : https://github.com/FFmpeg/FFmpeg/tree/release/4.0GitCode : https://gitcode.com/gh_mirrors/ff…...
【学习笔记】量化概述
Quantize量化概念与技术细节 题外话,在七八年前,一些关于表征的研究,会去做表征的压缩,比如二进制嵌入这种事情,其实做得很简单,无非是找个阈值,然后将浮点数划归为零一值,现在的Qu…...
同步互斥相关习题10道 附详解
PV操作 2016 某系统允许最多10个进程同时读文件F,当同时读文件F的进程不满10个时,欲读该文件的其他文件可立即读,当已有10个进程在读文件F时读,其他欲读文件F的进程必须等待,直至有进程读完后退出方可去读 在实现管…...
【Python · PyTorch】卷积神经网络 CNN(LeNet-5网络)
【Python PyTorch】卷积神经网络 CNN(LeNet-5网络) 1. LeNet-5网络※ LeNet-5网络结构 2. 读取数据2.1 Torchvision读取数据2.2 MNIST & FashionMNIST 下载解包读取数据 2. Mnist※ 训练 LeNet5 预测分类 3. EMnist※ 训练 LeNet5 预测分类 4. Fash…...
Git 拉取指定分支创建项目
一 背景 因为项目过大,只需要部分分支的代码即可。 二 实现 方法一:使用 --single-branch 参数 git clone 支持只拉取指定分支,而不是整个库的所有分支: git clone --branch <branch_name> --single-branch <reposi…...
CF862B Mahmoud and Ehab and the bipartiteness(二分图的性质)
思路:一个二分图是由两个集合组成的,同一个集合中的节点间不能连边,所以一个二分图最多有cnt[1]*cnt[2]条边,题目给出一个树的n-1条边,要我们添加最多的边数使他成为二分图,添加的边数就是cnt[1]*cnt[2]-n1…...
React Native 全栈开发实战班 :数据管理与状态之React Hooks 基础
在 React Native 应用中,数据管理与状态管理是构建复杂用户界面的关键。React 提供了多种工具和模式来处理数据流和状态管理,包括 React Hooks、Context API 以及第三方状态管理库(如 Redux)。本章节将详细介绍 React Hooks 的基础…...
传奇996_22——自动挂机
登录钩子函数中执行 callscript(actor, "../QuestDiary/主界面基础按钮/主界面基础按钮QM", "基础按钮QM")基础按钮QM执行了已下代码 #IF Equal <$CLIENTFLAG> 1 #ACT goto PC端面板加载#IF Equal <$CLIENTFLAG> 2 #ACT goto 移动端面板加载…...
faiss 提供了多种索引类型
faiss 多种索引类型 在 faiss 中,IndexFlatL2 是一个简单的基于 L2 距离(欧几里得距离)进行索引的索引类型,但实际上,faiss 提供了多种索引类型,支持不同的度量方式和性能优化,您可以根据需求选…...
比rsync更强大的文件同步工具rclone
背景 多个复制,拷贝,同步文件场景,最大规模的是每次几千万规模的小文件需要从云上对象存储中拉取到本地。其他的诸如定期数据备份,单次性数据备份。 rsync是单线程的,开源的mrsync是多线程的,但适用范围没…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
