C51教程 第二个51程序: 跑马灯 流水灯

本文详细介绍了使用AT89c51单片机实现跑马灯流水灯效果的过程,包括原理图绘制、代码编写及Proteus仿真。通过for循环和延时函数,实现了LED灯的逐一点亮和熄灭,形成流水灯效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keil+proteus

第二个51程序 : 跑马灯 流水灯

这是一个AT89c51单片机教程,我们每次都会提供博文教程以及附带资料下载。
单片机就是一个小型CPU,在电子领域应用广泛,电视、冰箱、洗衣机、空调等产品中都能见到他们的身影。它是一个可编程的mcu,根据代码的不同可实现非常多功能

今天要走入第二个程序,跑马灯,按步骤,先硬件,后软件的顺序,先绘制原理图
在这里插入图片描述
建立好之后开始编写代码

#include <regx51.h>

void delayms(unsigned int t)
{
	unsigned int i,j;
	for(i=0; i<t; i++)
	for(j=0; j<120; j++);
}
void main(void)//主函数
{
	int n;
	unsigned char a[8] =  {	//取表数组
		 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

	while(1)
	{
		for(n=0; n<8; n++)//循环取表 流水灯
		{
			P1 = a[n];
			delayms(500);
		}
	}
}

写入keil工程,编译生成hex文件
在这里插入图片描述

进入proteus仿真,烧录hex文件,点击运行…
仿真开始运行跑马灯。
在这里插入图片描述

keil工程代码以及proteus仿真原理图资料包:http://download.csdn.net/download/mbs520/12118172

*代码解读

1、

#include<regx51.h>
包含头文件<regx51.h>,为什么要包含头文件?因为要编写的是51程序,最终代码是要在51单片机里运行,所以要包含一个51头文件,这个文件包含了51所有寄存器的一些定义,怎么查看它呢,编译的时候会出现在你的工程文件中,在keil4的左边工程文件就可以查看了
在这里插入图片描述

2、

void delayms(unsigned int t)//延时函数
{

int a,b;
for(a=0; a<t; a++)
	for(b=0; b<120; b++);

}
延时函数就是让CPU反复执行一条空指令来消耗时间,这段时间CPU仍然在工作,各寄存器的值保持不变。

3、

void main(void)
这是主函数,程序从这里开始执行
另外,51单片机不用循环语句while,也会循环执行main函数中的内容

4、

int n;  
unsigned char a[8] =  {	//取表数组
	 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

int n; //这里定义一个n用来for循环的计数
unsigned char a[8] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
这个数组是干嘛的?我把它转为二进制你就差不多明白了,它们分别是
0000 0001
0000 0010
0000 0100
0000 1000
0001 0000
0010 0000
0100 0000
1000 0000
你会发现有一个1在向左移动,我们把这个1想做是亮着的灯,0是灭的灯,按照这个规律流动,就成了流水灯

5、

while(1)
{
	for(n=0; n<8; n++)//循环取表 流水灯
	{
		P1 = a[n];
		delayms(500);
	}
}

while(1)是一个死循环,会循环执行里面的内容

for(n=0; n<8; n++)//循环取表 流水灯
{
P1 = a[n];
delayms(500);
}
这个才是跑马灯的真正代码,利用for循环n自增,就可以一次输出数组里面的内容。
P1:在头文件里定义,为单片机IO口寄存器,8bit,每一位由低到高分别存储P1_0-P1_7的高低电平0或1。
依次对P1口输出a[0] a[1] 、a[2]、 a[3]、 a[4]…实现跑马灯效果

百度网盘链接:https://pan.baidu.com/s/18cVVHyE6O1AzvUvZMsApZA
提取码:22pi

(有问题欢迎留言,第一次发帖,不到之处希望各位大神指点)
(也可以私信我问题,看到否可以为为大家耐心解答,很高兴跟大家交流技术问题。范围:电路设计 电路仿真 PCB设计 51单片机 msp430 arduino stm32 luinx)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

化作尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值