单片机控制LED的闪烁是单片机入门必做的实验,下面我们看看源代码是什么样的。
1、点亮第一个LED
#include "reg52.h" sbit led=P2^0; void main() { while(1) { led=0; } }
2、LED闪烁实验
/************************************************************************************** * LED闪烁实验 * 实现现象:下载程序后D1指示灯闪烁 注意事项:无 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit led=P2^0; //将单片机的P2.0端口定义为led /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { led=0; delay(1000); //大约延时450ms led=1; delay(1000); //大约延时450ms } }
3、LED流水灯实验
/************************************************************************************** * LED流水灯实验 * 实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动 注意事项:无 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //因为要用到左右移函数,所以加入这个头文件 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define led P2 //将P2口定义为led 后面就可以使用led代替P2口 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { u8 i; led=0xfe; delay(100000); //大约延时450ms while(1) { /* for(i=0;i<8;i ) { P2=~(0x01<<i); //将1右移i位,然后将结果取反赋值到P2口 delay(100000); //大约延时450ms } */ for(i=0;i<7;i ) //将led左移一位 { led=_crol_(led,1); delay(100000); //大约延时450ms } for(i=0;i<7;i ) //将led右移一位 { led=_cror_(led,1); delay(100000); //大约延时450ms } } }
单片机的学习中,实践是非常重要的一个环节,一定要从最基础的实验做起,这样在编写大型程序时才可以做到得心应手。