51单片机——流水灯

目录

实验内容

Proteus电路连接

寻找元件

电路原理图

keil 代码

代码主要内容

led控制规则

源码


实验内容

基于Proteus8.13仿真软件,实现51单片机对流水灯的控制,链接单片机的io控制。

Proteus电路连接

寻找元件

首先,在Proteus上找出所需元器件完成电路的连接,操作如下图所示:

本次所需元件名如下

自上而下分别是51单片机、按钮、电容、电解电容、晶振、红色led、电阻、8位排阻。(还需查询其他元件名称可跳转至改链接http://t.csdnimg.cn/NXfsa)

电路原理图

keil 代码

代码主要内容

头文件

延时函数:对led状态的保持

for循环:通过循环对P1io口进行移位赋值

led控制规则

本文中,led是负极接单片机,故需要单片机输出低电平方可点亮led

初始状态点亮第一颗led,P1.0口输出低电平,其余为高电平,如图所示低四位为1110、高四位为1111,8+4+2+1=F,8+4+2+0=E,二进制转16进制1111 1110=0xfe,无大小写区,(二进制码的顺序与io口的编码号顺序是相反的,只需这样记住即可)

源码

本代码中有四个for循环

第一个for显示效果为从第一颗led(P1.0口led)开始亮依次亮起。

第二个for效果为将第一个for亮起的八个led,从第一颗led(P1.0口led)开始依次熄灭。

第三个for为从第八颗led(P1.7口led)开始反向流水灯。

第四个for效果为将第三个for亮起的八个led,从第八颗led(P1.7口led)开始依次熄灭。

/*******************************************************************************  
* 文件名称:LED流水灯控制实验
* 作者:林帆在努力
* 日期版本:2024.09.08
*******************************************************************************/

#include "reg51.h"     //头文件引用

void Delay(unsigned int t);  //延时函数声名

void main()               // 主函数
{
	unsigned char i=0;
	while(1)
	{
		for(i=0;i<8;i++)//1-8  1111 1110
		{
			P1 = 0XFe<<i;    //通过for循环左移操作对P1的八个位进行赋值
			Delay(50000);    //延时500ms,机械延时,大约等于500ms
		}
		for(i=0;i<8;i++)//1-8   0000 0001初始态
		{
			P1 = ~(0XFe<<i);//对P1的八个位的值进行取反
			Delay(50000);
		}
		for(i=0;i<8;i++)//8-1   0111 1111初始态
		{
			P1 = 0X7f>>i;
			Delay(50000);
		}
		for(i=0;i<8;i++)//8-1   1000 0000初始态
		{
			P1 = ~(0X7f>>i);
			Delay(50000);
		}
	}
}

void Delay(unsigned int t)//延时函数,因为卸载main函数的下面,所以需要在main前面进行一次声名
{
	while(t--);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值