蓝桥杯单片机刷题——E2PROM记录开机次数
设计要求
使用E2PROM完成数据记录功能,单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1,按下按键S4,串口发送复位次数。串口发送格式如下:
Number:1
备注:
单片机IRC振荡器频率设置为12MHz。
按键模式:BTN;扩展方式:IO模式。
串口通信波特率设置为 9600。
代码:
sys.h
#ifndef __SYS_H__
#define __SYS_H__#include <STC15F2K60S2.H>
#include "intrins.h"
sbit scl=P2^0;
sbit sda=P2^1;
extern bit flag_send;//用于标明是否发送数据
extern bit flag_set;//用于标明是否重置数据(非题意)
void init74hc138(unsigned char n);
void init();
void w_eeprom(unsigned char addr,unsigned char date);
unsigned char r_eeprom(unsigned char addr);
void Key_Loop();#endif
main.c
#include "sys.h"
unsigned char eeprom_count=0;//EEPROM中的计数值
unsigned char *str = "Number: ";
bit flag_key=0;
void UartInit(void) //9600bps@12.000MHz
{SCON = 0x50; //8位数据,可变波特率AUXR |= 0x40; //定时器时钟1T模式AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TL1 = 0xC7; //设置定时初始值TH1 = 0xFE; //设置定时初始值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时ES=1;EA=1;
}
//发送一个字节数据到串口
void send_uart_date(unsigned char date){SBUF=date;while(TI==0);TI=0;
}
//发送字符串到串口
void send_uart_str(unsigned char *str){while(*str!='\0'){send_uart_date(*str++);}
}
//将数字转换为字符串
void num_transt_str(unsigned char num){if(num>=100)send_uart_date(num/100+'0');if(num>=10)send_uart_date((num%100)/10+'0');send_uart_date(num%10+'0');
}
void Timer0_Init(void) //100微秒@12.000MHz
{AUXR |= 0x80; //定时器时钟1T模式TMOD &= 0xF0; //设置定时器模式TL0 = 0x50; //设置定时初始值TH0 = 0xFB; //设置定时初始值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时ET0 = 1; //使能定时器0中断EA=1;
}
void main(){init();eeprom_count=r_eeprom(0x00);eeprom_count++;w_eeprom(0x00,eeprom_count);UartInit();Timer0_Init();while(1){if(flag_key){flag_key=0;Key_Loop();}if(flag_send){flag_send=0;send_uart_str(str);//发送Number:num_transt_str(eeprom_count);//发送计数器数值send_uart_str("\r\n");//换行}if(flag_set){//重置flag_set=0;eeprom_count=0;w_eeprom(0x00,eeprom_count);}}
}
void uart() interrupt 4
{if(RI){RI=0;}
}
void Timer0_Isr(void) interrupt 1
{static unsigned char count=0;count++;if(count==50){count=0;flag_key=1;}
}
sys.c
#include "sys.h"
unsigned char keyval,keyold,keydown,keyup;
bit flag_send=0;
bit flag_set=0;
void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void Key_Loop(){keyval=0;if(P33==0)keyval=1;if(P32==0)keyval=2;keydown=keyval&(keyold^keyval);keyup=~keyval&(keyold^keyval);if(keyval==1&&keyold!=keyval)flag_send=1;if(keyval==2&&keyold!=keyval)flag_set=1;keyold=keyval;
}
iic.c
#include "sys.h"#define DELAY_TIME 5
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);
}
//向EEPROM中写入一个字节数据
void w_eeprom(unsigned char addr,unsigned char date){I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CSendByte(date);I2CWaitAck();I2CStop();
}
//从EEPROM中读取一个字节数据
unsigned char r_eeprom(unsigned char addr){unsigned char temp;I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0xa1);I2CWaitAck();temp=I2CReceiveByte();I2CSendAck(1);I2CStop();return temp;
}
测试结果

