您的位置 首页 传感器

第二节:delay()延时完成LED灯的闪耀

开场白:上一节鸿哥列出了初学者七大误区,到底什么才是初学者关注的核心?那就是裸机奔跑的程序结构。一个好的程序结构,本身就是一个

开场白:

上一节鸿哥列出了初学者七大误区,究竟什么才是初学者重视的中心?那便是裸机奔驰的程序结构。一个好的程序结构,自身便是一个微型的多使命操作系统。鸿哥教给咱们的便是怎么编写这个简略的操作系统。在main函数循环顶用switch句子完成多使命并行处理的使命切换,再外加一个定时器中止,这两者的结合便是鸿哥多年来一切实战项目的中心。鸿哥的程序结构看似简略,实际上便是那么简略。咱们不必着急,本篇连载文章现在才正式开端,这一节我要教会咱们两个知识点:
榜首点:鸿哥初次提出的“三区一线”理论。此理论把程序代码分红三个区,一个延时分割线。
第二点:delay()延时的用处。
(1)硬件渠道:根据朱兆祺51单片机学习板
(2)完成功用:让一个LED闪耀
(3)源代码解说如下:
#include “REG52.H”
void initial_myself();
void initial_peripheral();
void delay_short(unsigned int uiDelayshort);
void delay_long(unsigned int uiDelaylong);
void led_flicker();
/* 注释一:
* 吴坚鸿个人的命名风格:但凡输出后缀都是_dr,但凡输入后缀都是_sr。
* dr代表drive驱动,sr代表sensor感应器
*/
sbit led_dr=P3^5;
void main() //学习关键:深刻理解鸿哥初次提出的三区一线理论
{
/* 注释二:
* initial_myself()函数归于鸿哥三区一线理论的榜首区,
* 专门用来初始化单片机自己的寄存器以及单个外围要求呼应速度快的输出设备,
* 避免刚上电之后,由于输出IO口电平状况不确定而导致外围设备误动作,
* 比方继电器的误动作等等。
*/
initial_myself();
/* 注释三:
* 此处的delay_long()延时函数归于榜首区与第二区的分割线,
* 延时时刻一般是0.3秒到2秒之间,等候外围芯片和模块上电安稳。
* 比方液晶模块,AT24C02存储芯片,DS1302时钟芯片,
* 这类芯片有个特色,一般都是跟单片机进行串口或并口通讯的,
* 而且不要求上电当即处理的。
*/
delay_long(100);
/* 注释四:
* initial_peripheral()函数归于鸿哥三区一线理论的第二区,
* 专门用来初始化不要求上电当即处理的外围芯片和模块.
* 比方液晶模块,AT24C02存储芯片,DS1302时钟芯片。
* 本程序根据朱兆祺51单片机学习板。
*/
initial_peripheral();
/* 注释五:
* while(1){}主函数循环区归于鸿哥三区一线理论的第三区,
* 专门用来编写被循环扫描到的非中止应用程序
*/
while(1)
{
led_flicker(); //LED闪耀应用程序
}
}
void led_flicker() //LED闪耀应用程序
{
led_dr=1; //LED亮
delay_short(50000); //延时50000个空指令的时刻
/* 注释六:
* delay_long(100)延时50000个空指令的时刻,由于内嵌了一个500次的for循环
*/
led_dr=0; //LED灭
delay_long(100); //延时50000个空指令的时刻
}
/* 注释七:
* delay_short(unsigned int uiDelayShort)是小延时函数,
* 专门用在时序驱动的小延时,一般uiDelayShort的数值取10左右,
* 最大一般也不超越100.本例为了解说此函数的特色,取值规模超越100。
* 此函数的特色是时刻的细分度高,延时时刻不宜过长。uiDelayShort数值
* 的巨细就代表里边履行了多少条空指令的时刻。数值越大,延时越长。
* 时刻精度不要故意去核算,感觉差不多就行。
*/
void delay_short(unsigned int uiDelayShort)
{
unsigned int i;
for(i=0;i
{
; //一个分号相当于履行一条空句子
}
}
/* 注释八:
* delay_long(unsigned int uiDelayLong)是大延时函数,
* 专门用在上电初始化的大延时,
* 此函数的特色是能完成比较长时刻的延时,细分度取决于内嵌for循环的次数,
* uiDelayLong的数值的巨细就代表里边履行了多少次500条空指令的时刻。
* 数值越大,延时越长。时刻精度不要故意去核算,感觉差不多就行。
*/
void delay_long(unsigned int uiDelayLong)
{
unsigned int i;
unsigned int j;
for(i=0;i
{
for(j=0;j<500;j++) //内嵌循环的空指令数量
{
; //一个分号相当于履行一条空句子
}
}
}
void initial_myself() //初始化单片机
{
led_dr=0; //LED灭
}
void initial_peripheral() //初始化外围
{
; //本例为空
}
总结陈词:
鸿哥初次提出的“三区一线”理论概略了各种项目程序的底子分区。我后续的程序就按此分区编写。
Delay()函数的长延时适用在上电初始化。
Delay()函数的短延时适用在驱动时序的脉冲延时,此刻的时刻不能太长,本例中暂时没有列出这方面的比如,在后面的章节中会说到。
在本例源代码中,在led_flicker()闪耀应用程序里用到的两个延时delay,它们的延时时刻都太长了,在实战项目中必定不能用这种延时,由于耗费的时刻太长了,其它使命底子没有机会履行。那怎么办呢?咱们应该怎么改进?欲知概况,请听下回分解—–累计主循环次数使LED灯闪耀。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/262130.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部