C51教程 第二个51程序: 跑马灯 流水灯(含代码)

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文件

keil工程代码以及proteus仿真原理图资料包:扫码进群领资料


代码解读

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]…实现跑马灯效果

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

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:扫码进群领资料

the end

评论(0)