相关文章:
蓝桥杯单片机刷题——E2PROM记录开机次数
设计要求 使用E2PROM完成数据记录功能,单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1,按下按键S4,串口发送复位次数。串口发送格式如下: Number:1 备注: 单片机IRC振荡器频率设置为12MHz。 …...
聚合根的特性
聚合根的特性 聚合根是实体,拥有实体的业务属性和行为,同时也是聚合的管理者,负责协调聚合内的实体和值对象,按照固定的业务规则,完成业务逻辑。 聚合根是聚合对外唯一的接口人,聚合之间以聚合根ID关联的方…...
基于盛科CTC7132交换机核心模块
简介 基于盛科CTC7132 SOC方案构建,通过板对板高速连接器引出32路10G SerDes接口、1路PCIex1、2路管理SGMII接口、3路Uart接口(1路调试串口2路功能串口)、4路I2C接口(2路SOC部分2路PPU部分)、5路SMI接口(1路管理口4路业务口&…...
How to install OpenJ9 JDK 17 on Ubuntu 24.04
概述 OpenJ9 是一款由 IBM 开发并开源的 Java 虚拟机(JVM),现由 Eclipse 基金会管理(名为 Eclipse OpenJ9)。它旨在提供高性能、低内存消耗和快速启动时间,特别适用于云原生和容器化环境。 关键特性 …...
【即插即用涨点模块-卷积】SPDConv空间深度卷积,助力小目标与低分辨有效涨点【附源码+注释】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
全流程剖析需求开发:打造极致贴合用户的产品
全流程剖析需求开发:打造极致贴合用户的产品 一、需求获取(一)与用户沟通(二)观察用户工作(三)收集现有文档 二、需求分析(一)提炼关键需求(二)建…...
《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)
基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上) 摘要 本文详细探讨了一个基于Flask框架的高性能博客系统的设计与实现,该系统集成了本地AI大模型生成内容的功能。我们重点关注如何在高并发、高负载状态下保持系统的高性能和…...
使用 Docker Compose 在单节点部署多容器
Docker Compose 是什么 Docker Compose 是一个用于运行多容器应用的工具, 通过一个docker-compose.yml文件, 配置应用的服务、网络和卷,然后使用简单的命令启动或停止所有服务 为什么需要 Docker Compose 当你有一个包含多个相互依赖的容器应用时,手动…...
STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】
安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法: 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径,避免占用C盘空间。 Core就是Keil(MDK-ARM)的…...
在 React 中,组件之间传递变量的常见方法
目录 1. **通过 Props 传递数据**2. **通过回调函数传递数据**3. **通过 Context API 传递数据**4. **通过 Redux 管理全局状态**5. **通过事件总线(如 Node.js 的 EventEmitter)**6. **通过 Local Storage / Session Storage**7. **通过 URL 查询参数传…...
拦截器和过滤器详解
在 Java Web 开发中,拦截器(Interceptor)和过滤器(Filter)是两种常见的请求处理机制,它们用于对请求和响应进行预处理和后处理 1. 过滤器(Filter) 1.1 作用 Filter 主要用于对 请求…...
多线程—JUC(java.util.concurrent)
上篇文章: 多线程—synchronized原理https://blog.csdn.net/sniper_fandc/article/details/146713129?fromshareblogdetail&sharetypeblogdetail&sharerId146713129&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 Calla…...
软件工程面试题(十二)
1、文件和目录(i/o)操作,怎么列出某目录下所有文件?某目录下所有子目录,怎么判断文件或目录是否存在?如何读写文件? 列出某目录下所有文件:调用listFile(),然后判断每个File对象是否是文件可以调用 isFile(),判断是否是文件夹可以调用isDirectory(),判断文件或目…...
从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)
写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度…...
多线程 - 线程安全引入
写一个代码,让主线程创建一个新的线程,由新的线程负责完成一系列的运算(比如:1 2 3 ... 1000),再由主线程负责获取到最终结果。 但打印结果为 result 0,略微思考,明白了要让 t 线…...
笔记:基于环境语义的通感融合技术,将传统通信由“被动接收”转为“主动感知”
《基于计算机视觉的感知通信融合理论与关键技术研发进展》 介绍了联合研发的基于环境语义的通感融合技术研发进展。 观点:利用环境感知信息或环境语义辅助通信的通感融合技术成为6G重要方向之一 产出:基于环境感知的毫米波波束管理方案,并…...
【面试八股】:CAS指令
一、CAS 面试题 1. 说说CAS、CAS有什么问题(ABA)?(美团一面) Compare And Swap 对比交换(原子指令) CAS是 CPU指令 操作系统原生 API,JVM对它进行了封装(C),供我们使用。 通过判断 内存 和 …...
matplot显示中文
import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties 指定字体文件路径 font_path ‘/usr/share/fonts/SIMHEI.TTF’ font_prop FontProperties(fnamefont_path) 示例代码 plt.plot([1, 2, 3], [4, 5, 6]) plt.title(‘示例图表’, fon…...
mac部署CAT监控服务
在 Mac 上部署美团点评开源的 CAT 监控服务端,可以按照以下步骤操作: 1. 环境准备 1.1 安装依赖 确保已安装以下工具: JDK 8(建议 OpenJDK 11) MySQL 5.7(存储监控数据)(8.0不支持…...
实变函数:集合与子集合一例(20250329)
题目 设 r , s , t r, s, t r,s,t 是三个互不相同的数,且 A { r , s , t } A \{r, s, t\} A{r,s,t}, B { r 2 , s 2 , t 2 } B \{r^2, s^2, t^2\} B{r2,s2,t2}, C { r s , s t , r t } C \{rs, st, rt\} C{rs,st,rt} 若 A B C A B C ABC 则 { r , s…...
软件工程之需求工程(需求获取、分析、验证)
一、需求获取(Requirements Elicitation) 1. 定义与目标 需求获取是通过与用户、利益相关者等交互,识别并捕获系统需求的过程,目标是明确用户意图与业务目标,避免后期因需求偏差导致返工。 2. 主要方法 问卷法&…...
c++第三课(基础c)
1.前文 2.break 3.continue 4.return 0 1.前文 上次写文章到现在,有足足这么多天(我也不知道,自己去数吧) 开始吧 2.break break是结束循环的意思 举个栗子 #include<bits/stdc.h> using namespace std; int main(…...
基于Elasticsearch的个性化内容推荐技术实践
近期开发了一款新的app,并深度参与的全流程的构建及开发,在开发首页内容推荐的时候,写了一套通过ES实现的推荐算法,小有所得,写此博客记录一下。 一、Elasticsearch在推荐系统中的核心作用 1.1 实时索引与检索 Elast…...
el-radio-group 中 el-radio-button value未能绑定上数值数据
这样绑定到admin后不会随着admin的值显示 在value加上 : 后成功显示...
Python Cookbook-4.13 获取字典的一个子集
任务 你有一个巨大的字典,字典中的一些键属于一个特定的集合,而你想创建一个包含这个键集合及其对应值的新字典。 解决方案 如果你不想改动原字典: def sub_dict(somedict,somekeys,default None):return dict([(k, somedict.get(k,default)) for k…...
JSP(实验):带验证码的用户登录
[实验目的] 1.掌握应用request对象获取表单提交的数据。 2.掌握解决获取表单提交数据产生中文乱码的问题。 3.掌握使用response对象进行定时跳转功能。 4.掌握使用session对象完成登录和注销功能。 [实验要求] 设计带验证码…...
自然语言模型的演变与未来趋势:从规则到多模态智能的跨越
自然语言模型的演变与未来趋势:从规则到多模态智能的跨越 自然语言处理(NLP)作为人工智能领域最具挑战性的分支之一,在过去几十年经历了翻天覆地的变化。从最初基于规则的系统到如今拥有万亿参数的大型语言模型(LLMs),这一技术革新不仅彻底改…...
集多功能为一体的软件,支持批量操作。
今天我给大家分享一个超实用的小工具,真的是太好用了!这个软件是吾爱大神无知灰灰制作的,它能直接一键把webp格式的图片转换成png格式。 webp转为png 一键操作,支持压缩 其实,作者最近在工作中经常遇到webp格式的图片…...
linux压缩指令
今天我们来了解一下linux压缩指令,压缩是我们文件传输的一种重要手段,对此,我们是必须学习压缩指令的,那么话不多说,来看. 1.grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。 基本语法&#x…...
C++细节知识for面试
1. linux上C程序可用的栈和堆大小分别是多少,为什么栈大小小于堆? 1. 栈(Stack)大小 栈默认为8MB,可修改。 为什么是这个大小: 安全性:限制栈大小可防止无限递归或过深的函数调用导致内存…...
