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

本文详细介绍了编程过程中创建项目、使用特定芯片、编写main、tim和seg模板,以及底层驱动如DS1302、OneWire、I2C和EEPROM的使用方法。作者强调理解和默写模板代码的重要性,并分享了测试和优化步骤,旨在帮助读者提高技术水平,备战比赛。
摘要由CSDN通过智能技术生成

源码:(百度网盘)

链接: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主怎么使用的

unsigned char 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按下,就可以显示你之前加加过的内容了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值