个人代码分享(底层模板函数和三大模板)2024.3.6

news2024/9/23 17:21:38

源码:(百度网盘)

链接:https://pan.baidu.com/s/1jdfrQOGCWJaQgSUPEWcfdw?pwd=1234 
提取码:1234

说明:

        从复习到应用所有学到的东西去做真题,笔者对于之前发过的文章里面的代码有着很多改动,但是原理是一样的,学懂了原理来看这篇文章,会更加得心应手,不过对于这篇文章的代码,看不懂,也要记住,因为比赛的时候,要先把所有模板都默写出来,然后再在基础之上完成题目逻辑,所以,我们能熟练默写模板代码,非常重要,至于如何使用这些模板函数,笔者都是跟着up主学习的,他的空间网址是:biubiu_name个人动态-biubiu_name动态记录-哔哩哔哩视频

(本篇文章会比较长,可以选择性观看)(因为是一路测试过去的,所以红框表示要注意的地方和新增的代码内容)

一、创建项目的习惯

芯片选择

勾选创建hex文件

        我们使用stc15f2k60s2这个头文件,是需要添加路径的,不然就会显示无法打开文件的bug而添加路径,需要找到对应的文件夹,到时在电脑上找不到可以问问志愿者,就存放在keil安装的文件夹中。

文件夹分类

        虽然不会自动在你的文件夹中自动生成这俩个文件夹,但是在keil中分一下类还是舒服的.

二、开始着手写三大模板(顺序就按笔者这个来)

main

tim

说明:官方数据资源包里面有俩个版本的烧录软件,其中有一个是可以帮你记住中断号的,一般是使用定时器1来实现绝大多数功能。(中断函数就丢到main里面)

        tim写好之后就来到main里面写,就可以将基本要使用到的三大函数先把框架写了。

seg

        我们创建.h和.c文件可以像下面这样复制粘贴,然后点F2键来一起重命名,到时再把不要的代码删掉,可以节约时间。

        这个设备选择函数我们之前的文章都有讲到很多,经常用到,但是有点改动,优化了影响到下一次P2口使用的问题。

LED函数+蜂鸣器关闭

        咱们写到这里就可以开始测试LED能不能正常工作了(也能测试定时器有没有写对)

给ucLed赋初值,实验现象就是Led1 3 5 7四个灯亮起。

seg中的转化函数

        教你们节约时间,就是先写case :temp=;break;然后复制粘贴十二个,留俩个给特殊字符备用

        我们这个模板是直接使用代码来赋值的,一般我们的板子都是共阳极,官方也会提供这个表,到时就像笔者一样,把代码复制到keil里面,再将对应代码复制粘贴到temp=后面,最后将数字补上就行。

seg中的显示函数

        我们将所有在seg文件写的函数都在其对应.h文件里面声明之后,就可以来到main里面写了。

实验现象就是数码管显示12|熄灭| 3.4-PC(也就是sprintf里面字符串的内容)



key(3.9号优化版本(含双按)) 

 

        双按的检测只在key这个文件的函数中进行,来到main中写测试内容。实验现象:按键4和5同时按下可以让ucLed加加,Led灯按照二进制码亮。




 

key

矩阵

        也是可以像这样节约默写时间。

独立

        写完key就可以来到main里面开始写测试的内容。实验现象就是一开始在数码管最后俩位显示

00,按键7按下就可以让数字加1。

三、三个底层驱动模板的完善

        比赛时一般都会使用到俩个。也是默写好知道怎么用就行,这底层驱动文件里面要写的函数也是基本上固定好的。

        下面三个就是官方会提供的三个参考代码。笔者的习惯是在keil中先把文件创建好,再用记事本打开文件,复制粘贴到keil中。

ds1302(时间)

        完整第一步就是根据原理图将引脚定义写好。

        上面的地址要与数据手册的对应上,比如写时的地址是0x84,同时你在main里面定义时间数组时,顺序也要对的上,这个到你们出bug的那一天会明白的(狗头)

        实验现象就是,数码管上显示动态的时间23-59-55,正常进行时间流逝。(这个芯片自己会计算边界,所以超过24时就会全部清零变成00-00-00的时间继续流逝)

onewire(温度)

        这个文件是最简单的,而且就这样写就好了,不需要注意什么影响到别的地方,像这样写好之后就可以再main中使用了。

        控制字这些可以在数据手册中找到。这个函数的代码逻辑是比较好,所以理解了,记起来就很容易(初始化-》跳过-》开始温度转化-》初始化-》跳过-》读取-》赋值-》返回值)

        写完后来到main里面写测试内容,就有一些小地方要注意。

        写完下面这步之后就可以烧录看实验现象:按键4按下,数码管显示(温度值)C,捏住温度芯片,温度显示值升高。

