STC51单片机实例之04花样流水灯

/***********************************方法一**************************
* 描述 : 本实验,让8个LED不停显示依照规律轮流显示。
首先,8个LED分别两次间隔显示。然后高4位显示和低4位显示。
最后间隔全亮、全灭两次。

***********************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int

/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}

/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
while(1)
{
/*下面四行用于控制LED每隔一个亮*/
P0 = 0xaa;
Delay(50);
P0 = 0x55;
Delay(50);

/*下面四行用于控制LED每隔一个亮*/
P0 = 0xcc;
Delay(50);
P0 = 0x33;
Delay(50);

/*下面四行用于控制LED 高四位 或者 低四位亮*/
P0 = 0x0f;
Delay(50);
P0 = 0xf0;
Delay(50);

/*下面八行用于控制LED的两次全亮 全灭*/
P0 = 0x00;
Delay(25);
P0 = 0xff;
Delay(25);
P0 = 0x00;
Delay(25);
P0 = 0xff;
Delay(25);

Delay(200); //延时两秒
}
}


/*****************************方法二**********************************
* 描述 : 本实验,让8个LED不停显示依照规律轮流显示。
首先,8个LED分别两次间隔显示。然后高4位显示和低4位显示。
最后间隔全亮、全灭两次。
采用查表方式进行操作,代码更短。

***********************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int

uchar code table[10]={0xaa,0x55,0xcc,0x33,0x0f,0xf0,0x00,0xff,0x00,0xff};
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}

/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i;
while(1)
{
for(i=0;i<10;i++)
{
P0 = table[i];
Delay(30); //延时0.3秒
}
}
}


/*********************************方法三******************************
* 描述 : 该程序用于学习 LED流水灯 的控制方法。
8个LED会进行流水灯的演示

***********************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int

/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}

/********************************************************************
* 名称 : Main()
* 功能 : 实现灯的闪烁
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i, temp;
while(1)
{
temp = 0xfe;
for(i=0; i<8; i++)
{
P0 = temp; //把值赋给P1口
Delay(10); //延时(10毫秒 * j)秒
temp = temp << 1; //值右移一位
temp = temp | 0x01;
}
}
}

永不止步步 发表于11-20 15:16 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:381041个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号