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

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

主函数代码

#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<基本类型> ...... ) 说明&#xff1a;下标从0开始&#xff0c;越界不报错&#xff0c;以null代替 arr1.txtzhangsan 78,89,92,96 lisi 67,75,83,94 王五 23,12 新建表&#xff1a; create table arr1(n…...

FIFO架构专题-FIFO是什么

目录 简介&#xff1a; FIFO参数&#xff1a; 1.宽度WIDTH&#xff08;一次位数&#xff09; 2.深度DEEPTH&#xff08;存多少次&#xff09; FIFO的分类&#xff1a; 同步FIFO 异步FIFO 读写位宽不同的FIFO FIFO信号介绍 写时钟 写数据 写使能 读时钟 读数据 读…...

Pythony——多线程简单爬虫实现

简单爬虫实现 import requests from bs4 import BeautifulSoup# 生成要爬取的网页地址列表&#xff0c;这里是博客园的分页地址&#xff0c;从第1页到第50页 urls [f"https://www.cnblogs.com/#p{i}" for i in range(1, 50 1)]# 生产者函数——负责下载网页内容 d…...

如何修改 a 链接的样式

在CSS中&#xff0c;你可以使用选择器来针对HTML中的特定元素&#xff08;例如<a>标签&#xff0c;也就是链接&#xff09;进行修改样式。以下是一些常见的修改<a>链接样式的方法&#xff1a; 移除下划线&#xff1a; a { text-decoration: none; } 修改链接的…...

第6章 详细设计-6.5 软硬件接口文档设计

6.5 软硬件接口文档设计 一般的产品都包含硬件和软件两部分&#xff0c;产品设计阶段需要确保硬件开发人员和软件开发的沟通准确、高效。所以需要一份书面的文档来承载软件和硬件之间的沟通细节。以下面的细水雾除尘设备为例进行讲解&#xff0c;涉及软件和硬件的接口&#xff…...

【pyspark学习从入门到精通14】MLlib_1

目录 包的概览 加载和转换数据 在前文中&#xff0c;我们学习了如何为建模准备数据。在本文中&#xff0c;我们将实际使用这些知识&#xff0c;使用 PySpark 的 MLlib 包构建一个分类模型。 MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式&#xff0c;即它不再积极开发…...

C++全局构造和初始化

片段摘自程序员的自我修养—链接、装载与库.pdf 11.4 程序在进入main之前&#xff0c;需要对全局对象进行构造初始化。 glibc全局对象进行构造初始化 gibc启动程序时会经过.init段&#xff0c;退出程序时会经过.finit段。这两个段中的代码最终拼接成_init()和_finit(),这两个…...

安全见闻-泷羽sec课程笔记

编程语言 C语言&#xff1a;一种通用的、面向过程的编程语言&#xff0c;广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来&#xff0c;支持面向对象编程&#xff0c;常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言&#xff0c;具有跨平台…...

游戏引擎学习第17天

视频参考:https://www.bilibili.com/video/BV1LPUpYJEXE/ 回顾上一天的内容 1. 整体目标&#xff1a; 处理键盘输入&#xff1a;将键盘输入的处理逻辑从平台特定的代码中分离出来&#xff0c;放入更独立的函数中以便管理。优化消息循环&#xff1a;确保消息循环能够有效处理 …...

【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量化概念与技术细节 题外话&#xff0c;在七八年前&#xff0c;一些关于表征的研究&#xff0c;会去做表征的压缩&#xff0c;比如二进制嵌入这种事情&#xff0c;其实做得很简单&#xff0c;无非是找个阈值&#xff0c;然后将浮点数划归为零一值&#xff0c;现在的Qu…...

同步互斥相关习题10道 附详解

PV操作 2016 某系统允许最多10个进程同时读文件F&#xff0c;当同时读文件F的进程不满10个时&#xff0c;欲读该文件的其他文件可立即读&#xff0c;当已有10个进程在读文件F时读&#xff0c;其他欲读文件F的进程必须等待&#xff0c;直至有进程读完后退出方可去读 在实现管…...

【Python · PyTorch】卷积神经网络 CNN(LeNet-5网络)

【Python PyTorch】卷积神经网络 CNN&#xff08;LeNet-5网络&#xff09; 1. LeNet-5网络※ LeNet-5网络结构 2. 读取数据2.1 Torchvision读取数据2.2 MNIST & FashionMNIST 下载解包读取数据 2. Mnist※ 训练 LeNet5 预测分类 3. EMnist※ 训练 LeNet5 预测分类 4. Fash…...

Git 拉取指定分支创建项目

一 背景 因为项目过大&#xff0c;只需要部分分支的代码即可。 二 实现 方法一&#xff1a;使用 --single-branch 参数 git clone 支持只拉取指定分支&#xff0c;而不是整个库的所有分支&#xff1a; git clone --branch <branch_name> --single-branch <reposi…...

CF862B Mahmoud and Ehab and the bipartiteness(二分图的性质)

思路&#xff1a;一个二分图是由两个集合组成的&#xff0c;同一个集合中的节点间不能连边&#xff0c;所以一个二分图最多有cnt[1]*cnt[2]条边&#xff0c;题目给出一个树的n-1条边&#xff0c;要我们添加最多的边数使他成为二分图&#xff0c;添加的边数就是cnt[1]*cnt[2]-n1…...

React Native 全栈开发实战班 :数据管理与状态之React Hooks 基础

在 React Native 应用中&#xff0c;数据管理与状态管理是构建复杂用户界面的关键。React 提供了多种工具和模式来处理数据流和状态管理&#xff0c;包括 React Hooks、Context API 以及第三方状态管理库&#xff08;如 Redux&#xff09;。本章节将详细介绍 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 中&#xff0c;IndexFlatL2 是一个简单的基于 L2 距离&#xff08;欧几里得距离&#xff09;进行索引的索引类型&#xff0c;但实际上&#xff0c;faiss 提供了多种索引类型&#xff0c;支持不同的度量方式和性能优化&#xff0c;您可以根据需求选…...

比rsync更强大的文件同步工具rclone

背景 多个复制&#xff0c;拷贝&#xff0c;同步文件场景&#xff0c;最大规模的是每次几千万规模的小文件需要从云上对象存储中拉取到本地。其他的诸如定期数据备份&#xff0c;单次性数据备份。 rsync是单线程的&#xff0c;开源的mrsync是多线程的&#xff0c;但适用范围没…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...