iic(数模转化和eeprom写读)

        同样是先将官方提供的参考程序的代码复制到我们的文件之中,就可以开始写函数了。(测试的话,等笔者想到会完善的)

AD和DA俩个函数

这里的俩个函数在主函数中是测试不了,至少笔者是不会测试
然后就是,这里有些知识,不懂的话可以去之前的文章先把原理搞懂一点先,
因为跟我之前的文章的代码有些不一样,但是原理是一样的
然后这俩个函数怎么使用,就去看那个第八届那个文章那里看那个up主怎么使用的

void pcf8591_Adc(unsigned char channel)
{
	unsigned char temp;
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	
	I2CSendByte(0x40|channel);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0x91);
	I2CWaitAck();
	
	temp = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	
	return temp;
}

void pcf8591_Dac(unsigned char dat)
{
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	
	I2CSendByte(0x41);
	I2CWaitAck();
	
	I2CSendByte(dat);
	I2CWaitAck();
	I2CStop();
}

 eeprom读函数和写函数

        都是通过总线来控制,所以这四个函数代码差不太多的结构,地址和控制字都可以在数据手册中找到。

eeprom函数, 俩个,一个读取一个写入,
参数有:数据数组eeprom char; 存放地址addr; 存放数据个数num
void eeprom_write(unsigned char *eeprom_char,unsigned char addr,unsigned char num)
{
	I2CStart();
	I2CSendByte(0xA0);
	I2CWaitAck();
	
	I2CSendByte(addr);
	I2CWaitAck();
	
	while(num--)
	{
		I2CSendByte(*eeprom_char++);
		I2CWaitAck();
		I2C_Delay(200);
	}
	I2CStop();
}


void eeprom_read(unsigned char *eeprom_char,unsigned char addr,unsigned char num)
{
	I2CStart();
	I2CSendByte(0xA0);
	I2CWaitAck();
	
	I2CSendByte(addr);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xA1);
	I2CWaitAck();
	
	while(num--)
	{
		*eeprom_char++ = I2CReceiveByte();
		if(num) I2CSendAck(0);
		else I2CSendAck(1);
	}
	I2CStop();
}

        写好之后来main写测试内容。实验现象:数码管一开始全部熄灭,按键7按下亮起,(第一次会显示之前存过的数据,你们可以自己想想办法从你开始的数据显示),数码管显示内容,再让按键4按下,就可以让数字加加,再按键7按下,可以切换到第二个数字加加,按键7第四次按下,数码管全部熄灭,数据存进eeprom,断电,在复点,按键7按下,就可以显示你之前加加过的内容了。

         最后祝愿读者都能取得一个好成绩!

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

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

相关文章

用msvc编译器的cl.exe将gcc编译器的.s汇编文件转masm编译器的.asm文件

用msvc编译器的cl.exe将gcc编译器的.s汇编文件转masm编译器的.asm文件 cl /nologo /X /II:/code/reactos-master/sdk/include/asm /II:/code/reactos-master/output-VS-amd64-sln/sdk/include/asm -II:/code/reactos-master/sdk/include -II:/code/reactos-master/sdk/include…

051-WEB攻防-前后台功能点文件下载文件读取文件删除目录遍历目录穿越

051-WEB攻防-前后台功能点&文件下载&文件读取&文件删除&目录遍历&目录穿越 #知识点: 1、文件安全-前后台功能点-下载&读取&删除 2、目录安全-前后台功能点-目录遍历&目录穿越 演示案例: ➢文件安全-下载&删除-案例…

Centos 安装 redis【最简单】

Centos7 使⽤ yum 安装 ⾸先安装 scl 源, 再安装 redis (因为 Centos7 yum 提供的软件包只有 3.0 版本的 Redis ,太老了,我们要安装 redis 5 系列的) yum install centos-release-scl-rh yum install rh-redis5-redis 创建符号…

阿里云99计划优惠:云服务器租用价格61元、99元、165元

阿里云99计划还有谁不知道么?阿里云不杀熟,新老用户同享,阿里云服务器99元一年,续费也是99元,续费不涨价家人们,2024年阿里云把云服务器价格打下来了,2核2G、2核4G、4核8G、4核16G、8核16G、8核…

《在“裸奔”时代下如何保护网络隐私》

引言 在信息时代的今天,网络已经成为我们生活中不可或缺的一部分。然而,随着网络的普及和技术的发展,网络安全和隐私保护问题也变得越来越严峻。特别是在这个所谓的“裸奔”时代,我们的个人信息和隐私正面临着前所未有的挑战。因此,保护网络隐私变得尤为重要。 网络安全…

