在编程的过程中,使用带参数的宏有时会使得程序看起来更加直观、操作也更加方便。
如果我要点亮一个LED灯,我可以这样写
在编程的过程中,使用带参数的宏有时会使得程序看起来更加直观、操作也更加方便。
如果我要点亮一个LED灯,我可以这样写
个人觉得,今天要说的这个内容,还是有点儿技术含量。在分析代码之前,先谈点感想,我是不得不佩服写出这些代码的前辈(真乃神人也!),我只是理解这些代码就痛苦不堪,差点儿还放弃了,这些前辈却能够自己想出这些代码,我真的是佩服的五体投地。前辈在上,请接受我万分的景仰。
以下库函数均来自于STM32F1系列控制器的外设函数库。
这个本应该是刚学单片机的时候就接触的东西,可是我却是在大三的时候才来接触它,要不是可能会用到,也许我还是不会去认识它,这说明我的学习不够认真,也不够到位,很基础的外设模块现在才来学习。
一、引脚排列:平的一面对着自己,从左到右分别是1——GND,2——DQ,3——VCC,在画电路时VCC与DQ之间要接上拉电阻,不然可能会烧坏器件。
在没有硬件PWM模块时,如果要用到PWM,那我们就只能通过软件法来模拟硬件模块产生PWM信号。本文讲述是的如何通过软件法来产生一个频率固定、占空比可变的PWM信号。
首先,我们要确定单片机的晶振频率,因为要用到定时器,所以第二步要配置定时器计数的时钟周期,第三步就是确定PWM周期是多少,做完了这几点,那么PWM的频率(周期也是)就固定了,频率值计算如下:
所谓通信,就是指两个或是多个对象之间进行交流。而不同的对象之间交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是我下面要讲的通信协议。
制订通信协议的目的就是为了能够准确、可靠、有效的通信,从而使各个设备协同工作,成为一个系统,实现设计人员所需要的功能。言归正传,下面我们来谈如何制订通信协议及如何准确的接收数据。
一、经验总结:
1、最好的参考资料就是《用户指南》与《数据手册》。
2、必须要事先确立好整个工程的框架。一定要在脑海中有整个系统的框架,没有框架会耗费你大量的时间,框架确立好了,那么后面的事情就是具体的实现,往框架里填代码,添加功能。所以,系统的整体框架是非常重要的。
根据待排序的记录是否全部被放置在内存中,排序可分为:内排序和外排序。
内排序是指在排序过程中,待排序记录全部被放置在内存中。外排序是由于排序记录数量太多,不能同时放置在内存,排序过程需要在内外存之间多次交换数据才能进行。
这里主要来谈一下内排序中的几种。
首先我们先要有一个用于排序用的顺序表结构体,如下:
#define MAXSIZE 10 //用于要排序数组元素个数的最大值,可根据需要修改 typedef struct { int r[MAXSIZE + 1]; //用于存储被排序数据的数组,r[0]用作哨兵或临时变量 int length; //用于记录顺序表的长度 }SqList; //结构体定义 /*交换元素函数,经常用到*/ void swap(SqList *L, int i, int j) { int temp = L->r[i]; //中间变量 L->r[i] = L->r[j]; L->r[j] = temp; }
1、冒泡排序(Bubble Sort)
如果要你写个程序计算 1+2+3+...+99+100,你会怎么写?
这还不容易,对于我而言,毫不迟疑的做法就是用循环呗,大家来看:
int i,sum = 0; int n = 100; for(i = 1;i <= n;i++) { sum = sum + i; }
有没有其他更为简洁的方法呢?当然有,请看下面:
1、数码管闪烁
使用工具:两个定时器T0、T1(以51核为例)
实现方法:T0用作数码管正常显示,T1用于控制数码管闪烁。
具体说明:T0定时时间为1ms,在其中断里进行段位选控制;T1由按键控制打开,闪烁按键按下,开T1,定时时间64ms(可修改),闪烁控制为修改其段码,涉及到一点小算法原理。
duanxuan_mid_2[bit_6] = (duanxuan_sml[bit_6] - duanxuan_mid_2[bit_6]); //闪烁处理,改变对应段码
算法原理:如果你想控制一个数的更改,如第1次为3,第2次为9,第3次为3...,如此循环,那么,取这两数之和,即 3 + 9 = 12 ,然后在定时器里,编写代码,i = 12 - i; 其中i为每次进入定时器修改的值,它每进入一次定时器就会改变,设i初值为3,则依次变换为9,3,9,3...,利用这个原理,就可以实现闪烁,即我们用“当前数值段码”与“灭”的段码相加,得到一个“常数”,然后在定时器里用“常数” - "当前数值段码" = result,然后把这个result赋给存储段码的变量,并送显示,这时就会灭了,而下一次就会亮,当然,这里的下一次的“当前数值段码”就是result的值了,如此亮灭亮灭...,就实现了闪烁功能,闪烁间隔为T1定时时间。