前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >51单片机流水灯电路以及C代码「建议收藏」

51单片机流水灯电路以及C代码「建议收藏」

作者头像
全栈程序员站长
发布2022-08-18 19:27:59
6K2
发布2022-08-18 19:27:59
举报

大家好,又见面了,我是你们的朋友全栈君。

流水灯是51单片机的入门级实验,以下是其电路图以及C代码

流水灯proteus电路图

在这里插入图片描述
在这里插入图片描述

此图发光二极管采用 共阳极式连接

流水灯C代码

代码语言:javascript
复制
#include<reg51.h>
#define TIME 1
//宏定义秒数,方便更改间隔时间
void delaySec(unsigned char n);
void Movinglight();
unsigned char code MovinglightArray[] = { 
   0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char i,n = 1;
int main()
{ 
   
	Movinglight();
	return 0;
}
void Movinglight()
{ 
   
	while(1)
	{ 
   
		for(i = 0;i < 8;i++)
			P1 = MovinglightArray[i];
			delaySec(TIME);
	}
}
void delaySec(unsigned char n)
{ 
   
	unsigned int i,j,l;
	for(l = 0;l < n;l++)
		for(i = 0;i < 1000;i++)
			for(j = 0;j < 114;j++);
}/*当n为1时,误差约0.001s*/

授人以鱼不如授人以渔,在此,笔者觉得应该给大家简单剖析一下以上的代码,以方便初学者更加容易更改和理解代码。

我看代码习惯从主函数开始,相信大家大多都是这样的吧? 进入主函数: 1,调用Movinglight函数 进入Movinglight函数: 1,调用while函数,1代表死循环 2,for循环,依次给P1口赋值

初学者一般看不懂0x 加 数字,其实0x 加 数字的意思,0x就是表示后两位是16进制数。 但是单片机处理是按照二进制处理数据的。 所以我们把上述例子转化为字节(即八个二进制位)。 例如,0xfe = 1111 1110;0xfd = 1111 1101。 不要纠结0xfe或者0xfd的,对应单片机来说,P1口的值不重要,这个值包含的位才是控制单片机的关键所在,单片机只在意它所代表的二进制数的位是0还是1。

根据电路图,P1.7对应二进制数的最高位,P1.0对应二进制数的最低位。 拿0xfe举例大家就能更好地理解了。 0xfe = 1111 1110。 分解开来实际上是: P1.0 = 0 P1.1 = 1 P1.2 = 1 P1.3 = 1 P1.4 = 1 P1.5 = 1 P1.6 = 1 P1.7 = 1 最低位为0,其余为均为1。

那么0和1有什么含义? 以本实验为例,在单片机通电的情况下: P1.0 = 0 表示这个引脚处为低电平。 其余引脚处则是高电平。

那什么是高低电平呢? 说白了就是高低电势。 其实我认为说成高低电势更容易为广大读者理解。 高低电平是相对的,比如5V相对于0V 是高电平,但是相对于10V 又是低电平。 但是圈子里的所有书都是说电平的。 一般情况下,单片机是5V和0V。 一端高电平,一端低电平才能形成电压,发光二极管才能点亮。两边都是高电平或者两边都是低电平发光二极管都不能被点亮。

通常情况下,通电情况下单片机引脚默认为高电平。

由于发光二极管正极连接公共正电压源,所以只有位为0时,灯才会亮。

以上内容如果有什么谬误,敬请指正。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135184.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 流水灯proteus电路图
  • 流水灯C代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档