吴恩达deeplearning.ai:机器学习的开发过程与优化方法

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 我想在接下来分析下开发机器学习系统的过程,这样当你自己动手时,能够做出更加正确的判断。 机器学习开发的迭代 Iterative loop of ML development 决定模型架构 第…

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

【uniapp】uniapp小程序中实现拍照同时打开闪光灯的功能,拍照闪光灯实现

一、需求前提 特殊场景中,需要拍照的同时打开闪光灯,(例如黑暗场景下的设备维护巡检功能)。 起初我是用的uviewui中的u-upload组件自带的拍照功能,但是这个不支持拍照时打开闪光灯,也不支持从通知栏中打开…

哈希表应用

例题 在这里使用一个简化版的问题进行分析:给定N个自然数,值域是,求出这N个自然数中共有多少个不同的自然数。 分析 如果值域是,那么可以利用之前介绍过的计数排序算法解决问题。定义一个的大数组a,每个位置a[x]所对…

vue 使用 PrintJs 实现打印pdf效果

一、print.js介绍 Print.js主要是为了帮助我们直接在应用程序中打印PDF文件,而无需离开界面,并且不使用嵌入。对于用户不需要打开或下载PDF文件的特殊情况,他们只需要打印它们。 例如,当用户请求打印在服务器端生成的报告时&…

Spring web MVC(入门)

1、什么是MVC(一种思想) Model View Controller : Model—模型 View—视图 Controller—控制器 2、Spring MVC是一种实现(我们现在学的是Spring web,Spring mvc过时了) View属于前端问题我们后端人员不必太过于关注…

Java基础 - 8 - 算法、正则表达式、异常

一. 算法 什么是算法? 解决某个实际问题的过程和方法 学习算法的技巧? 先搞清楚算法的流程,再直接去推敲如何写算法 1.1 排序算法 1.1.1 冒泡排序 每次从数组中找出最大值放在数组的后面去 public class demo {public static void main(S…

JVM——执行引擎

文章目录 1、概述2、计算机语言的发展史2.1、机器码2.2、汇编语言2.3、高级语言2.4、字节码 3、Java代码编译和执行过程4、解释器5、JIT编译器5.1、为什么HotSpot VM同时存在JIT编译器和解释器5.2、热点代码探测确定何时JIT5.3、设置执行模式5.4、C1编译器和C2编译器 6、AOT编译…

python实现桶排序

桶排序(Bucket Sort)是一种排序算法,它将待排序的元素分到有限数量的桶(buckets)中,然后分别对每个桶中的元素进行排序,最后按照顺序将所有的桶中的元素依次取出,即可得到有序序列。…

深入了解Kafka中Topic的神奇之处

欢迎来到我的博客,代码的世界里,每一行都是一个故事 深入了解Kafka中Topic的神奇之处 前言Topic的基本概念Kafka Topic 的定义:Kafka Topic 的基本原理:为何 Topic 是 Kafka 消息传递的核心组成部分: 创建和配置Topic创…

FairScale 库测试实验(一)-- 大模型训练基础之模型并行

DDP的分布式训练方法采用数据并行方式,相当于通过增大数据的batch来加快训练。但对于大模型(LLM)来说,DDP已经不适用了。因为LLMs的模型本身太大,一块GPU都放不下怎么可能去复制从而实现数据并行呢。所以LLM的训练采用…

Ansible常用模块详解

Ansible常用模块详解一、Ansible简介1、Ansible是什么?2、Ansible是怎么工作的?3、Ansible的特性 二、Ansible 环境安装部署三、Ansible 命令行模块1、command 模块2、shell 模块3、cron 模块4、user 模块5、group 模块6、copy 模块7、file 模块8、hostn…

阿里云服务器没有国外地域吗?

阿里云地域没有国外节点?有,阿里云服务器国外地域美国、日本、新加坡、韩国、英国及德国等,阿里云服务器地域遍布全球,共29个地域可选。如果您在购买阿里云服务器时,没有国外地域可选,那是因为活动上提供的…

基于SSM框架的婚庆平台设计与实现

目 录 摘 要 I Abstract II 引 言 1 1相关技术 3 1.1 SSM框架简介 3 1.2 MySQL数据库简介 3 1.3 MVC设计模式简介 3 1.4 本章小结 4 2系统分析 5 2.1功能需求 5 2.1.1 用户功能需求 5 2.1.2 管理员功能需求 6 2.2非功能需求 10 2.3本章小结 10 3系统设计 11 3.1总体设计 11 3.…

spark 实验二 RDD编程初级实践

目录 一. pyspark交互式编程示例(学生选课成绩统计) 该系总共有多少学生; 该系DataBase课程共有多少人选修; 各门课程的平均分是多少; 使用累加器计算共有多少人选了DataBase这门课。 二.编写独立应用程序实现数…