【51单片机入门】实现流水灯的原理及四种方法(详细易上手型) 初学单片机,流水灯的实现是必不可少的,下面将介绍流水灯的原理及使用STC-ISP软件延时计算器生成的延时代码实现流水灯的四种方法,最后介绍如何将延时函数模块化。目录一、流水灯原理二、循环三、移位运算符四、库函数五、数组六、延时函数模块化1、Delay.h2、Delay.c3、 main.c一、流水灯原理
LED灯原理图
流水灯原理图LED的阳极串联一个电阻,然后连接电源VCC,而LED的阴极连接到单片机的P2口,当引脚(P2口)输出高电平即正极(5V)时,LED不亮;当引脚输出低电平即负极(0V)时,LED亮。通过高低变换把电压输出到引脚,从而将LED以流水灯的形式表现出来。51单片机使用的是TTL电平,规定高电平为5V,低电平为0V。在写代码时一般用1表示高电平,用0表示低电平。二、循环#include <REGX51.H>#include <INTRINS.H>void Delay(unsigned int xms) //@11.0592MHz{unsigned char i, j;while(xms–){_nop_();i = 2;j = 199;do{while (–j);} while (–i);}} //延时代码void main(){while(1){P2 = 0xFE;//1111 1110Delay(500);P2 = 0xFD;//1111 1101Delay(500);P2 = 0xFB;//1111 1011Delay(500);P2 = 0xF7;//1111 0111Delay(500);P2 = 0xEF;//1110 1111Delay(100);P2 = 0xDF;//1101 1111Delay(100);P2 = 0xBF;//1011 1111Delay(100);P2 = 0x7F;//0111 1111Delay(100);}}
通过调节Delay中的数字来控制每个LED灯的延时时间。三、移位运算符#include <REGX51.H>#include <intrins.h>void Delay(unsigned int xms) //@11.0592MHz{unsigned char i, j;while(xms–){_nop_();i = 2;j = 199;do{while (–j);} while (–i);}} //延时代码void main(){unsigned char k=0;P2 = 0x01;while(1){P2 = ~(0x01<<k);//0000 0001~1111 1110Delay(500);k++;if(k == 8){k = 0;}}}
<<左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)注意:移位运算符的操作数不能为负数,如 Num >> -1 错误四、库函数#include <REGX51.H>#include <INTRINS.H>void Delay(unsigned int xms) //@11.0592MHz{unsigned char i, j;while(xms–){_nop_();i = 2;j = 199;do{while (–j);} while (–i);}} //延时代码void main(){P2 = 0xFE;while(1){Delay(500);P2 = _crol_ (P2, 1);}}
_crol_ (a , b)将a进行b位的左位移向左循环时,从左边出去会从右边重新补入_cror_ (c , d)将c进行d位的右位移向右循环时,从右边出去会从左边重新补入五、数组#include <REGX51.H>#include <INTRINS.H>void Delay(unsigned int xms) //@11.0592MHz{unsigned char i, j;while(xms–){_nop_();i = 2;j = 199;do{while (–j);} while (–i);}} //延时代码unsigned char led[] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};void main(){unsigned char i;while(1){for(i = 0; i < 8; i++){P2 = led[i];Delay(500);}}}
六、延时函数模块化模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其他.c文件想使用其中的代码时,只需要#include “XXX.h”文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。以上一段代码为例:
1、Delay.h#ifndef __DELAY_H__#define __DELAY_H__void Delay(unsigned int xms);#endif2、Delay.cvoid Delay(unsigned int xms){unsigned char i, j;while(xms–){i = 2;j = 199;do{while (–j);} while (–i);}}3、 main.c#include <REGX51.H>#include <INTRINS.H>#include “Delay.h”void main(){P2 = 0xFE;while(1){Delay(500);P2 = _crol_ (P2, 1);}}文章为个人总结,技术有限,如有错漏还要麻烦各位看官指正。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/24820.html