历史上的今天
今天是:2025年02月01日(星期六)
2021年02月01日 | 51单片机入门led闪烁程序
2021-02-01 来源:eefocus
简介:51单片机入门led闪烁程序 这一节简单讲下proteus仿真软件的使用,关键在于需要的元器件的代号,比如电阻是resistor,电容是capacitor等等,不过不用刻意去记,用得多了自然就记住了,碰到新的元器件就网上查找。 上图中的例子是单片机的最小系统以及LED灯,......
这一节简单讲下proteus仿真软件的使用,关键在于需要的元器件的代号,比如电阻是resistor,电容是capacitor等等,不过不用刻意去记,用得多了自然就记住了,碰到新的元器件就网上查找。

上图中的例子是单片机的最小系统以及LED灯,左侧栏里显示了这一原理图的元器件列表,如果要添加某元器件,那么就单击“P”,就会弹出选择元器件的对话框,包含了proteus自带的所有元器件,这个时候就需要输入元器件的代号进行查找,或者明确知道元器件的类别,直接一级一级搜都是可
这一节要使LED进行闪烁,可想而知LED的闪烁需要P0.0电平高低以一定频率变换,频率越快那么LED闪烁频率也越快。知道了这一点,相应C代码就很容易了。
#include
sbit led = P0^0;
void delayxms(unsigned int xms);
void main()
while(1)
led = 0; //LED发光
delayxms(1000); //延时1s
led =1; //LED熄灭
delayxms(1000); //延时1s
void delayxms(unsigned int xms) //延时函数
unsigned int i,j;
for(i=xms;i>0;i--) //通过for循环嵌套,实现xms延时
for(j=110;j>0;j--);
这一段C代码相比第一节,多了一个带参子函数delayxms,每次赋值xms的不同,那么该函数实现的延时时间也就不同,如本例中实现1s延时,那么xms就赋值1000。在编写单片机程序时要养成好的编程习惯,在实际项目中函数会有很多个,而且常见的都是多个头文件和源文件分开。因此在写程序的时候,我们可以这样理解,就是程序有两大部分,一部分是变量和函数的声明区,就是告诉单片机我这段程序里要用到什么变量和函数;第二部分就是功能实现,也就是声明的函数的具体实现代码。本例中的C代码,在包含了头文件之后,声明了led和delayxms函数,告诉单片机接下来的代码中操作led实际上就是操作P0.0,delayxms函数的参数类型是无符号整型且无返回值。为什么delayxms函数就能实现xms的延时呢?这里要说明下单片机的时钟周期。
时钟周期
时钟周期是单片机周期中的最小单位,定义为时钟频率的倒数,如本例中时钟频率是11.0592MHz,那么时钟周期就是其倒数。一个机器周期等于12个时钟周期,约等于1.09us。在一个时钟周期内,单片机完成最基本的一个动作,就相当于人的心脏跳动。显然单片机的时钟频率越高,单片机工作速度就越快,当然这局限于单片机的硬件设计,高级的单片机如飞思卡尔,STM32等带有倍频功能。单片机中的C代码,每执行一次都是需要时间的。通过KEIL软件仿真中的断点功能,我们可以计算出代码执行所需的时间,这就是为什么delayxms函数这么写的原因,当然还能做得更加精确,那就是运用单片机的内置模块定时器,我们放到第三节课来讲。
另外这段C代码中出现while循环和for循环,本质上是一样的,两者循环都是满足一定条件时循环继续,而条件不满足时则跳出循环。首先说下main函数中的while循环,while循环理解起来非常直观,当条件为真(非零)时循环就进行,因为单片机中的代码是顺序执行的,如果没有这个while(1)的死循环,那么实现的效果就是LED发光和熄灭一次,不能进行第二次的发光,因为程序已经执行完毕。对于延时函数中的for循环,for循环中的第一部分是控制变量的初始值,第二部分是控制变量要满足的条件,第三部分是执行一次循环后对控制变量的操作。如本例中首先i=xms满足i>0的条件,那么就进入for循环,之后对i变量减1,如果还满足i>0的条件,那么循环继续,就是这么简单。
下一篇:关于单片机引脚读写操作
史海拾趣
|
我的问题是, 想通过串口将两台计算机连接起来, 需要哪些硬件? 我的工作环境, HP台式机Vista操作系统, Dell笔记本XP操作系统, 我知道COM1和USB都串口. 我想知道, 分别用COM1连COM1, COM1连USB, USB连USB都需要些什么配置. 硬件需要准备什么, 在操 ...… 查看全部问答> |
|
现在有如下一个功能要实现: 把用作Console口的那个串口暂时用作他用(即当作一个纯的串口用来传送数据,例如下载程序),然后再恢复成console。 如下是我的实现方案: 首先通过IO重映射来取消console终端: ioGlobalStdSet(STD_IN, 0); ioGlo ...… 查看全部问答> |
|
请问IAR for msp430如果要用来开发8051需要下载补充什么? 请问IAR for msp430如果要用来开发8051怎么办?再下载一个for 8051的版本?安装的时候有无冲突?官网那种全系列的有破解的么?… 查看全部问答> |
|
1、 我今天使用IAR6.3对STM32进行下载,出现这样的错误: fatal error:Communication timed out:Requested 1 bytes,received 0 bytes! session aborted! 开始以为是JLINK有问题了,但是我返回用Keil下载又可以用,不知道是为什么,是不是 ...… 查看全部问答> |




