实验二:LED流水灯实验
强调:
本文章为新手提供学习参考
实验二:LED流水灯实验
控制开发板上的LED灯,独立完成一个单片机课程实验内容——实验一:能够独立控制点亮开发板上的每一个小灯,并且可以实现小灯点亮和关闭以及闪烁功能,LED闪烁的时间由自己设置。(LED闪烁)
使用的开发板原理图及本次使用的模块
进取者STC15开发板原理图
原理图
使用的模块
备注:
本次实验使用的是P0_0到P0_78个管脚,实际开发板中用杜邦线接出来,例如下图所示模块(为淘宝随机找的一张图,侵删)
LED流水灯模块背面
LED流水灯模块正面
模块1个脚提供高电平,其余脚与单片机P0口连接
实验二的代码部分
#include <reg51.h> //调用reg51头文件
#include <intrins.h>//调用intrins头文件
#define uchar unsigned char//定义uchar类型为unsigned char 储存大小1字节,值范围:0 到 255
#define uint unsigned int //定义uint类型为unsigned int 储存大小2或4个字节,值范围:0~65536
/*延迟函数,延迟0.1s*/
void Delay100ms() //@11.0592MHz,
{
unsigned char i, j, k;
_nop_();//使用_nop_()函数需要调用‘intrins.h’文件
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/*LED平移函数,默认为低电平亮灯,实现先从P0^7向P0^0移动,到P0^0再向P0^7移动*/
void shift()
{
uchar i;
for(i=0;i<8;i++)
{
P0=~(0x80>>i);//先为1000_0000然后右移,例如:i=1时,变为0100_0000。最后取反变为:1011_1111;实现第一个低电平转化为第二个低电平;
Delay100ms();//延迟
}
for(i=0;i<8;i++)
{
P0=~(0x01<<i);
Delay100ms();
}
}
/*主函数*/
void main()
{
P0=0xff;//全灭
Delay100ms();//延迟100ms
P0=0x00;//全亮
while(1)//死循环
{
shift();
}
}